2016-08-05 1 views
-2

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

while($row = mysql_fetch_array($result, MYSQL_ASSOC)) 
    { 
    echo '<tr>'; 
    $res = $row['userid']; 
    echo "<td><input type='checkbox' name='chk[]' value='$res'></td>"; 

    echo 
    "<td>ID :{$row['userid']} <br> </td>". 
    "<td>ID :{$row['id']} <br> </td>". 
    "<td>{$row['name']} <br> </td>". 
    "<td>{$row['shifttime']} <br> </td></tr>"; 
     $i++;  
    } 

Затем нужно обновить мою БД через идентификаторы я получаю от флажков

if(isset($_POST['chk'])){ 
    $shift=$_POST['shiftTime']; 
    $chkarray = $_POST['chk']; 
    foreach ($chkarray as $val) { 
    $sql = "UPDATE user_shift_test2 SET shifttime ='$shift' WHERE id='" . $_POST["chk"] . "' "; 
    $result = mysql_query($sql, $conn); 

Благодарность.

+0

Итак - ваша проблема? –

+0

My db не получает обновленные значения –

+0

Поскольку '$ _POST [" chk "]' в запросе '$ sql' является' array'? –

ответ

0

Вы можете использовать MySQL в запросе -

$sql = "UPDATE user_shift_test2 SET shifttime = $shift WHERE id IN $_POST['chk'] "; 

Yo не нужно выполнить цикл.

+0

, тогда он будет работать для нескольких строки также? в случае, если выбрали 10 строк? –

+0

yes in будет работать для любого количества строк. –

+0

http://www.mysqltutorial.org/sql-in.aspx –

0

Значение $_POST["chk"] - массив, и вы должны использовать оператор IN.

Не использовать foreach Этот код должен работать.

$vals = implode(",", $_POST["chk"]); 
$sql = "UPDATE user_shift_test2 SET shifttime ='$shift' WHERE id IN (" . $vals . ")"; 
$result = mysql_query($sql, $conn); 

EDIT: Как вы сказали, что вы хотите использовать foreach, которые на самом деле не рекомендуется, поскольку это будет использовать несколько запросов, чтобы обновить. Еще вот фрагмент кода, который должен работать.

if(isset($_POST['chk'])){ 
    $shift = $_POST['shiftTime']; 
    $chkarray = $_POST['chk']; 
    foreach ($chkarray as $val) { 
     $sql = "UPDATE user_shift_test2 SET shifttime ='" . $shift . "' WHERE id= '" . $val . "'"; 
     $result = mysql_query($sql, $conn); 
    } 
} 
+0

echo ""; Я уже использовал chk [], чтобы получить значения в массиве? я не должен использовать implode? –

+0

Нет, вы должны использовать 'implode', потому что в запросе оператор' IN' не будет поддерживать 'Array'. это займет несколько элементов, разделенных запятой, которую 'implode' делает перед запросом. – Jeet

+0

хорошо, я попробую. –

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