2017-05-26 33 views
0

当我试图只更新我的表格中的一个单元格时,只更新最后一行。 请帮我解决问题,并教我如何更新每一行。谢谢,谢谢。为什么只更新最后一行的单元格?

相关PHP代码:

<?php 

if(isset($_POST["submit"])) { 
    $callid = $_POST['callid']; 
    $statusOfWork = $_POST['statusOfWork']; 
    $areaNumber = $_POST['areaNumber']; 

    $connection = mysqli_connect('localhost','root','', 'nitzanpi_calls'); 

    if (!$connection){ 
     die("Database connection failed" .mysqli_connect_error()); 
    } 

    mysqli_set_charset($connection,"utf8"); 

    if($areaNumber == '1'){ 
     $sql1 = "UPDATE calls SET statusOfWork = '".$statusOfWork."' WHERE areaNumber = '1' AND callid = '".$callid."'"; 
    } 
    elseif($areaNumber == '2'){ 
     $sql1 = "UPDATE calls SET statusOfWork = '".$statusOfWork."' WHERE areaNumber = '2' AND callid = '".$callid."'"; 
    } 
    elseif($areaNumber == '3'){ 
     $sql1 = "UPDATE calls SET statusOfWork = '".$statusOfWork."' WHERE areaNumber = '".$areaNumber."' AND callid = '".$callid."'"; 
    } 
    elseif($areaNumber == '4'){ 
     $sql1 = "UPDATE calls SET statusOfWork = '".$statusOfWork."' WHERE areaNumber = '4' AND callid = '".$callid."'"; 
    } 
    elseif($areaNumber == '5'){ 
     $sql1 = "UPDATE calls SET statusOfWork = '".$statusOfWork."' WHERE areaNumber = '5' AND callid = '".$callid."'"; 
    } 
    elseif($areaNumber == '6'){ 
     $sql1 = "UPDATE calls SET statusOfWork = '".$statusOfWork."' WHERE areaNumber = '6' AND callid = '".$callid."'";  
    } 

    $query1 = mysqli_query($connection, $sql1);   

    if (!$query1) { 
     die ('SQL Error: '. mysqli_error($connection)); 
    } 
} 
?> 

这里的有关HTML代码:

<form method="post"> 
<div class="container" id="callstable"> 
      <table class="table table-hover"> 
       <thead> 
       <tr> 
       <th class="text-right">#</th>   
       <th class="text-right">אזור</th> 
       <th class="text-right">כתובת</th> 
       <th class="text-right">סוג קריאה</th> 
       <th class="text-right">מועד אחרון לטיפול</th>   
       <th class="text-right">סטטוס</th> 
       </tr> 
       </thead> 

       <tbody>     
       <?php foreach($query as $values): ?> 
       <tr> 
        <input type="hidden" name="callid" value="<?php echo $values['callid']?>"> 
        <input type="hidden" name="areaNumber" value="<?php echo $values['areaNumber']?>"> 
        <input type="hidden" name="statusOfWork" value="<?php echo $values['statusOfWork']?>"> 
        <td class="text-right"><?php echo $values['callid']?> </td> 
        <td class="text-right"><?php echo $values['areaNumber']?> </td> 
        <td class="text-right"><?php echo $values['streetName'] ?> <?php echo $values['streetNumber']?> </td> 
        <td class="text-right"><?php echo $values['callType']?> </td> 
        <td class="text-right"><?php echo $values['timeRemain']?> </td> 
        <td class="text-right"> 
        <select name="statusOfWork">      
        <option value="<?php echo $values['statusOfWork']?>"> 
         <?php echo $values['statusOfWork']?> </option> 
        <option value="פתוח">פתוח</option> 
        <option value="בטיפול">בטיפול</option> 
        <option value="סיום עבודה">סיום עבודה</option> 
        <option value="סגור">סגור</option> </select> 
        </td> 
        <td><button type="button" onclick="window.open('../.php?id=<?php echo $values['callid']?>', '_blank')">צפה במפה</button></td> 
        <td><button type="submit" name="submit" value="submit">עדכן</button></td> 
       </tr> 
       <?php endforeach ?> 
       </tbody> 
      </table> 
    </div> 

    </form> 
