Зацикливание флажков во время другого цикла

У меня возникли проблемы с решением вложенного цикла. У меня есть форма, которая отправляет серию данных в базу данных MySQL. Я использую функцию while, и она работает правильно. Но теперь у меня есть checkbox вариант для каждой записи, и это моя проблема.

Флажок должен быть отправлен в другую таблицу с идентификатором, идентификатором серии и checkbox за ряд Но все, что я могу сделать, это повторить ответ из первой серии.

Это то, что я хочу:

Lance 1
 Checkbox 1
 checkbox 3
 checkbox 4
Lance 2
 checkbox 2
 checkbox 3
Lance 3
 checkbox 1
 checkbox 2
 checkbox 3

This is what I get
Lance 1
 Checkbox 1
 checkbox 3
 checkbox 4
Lance 2
 Checkbox 1
 checkbox 3
 checkbox 4
Lance 3
 Checkbox 1
 checkbox 3
 checkbox 4

Мой код цикла пока что:

$i=0;
$elements = count($lance);
while ($i < $elementss) {
$query = "INSERT INTO 
    mapa_bordo_lance 
        (id_mb, lance, data_lance, lat, lon, anzol, isca, hora_lan, hora_rec, ave_capt, mm_uso)
    VALUES 
        ('$id_mb', '$lance[$i]', '$data_lance[$i]', '$lat[$i]', '$lon[$i]', '$anzol[$i]', '$isca[$i]', '$hora_lan[$i]', '$hora_rec[$i]',
        '$ave_capt[$i]', '$mm_uso[$i]')";
$result = mysql_query($query, $link);

$y = 0;
$elementss2 = count($checkbox);
while ( $y < $elements2) {
    $query = "INSERT INTO mapa_bordo_mm (id_mb, lance, mm)
            VALUES ('$id_mb', '$lance[$y]', '$medida_metiga[$y]')";
    $result = mysql_query($query, $link);

$y++;
}
$i++;
}

1 ответ

Решение

О флажках

В соответствии с информацией, представленной в вашем вопросе, комментариями и вставленными фрагментами, у меня такое ощущение, что вы получаете то же самое Checkbox значения для каждого копья, потому что в этом коде:

$y = 0;
$elementss2 = count($checkbox);
    while ( $y < $elements2) {
    $query = "INSERT INTO mapa_bordo_mm (id_mb, lance, mm)
              VALUES ('$id_mb', '$lance[$y]', '$medida_metiga[$y]')";
    $result = mysql_query($query, $link);
    $y++;
}

кажется, что $medida_metiga[$y] часть зовет только то же самое $medida_metiga (и его элементы массива...) вместо вызова следующего $medida_metiga0 а также $medida_metiga1 части в вашем примере массива (приведенные в этой ссылке.)

Возможно, вам придется найти способ объединить ваши $medida_metiga массив / ключ с числом (например, 0, 1, ... и т. д.) примерно так:$medida_metiga[$y.$some_number_here] чтобы найти соответствующие флажки. Но вы также можете переосмыслить наименование для $medida_metiga, $medida_metiga0, $medida_metiga1 подход.

Например, вместо:

$medida_metiga

Что делать, если вы начали с:

$medida_metiga0

Это позволит вам более легко перебирать массив / ключи без необходимости проверять, имеет ли этот элемент номер в конце или нет.


О SQL

Когда у вас есть возможность, было бы неплохо проверить, как использовать подготовленные операторы в PHP, если только для того, чтобы предотвратить внедрение SQL. Этот другой ответ может дать вам несколько советов по началу работы с подготовленными утверждениями.


О цикле

В то время как while Циклы могут технически работать для ваших целей, в этом случае, возможно, стоит использовать циклы for или foreach, так как такие циклы могут помочь сохранить код в чистоте и улучшить читаемость кода. Возможно, стоит взглянуть на этот другой ответ для советов по выбору циклов для различных приложений.


О именовании переменных

Возможно, вы уже видели это, но убедитесь, что ваши имена переменных ($elements или же $elementss?) матч:

$elements = count($lance);
while ($i < $elementss) { ... }

// ...

$elementss2 = count($checkbox);
while ( $y < $elements2) {
Другие вопросы по тегам