2012-02-21 4 views
0

Привет, ребята, и простите за мой английский,UPDATE через выбранную кнопку радио

Я пытаюсь сделать простой UPDATE с помощью выбранных переключателей, но это не работает. У меня есть 3 < input type = 'radio' > кнопки во время цикла, и каждая кнопка должна делать что-то еще, что я хочу отфильтровать.

$result=mysql_query("SELECT id FROM table WHERE state=0"); 
    while ($record=mysql_fetch_array($result)): 
     <form method='post' action=''> 
     <input type='radio' name='state' value='1' /> 1 
     <input type='radio' name='state' value='2' /> 2 
     <input type='radio' name='state' value='3' /> 3 

     <input type='submit' value='Send' /> 
     </form> 
    endwhile; 

Если выбрать один из трех вариантов кнопки и нажмите на кнопку «Отправить», затем одну строку (на основе ID) должно быть обновление БД MySQL:

mysql_query ("UPDATE table SET state=(selected radio button number 1-3) WHERE id=$record[id]"); 

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

Если я делаю это так:

$result=mysql_query("SELECT id FROM table WHERE state=0"); 
    while ($record=mysql_fetch_array($result)): 
     <form method='post' action=''> 
     <input type='radio' name='state' value='$record[id]' /> 1 
     <input type='radio' name='state' value='$record[id]' /> 2 
     <input type='radio' name='state' value='$record[id]' /> 3 

     <input type='submit' value='Send' /> 
     </form> 
    endwhile; 

тогда идентификатор признают скриптом, но я не знаю, как я могу фильтруется, число которых (1, 2 или 3) направляет в UPDATE запрос для столбца «состояние». Для меня это большая дилемма, и я не могу понять. Мне нужно распознать идентификатор и отфильтровать выбранное число (1-3). Можете ли вы мне помочь ?

ответ

1

Существует два варианта.

Первое:

$result=mysql_query("SELECT id FROM table WHERE state=0"); 
while ($record=mysql_fetch_array($result)): 
    <form method='post' action=''> 
    <input type='hidden' name='recordId' value='$record[id]' /> 
    <input type='radio' name='state' value='1' /> 
    <input type='radio' name='state' value='2' /> 
    <input type='radio' name='state' value='3' /> 
    <input type='submit' value='Send' /> 
    </form> 
endwhile; 

и

$recordId = (int)$_POST['recordId']; 
$state = (int)$_POST['state']; 
mysql_query ("UPDATE table SET state=$state WHERE id=$recordId"); 

Второе:

$result=mysql_query("SELECT id FROM table WHERE state=0"); 
<form method='post' action=''> 
    while ($record=mysql_fetch_array($result)): 
     <input type='radio' name='state[$record[id]]' value='1' /> 
     <input type='radio' name='state[$record[id]]' value='2' /> 
     <input type='radio' name='state[$record[id]]' value='3' /> 
    endwhile; 
    <input type='submit' value='Send' /> 
</form> 

и

foreach($_POST['state'] as $key => $val) { 
    $recordId = (int)$key; 
    $state = (int)$val; 
    mysql_query ("UPDATE table SET state=$state WHERE id=$recordId"); 
} 

(обратите внимание, что приведенный выше код, вероятно, не синтаксически правильно, и дано в качестве иллюстрации к идее)

Кроме того, смешение кода и данных является плохой практикой; вместо этого используйте вместо этого prepared statements.

+0

Я не знаю, что вы имеете в виду. $ _POST ['state'] содержит значение выбранного переключателя только в первом примере, но не содержит идентификационные данные. Я слышал о методе , но мне это не нравится, потому что переключатели находятся в цикле. Я пытаюсь сделать это по-другому. –

+0

Ваш исходный вопрос не содержит никаких циклов. Что вы повторяете? – penartur

+0

Я написал это, но я не счел нужным записывать его в скрипт, всего лишь секунду, я делаю все правильно. EDIT: сделано, надеюсь, теперь все в порядке. –

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