+0

腾出空间,“否则,如果”可能是语法错误 –

+0

@HarshMittal这实际上是在[不](https://开头secure.php.net/manual/en/control-structures.elseif.php)错误:-) –

回答

1

在每一个表行,你有相同的命名隐藏输入字段,在提交表单的唯一值提交最后一个唯一命名的元素。

,您可以给隐藏字段唯一名称与呼叫ID ...

<input type="hidden" name="areaNumber_<?php echo $values['callid']?>" value="<?php echo $values['areaNumber']?>"> 
<input type="hidden" name="statusOfWork_<?php echo $values['callid']?>" value="<?php echo $values['statusOfWork']?>"> 

...,改变它的提交按钮,呼叫ID的价值。

在PHP方面,你现在可以

$callid = $_POST['submit']; 
$statusOfWork = $_POST['statusOfWork_'.$callid]; 
$areaNumber = $_POST['areaNumber_'.$callid]; 
+0

嗨,感谢您的帮助。 有一个问题,“改变提交按钮的值到callid”是什么意思? – Shay

+0

'​​'=>'​​'因此您可以识别用于提交表单并了解要使用的数据字段的按钮。 – jar3d

1

解决方法是在你的HTML表单访问值。因为你使用的是一个foreach来创建同名字段的多个副本,所以只有最后一个同名的字段被发送到你的PHP文件。您只需在每个字段名称后添加[],以便所有字段的值都存储在数组中。

<input type="hidden" name="callid[]" value="<?php echo $values['callid']?>"> 

你也可以添加callid作为每行的关键字。

<input type="hidden" name="areaNumber[<?php echo $values['callid']?>]" value="<?php echo $values['areaNumber']?>"> 
<input type="hidden" name="statusOfWork[<?php echo $values['callid']?>]" value="<?php echo $values['statusOfWork']?>"> 

这将会把所有的表格数据到一个数组,如:

Array 
(
    [callid] => Array 
     (
      [0] => 2 
      [1] => 3 
     ) 

    [areaNumber] => Array 
     (
      [0] => 2 
      [1] => 3 
     ) 

    [statusOfWork] => Array 
     (
      [0] => 2 
      [1] => 3 
     ) 

) 

然后,您将需要相应地修改你的PHP代码。另请注意,您的非转义SQL语句倾向于注入当前形式,并且从PHP 5.5起已弃用procedural mysql fucntions。建议使用面向对象的mysqliPDO。您应该使用prepared statements来防止SQL注入。如果你想坚持程序风格,那么使用mysqli_real_escape_string来逃避你的价值。

你也不应该使用MySQL的'root'用户进行查询。最好创建另一个具有需要执行的功能的特权的用户。

面向对象的非常粗略的例子mysqli你的代码版本是:之间

if(isset($_POST["submit"])) { 
    $callid = $_POST['callid']; 
    $statusOfWork = $_POST['statusOfWork']; 
    $areaNumbers = $_POST['areaNumber']; 

    $mysqli = new mysqli("localhost", "my_user", "my_password", "world"); 

    /* check connection */ 
    if ($mysqli->connect_errno) { 
     printf("Connect failed: %s\n", $mysqli->connect_error); 
     exit(); 
    } 

    $mysqli->set_charset("utf8"); 

    foreach($areaNumers as $key => $areaNumer) { 

     if ($stmt = $mysqli->prepare("UPDATE calls SET statusOfWork = ? WHERE areaNumber = ? AND callid = ?")) { 
     /* bind parameters for markers */ 
    $stmt->bind_param("s", $statusOfWork[$key]); 
    $stmt->bind_param("a", $areaNumer); 
    $stmt->bind_param("c", $callid[$key]); 

     /* execute query */ 
    $stmt->execute(); 
      $stmt->close();   
     } 

     /* close connection */ 
    $mysqli->close(); 

    } 
相关问题