2016-08-05 5 views
-2

選択クエリでこのループを適用してチェックボックスで行を選択しています。チェックボックスで選択された複数の行を更新したい

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); 

感謝を取得していたIDの経由私のDBを更新します。

+0

あなたの問題は? –

+0

私のデータベースは値を更新していません –

+0

クエリ '$ sql'の' $ _POST ["chk"] 'は' array'ですか? –

答えて

0

クエリでのMySQLを使用することができます -

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

ヨがループを実行する必要はありません。

+0

で動作しました。行だけでなく? 10行を選択した場合は? –

+0

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

エコー "​​"入力タイプ= 'チェックボックス'名前= 'チャック[]'値= '$ res'> "; 私は既にchk []を使用しているので、arrayの値を取得しますか?私はimplodeを使用する必要はありませんか? –

+0

いいえ、あなたは 'implode'を使う必要があります。クエリで' IN'演算子が 'Array'をサポートしないためです。クエリーの前に 'implode'が実行する'カンマ 'で区切られた複数の項目を取ります。 – Jeet

+0

いいえ、私はそれを試してみるでしょう。 –

関連する問題