【问题标题】:Wrong DB record being updated正在更新错误的数据库记录
【发布时间】:2014-01-07 05:36:16
【问题描述】:

也许我累了,也许我只是在处理这个问题,但无论如何,有些事情是不对的。

当复选框被勾选时,数据库被更新,但 $id 被忽略并且只有第一条具有空 pu_time 列的记录被更新。应该发生的是当复选框被勾选时,当前时间被插入到具有提供的 id 的相应记录中。我可以回显 $id,但它仍然被忽略。

我已经成功地使用文本框完成了这项工作....

$sql = "SELECT * FROM  dispatch WHERE driver = '' OR pu_time = '' OR do_time = ''";
    $result = mysql_query($sql);
            $i = 0;
        $color1 = "#2b2823";
        $color2 = "#333333";
        while($row = mysql_fetch_array($result)){
            $id = $row['id'];
            if($i%2 == 1) {$color = $color1;}
                else {$color = $color2;}

                echo "<tr style='background-color: $color'>";
                echo '<td><input name="id" type="hidden" value="'.$row['id'].'" />'.$row['call_time'].'</td>';
                echo "<td>".$row['start_address']."</td>";
                echo "<td>".$row['end_address']."</td>";
                echo "<td>".$row['phone']."</td>";
                echo "<td>".$row['puat']."</td>";
if (isset($row['pu_time']) === true && empty($row['pu_time']) === true){

                        echo '<td>
                             <form id = "pu_time">
                              <input name="pick_up_time" type="checkbox" value="" onchange="this.form.submit()" />
                            </form></td>';
                                if (isset($_GET['pick_up_time'])){
                                    $pick_up = date('g:ia');
                                    $update_p = "UPDATE dispatch SET pu_time = '{$pick_up}' WHERE id = '{$id}'";
                                    mysql_query($update_p,$con)
                                    or die;
                                    unset($_GET['pick_up_time']);
                                    echo '<script type="text/JavaScript">
                                            window.location.href = "new_index.php";
                                          </script>';
                                    }
                        }
                        else {
                            echo "<td>".$row['pu_time']."</td>";
                            }

【问题讨论】:

  • mysql 函数已弃用,请使用 mysqli。
  • 你真的应该使用 PDO 或 mysqli 的预处理语句。 SQL 中的连接非常糟糕,而且很危险。

标签: php mysql checkbox sql-update


【解决方案1】:

只需两项更改即可解决您的问题:

将行ID添加到隐藏字段中,然后提交:

<?php echo '
<td><form id = "pu_time">
    <input name="pick_up_time" type="checkbox" value="" onchange="if(this.checked)this.form.submit()" />
    <input name="rowId" type="hidden" value="'.$id.'" />
</form></td>';

当然,数据库更新部分将在循环之外以避免不必要的数据库调用,因为我们正在重定向到新页面(或同一页面):

if (isset($_GET['pick_up_time']) && !empty($_GET['rowId'])){ // must have id;
    $pick_up = date('g:ia');
    $rowId = $_GET['rowId']; //mark this!
    $update_p = "UPDATE dispatch SET pu_time = '{$pick_up}' WHERE id = '{$rowId}'";
    mysql_query($update_p,$con)
    or die;
    unset($_GET['pick_up_time']);
    echo '<script type="text/JavaScript">
        window.location.href = "new_index.php";
      </script>';
}

 //and then write your code what is currently in the first line: $sql = "SELECT * FROM  dispatch WHERE dr ...... and so;

【讨论】:

  • 谢谢,谢谢,谢谢!!我已经玩了很久了……现在我可以去睡觉了! ;)
猜你喜欢
  • 2016-01-15
  • 2016-06-12
  • 1970-01-01
  • 1970-01-01
  • 2018-06-08
相关资源
最近更新 更多