2017-05-12 13 views
-2

私は問題に直面しています。私はエラーを見つけることができませんでした。私はデータベース名のテストを持っています。 id、cl1、cl2、cl3 .......のようにいくつかのフィールドがあります。私の選択は、チェックボックスを使ってidデータベーステーブルフィールド(cl1)を1で更新し、残りを3で更新することです。 私はそれが自分の仕事の考えをすることができると思う。ここに私のデータベースのスクリーンショットがあります。 https://www.dropbox.com/s/meijmf69dkkb5o2/db.JPG?dl=0 ここに私のインターフェイスのスクリーンショットがあります。 https://www.dropbox.com/s/fc1b186ly0mda8u/interface.JPG?dl=0 ID 1001,1003を選択したとき。それは別の結果を表示します 私のコードです:私は長い間それを試しています。 HTMLでMySQLクエリのケース条件

if (isset($_POST["sub"])) { 
$values = $_POST['check']; 
$max=sizeof($values); 
$valuesArr = array(); 
foreach ($values as $a){ 
$valuesArr[] = mysql_real_escape_string($a); 
         } 
for ($i=0; $i <$max ; $i++) { 
    $query2="UPDATE test SET cl1 = CASE WHEN Id = '$valuesArr[$i]' THEN 1 ELSE 3 END"; 
$result_upp=mysqli_query($con,$query2); 

    } 

} 

一部

while($row = mysqli_fetch_array($result2)) 
     { 
     ?> 
     <tr class="success"> 
      <td> <?php echo $row['Id'] ?> </td> 
     <td >&nbsp&nbsp<input type="checkbox" name="check[]" class="chk_val" value="<?php echo $row['Id']?>"/></td> 

     <td style="background-color: <?php echo ($row['cl1'] == "1") ? "green": "#FF4500" ?>; color:<?php echo ($row['cl1'] == "1") ? "green": "#FF4500" ?>; "> 
     <?php echo $row['cl1'] ?> 
     </td> 
     <td style="background-color: <?php if($row['cl2'] == "1")echo "green"; if($row['cl2'] == "2")echo "gainsboro"; if($row['cl2'] == "3")echo "yellow" ?>; color:<?php if($row['cl2'] == "1")echo "green"; if($row['cl2'] == "2")echo "gainsboro"; if($row['cl2'] == "3")echo "yellow" ?>; "> 
     <?php echo $row['cl2'] ?> 
      </td> 
     <td style="background-color: <?php echo ($row['cl3'] == "1") ? "green": "#FF4500" ?>; color:<?php echo ($row['cl3'] == "1") ? "green": "#FF4500" ?>; "> 
     <?php echo $row['cl3'] ?> 
     </td> 
     <td style="background-color: <?php echo ($row['cl4'] == "1") ? "green": "#FF4500" ?>; color:<?php echo ($row['cl4'] == "1") ? "green": "#FF4500" ?>; "> 
     <?php echo $row['cl4'] ?> 
     </td> 
     <td style="background-color: <?php echo ($row['cl5'] == "1") ? "green": "#FF4500" ?>; color:<?php echo ($row['cl5'] == "1") ? "green": "#FF4500" ?>; "> 
     <?php echo $row['cl5'] ?> 
     </td> 

     <?php   
      } 
     ?> 
    </tr> 
    </tbody>    
    </table> 
    <div class="pull-right"> 
    <input type="submit" name="sub" class="btn btn-info" value="Submit Attendance"> 
    </div> 
    </form> 

答えて

0

、あなたが1または3

しかし、どのようなクエリが実際にあるいずれかの時点で、行1を更新しようとしているように見えますループのすべての反復でデータベース内のすべての行を更新しています。

ループの最後の反復では、対応する行がcl1 = 1、かつ他のすべてのcl1 = 3に更新され、以前の更新をすべて上書きします。

代わりにこれを試してみてください:

if (isset($_POST["sub"])) { 
    $values = $_POST['check']; 
    $max=sizeof($values); 
    $valuesArr = array(); 

    foreach ($values as $a){ 
     $valuesArr[] = "'".mysql_real_escape_string($a)."'";} //I added single quotes, because mysql_real_escape_string() only works on string 

    $query2 = "UPDATE test SET cl1 = CASE WHEN Id in (".implode(',', $valuesArr).") THEN 1 ELSE 3 END"; 
    $result_upp=mysqli_query($con,$query2); //run this query once to update all rows to the correct value 
} 
1

あなたの最後に実行されたクエリがpriviousものを更新するからです。

このコードを試してください:あなたのループfor ($i=0; $i <$max ; $i++)

<?php 
if (isset($_POST["sub"])) { 
$values = $_POST['check']; 
$max=sizeof($values); 
$valuesArr = array(); 
foreach ($values as $a){ 
$valuesArr[] = mysql_real_escape_string($a); 

         } 
    $values = implode("','",$valuesArr); 

    $query2="UPDATE test SET cl1 = CASE WHEN Id IN ('$values') THEN 1 ELSE 3 END"; 
$result_upp=mysqli_query($con,$query2); 



}