2012-05-16 2 views
1

Этот код правильно устанавливает идентификатор флажка, однако он выбирает раскрывающийся список выбора из моего первого выбора, а не тот, который я изменил. Есть ли способ исправить это? Im с использованиемPHP обновляет несколько строк с идентификатором и выбирает

<select name="status[]"><option value="1">active</option><option value="0">inactive</option></select> 

вот мой код процесса.

if (isset($_POST['submit'])) { 


// find out how many records there are to update 

$size = count($_POST['id']); 

// start a loop in order to update each record 
$i = 0; 
while ($i < $size) { 
// define each variable 
$id = $_POST['id'][$i]; 
$status= $_POST['status'][$i]; 

// do the update and print out some info just to provide some visual feedback 
$query = "UPDATE users SET status = '$status' WHERE id = '$id' LIMIT 1"; 
mysql_query($query) or die ("Error in query: $query"); 
print "$status | $id<br /><br /><em>Updated!</em><br /><br />"; 
++$i; 
} 
mysql_close(); 
} 
+1

Это уязвимо для SQL-инъекции ... – ChristopheD

+0

Не используйте 'mysql_' функции. Используйте PDO или mysqli. – webbiedave

+0

Несмотря на @ ChristopheD и webbiedave откровенный и не очень полезный ответ ... типичный пользователь 20 000 пользователей, они правы. Вы должны использовать PDO или Framework, которые будут правильно обрабатывать SQL-инъекцию. Откуда появился идентификатор? Это флажки? – manumoomoo

ответ

2

Я согласен с комментариями, однако, я просто предоставлю быстрый ответ на вопрос.

Я бы сделал что-то подобное для простоты в HTML. Индексы массива могут просто эхо из счетчика в PHP или вводить статически, если они не будут меняться в зависимости от чего-либо еще. Просто увеличивайте этот показатель с каждым элементом.

<input type="checkbox" name="id[0]" value="1"> Some Text 
<select name="status[0]"> 
    <option value="1">Option 1</option> 
    <option value="2">Option 2</option> 
</select> 

Теперь для PHP

if (isset($_POST['submit'])) { 

    foreach($_POST['id'] as $i=>$value) { 
     if($value == 1) { 
      // define each variable 
      $id = $_POST['id'][$i]; 
      $status= $_POST['status'][$i]; 

      // do the update and print out some info just to provide some visual feedback 
      $query = "UPDATE users SET status = '$status' WHERE id = '$id' LIMIT 1"; 
      mysql_query($query) or die ("Error in query: $query"); 
      print "$status | $id<br /><br /><em>Updated!</em><br /><br />"; 
     } 

    } 
    mysql_close(); 
} 

EDIT:

Я забыл упомянуть, где вы можете установить значение флажка на то, что вам нужно, чтобы это было. Просто убедитесь, что if($value==1) проверяет допустимый результат (например, >0, если все ваши идентификаторы положительны).

+0

Спасибо, я знаю, что в SQL-инъекции, но отправлял мой тестовый код для быстрой помощи. После этого я добавляю защиту от инъекций. Я также сохраняю свои строки DB в разделах реестра, чтобы никто не мог их получить. –

+0

Еще один вопрос: у меня есть выбранное значение для текущего значения в опции выбора. Я обнаружил, что PHP игнорирует выбранное значение и вместо этого использует выбранную версию на дисплее. Есть ли способ переписать это или убедиться, что он использует фактическое значение? –

+0

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