update в цикле

dnes

Новичок
update в цикле

В форме циклом выписываются наименования, у которых юзер при желании может внести либо изменить какие-нибудь необязательные примечания.

В форме пишу:

<td>
<input name="about[]" type="text" size="30" value="<?=$row[about]?">
</td>
<td>
<input name="id[]" type="checkbox" value="<?=$row[id]?">
</td>

В запросе:

$c=count($id);

for($i=0;$i<$c;$i++) {

if ($about[$i] != '')

$sql="UPDATE items SET about=$about[$i], ok=1 WHERE id=$id[$i]";
...
}
Если элементы для апдейта выбираются последовательно- все ОК, иначе хаос... Где ошибка?
 

Johannes

Guest
А потому, что массив надо проходить используя [m]foreach[/m], а не в цыкле.
 

dnes

Новичок
Пробовал. Тоже ерунда получалась. Было что-то вроде:

foreach ($id AS $value) {

if ($about !='')

$sql="UPDATE items SET about='$about', ok=1 WHERE id=$value";
...
}
 

Фанат

oncle terrible
Команда форума
как интересно.
в первом примере у нас $about - это массив, а во втором он волшебным образом перестал быть массивом
 

dnes

Новичок
Совета.

foreach ($id AS $value) {

if ($about[] !='')

$sql="UPDATE items SET about='$about', ok=1 WHERE id=$value";
...
}
 

Фанат

oncle terrible
Команда форума
if ($about[]
и что должен, по-твоему, делать этот код?

-~{}~ 21.09.04 19:51:

совет один - понимать, что ты делаешь
пока такого понимания нету - есть от балды написанный код.

вопрос.
почему вызов $about в примере с foreach отличается от твоего предыдущего кода?
 

Johannes

Guest
Слушай, друг!
Поди ка прочти книжку "РНР для кипятильников", раздел "Массивы".
А после того, как хорошо выучиш этот раздел наизусть, посмотри [m]foreach[/m] и гдето через недельку пииш в форум.
 

dnes

Новичок
Не пущать!

Хотя я уже, кажется, начинаю понимать, где набедокурил.

-~{}~ 21.09.04 17:58:

Кажется, начинают бить... Спасибо за участие.
 

dnes

Новичок
Я бы с удовольствием (речь, естественно, не о Вас, мессир). Но не виртуально.
 

Фанат

oncle terrible
Команда форума
А вот это уже не по-джентльменски.
На виртуальные кулаки отвечать реальными.

Есть еще вариант, если дача сдачи сопряжена с такими издержками.
просто не обращать внимания на всякий досужий свист.
Этот товарищ много где пишет, и везде с таким же успехом.
 

Фанат

oncle terrible
Команда форума
Блин, я жу забыл давно, о чем здесь речь

foreach имеет ДВА параметра
foreach ($key => $value)
Вот ты проходишь по первому массиву, и получаешь его ключи
Которые должны совпадать с ключами второго массива
и проверять надо элемент второго массива, С ТЕМ ЖЕ с ключом
if ($about[$key] !='')
 

dnes

Новичок
Было такое сновидение(еще вчера):

foreach ($id AS $key => $value) {
if ($about[$key] !='') {

Опять все хаотично апдейтиться. Может это с чекбоксом не проходит. То же самое, или даже без ключа, через селект - все отлично.

пс: пишу с "Нет транслиту!", так что извините, что долго.
 

Фанат

oncle terrible
Команда форума
если хаотично - выведи перед собой на экран оба массива и погляди глазами, что там хаотичного
 

dnes

Новичок
Сейчас попробую.

-~{}~ 24.09.04 16:36:

Все то же самое. До первого нечекнутого бокса все в порядке. Потом вся Библия нафиг: id сползают вниз.
 
Сверху