2013-06-16 3 views
1

У меня есть таблица под названием продукты, с:Обновления MySQL таблица с PHP и флажки

идентификатор: INT, первичный ключ, автоматическое приращение product_name: VARCHAR выделены: int (1 или 0)

Итак, я хочу, чтобы выделенное поле полностью обновлялось через мою страницу администратора , поэтому всякий раз, когда я получаю данные каждого продукта (или строки), у меня есть флажок рядом с именем продукта, указывающим, выделен ли он (1) или нет (0).

Это мой код:

<?php 
$host = "localhost"; 
$user = "root"; 
$pass = "usbw"; 
$db = "test"; 

mysql_connect($host,$user,$pass); 
mysql_select_db($db); 
?> 

<?php 

if(isset($_POST['submit'])) 
{ 
    foreach (isset($_POST['checkBox']) as $id => $value) 
{ 
    mysql_query("UPDATE products SET highlighted='$value' WHERE id='$id'"); 
} 
echo "Updated! <a href='index.php'>Back</a>"; 
} 
else 
{ 
    echo "<form action='index.php' method='POST'>"; 
    $result = mysql_query("SELECT * FROM products"); 
    while($q = mysql_fetch_assoc($result)) 
    { 
     echo "".$q['product_name'].""; 
     if($q['highlighted'] == '1') 
     { 
      echo "<input type='checkbox' checked value='1' name='checkBox['"; ?><?php echo $q['id']; ?><?php echo "']'>"; 
    } 
    else 
    { 
     echo "<input type='checkbox' value='1' name='checkBox['"; ?><?php echo $q['id']; ?><?php echo "']'>"; 
    } 
    echo "<br>"; 
    } 

echo "<input type='submit' value='submit' name='submit'>"; 
echo "</form>"; 
} 

?> 

По какой-то причине, я получаю следующее сообщение об ошибке, когда я пытаюсь обновить формы:

Warning: Invalid argument supplied for foreach() in C:\Users\Badsector\Desktop\USBWebserver v8.5\8.5\root\teszt\index.php on line 15 

Спасибо за вашу помощь, заранее, я Теперь я совершенно смущен, я часами боюсь!

ответ

0

Изменить

foreach (isset($_POST['checkBox']) as $id => $value) 

в

foreach ($_POST['checkBox'] as $id => $value) 

Исеть() возвращает логическое значение, и foreach ожидает массив.

Также вы склонны к инъекции mysql.

+0

Это не реально решить мою проблему. Примечание: Неопределенный индекс: checkBox в C: \ Users \ Badsector \ Desktop \ USBWebserver v8.5 \ 8.5 \ root \ teszt \ index.php в строке 15 – fame

0

дополнительно к тому, что blake305 сказал, что вам нужно изменить:

echo "<input type='checkbox' checked value='1' name='checkBox[]'>"; 

это будет GIV вам массив в $_POST['checkBox'] - к сожалению, Ваш идентификатор ушел тогда.

Если то необходимо, вам нужно получить каждую коробку в явном виде:

name='checkBox_<?php echo $q['id']; ?>

и не использовать [] после имени, так что имеет какое-то значение в PHP: результат POST будет массив вместо строки.

добавить: это выглядит странно, как хорошо: name='checkBox['"; ?><?php echo $q['id']; ?><?php echo "']'> не следует, что быть name='checkBox[\"" . $q['id']. "\"]...

+0

Я мог бы быть немым но никто из них не работал для меня. :(Может быть, мне что-то не удалось ... Но вы упомянули, что я должен получать каждое поле явно. Разве я не делал этого, хватая идентификатор для каждого поля с именем = '.... $ q [' id '] 'thingy? Извините, я полностью новичок. – fame

+0

Предполагаемый $ id - 1, из вашего кода имя переменной - это 'checkbox [1]'. Вы должны получить его с помощью опции $ _POST [' checkbox [1] '] ', так как это имя его. Это не будет работать из-за специальной внутренней обработки [] в именах переменных POST в PHP.Просто добавьте 'var_dump [$ _ POST]' в начале вашего скрипта и посмотрите, что находится в '$ _POST'array. –

Смежные вопросы