【问题标题】:Every time I edit a row, it creates another row每次我编辑一行时,它都会创建另一行
【发布时间】:2017-10-09 00:09:27
【问题描述】:

我正在创建一个简单的 PHP 和 SQL 来执行列表应用程序。我的问题是,每次我编辑一行时,它都会创建另一行,而不仅仅是编辑现有的行。以下是 index.php 中的一些代码:

<?php

$current_date = date("Y-m-d");

if ($_SERVER['REQUEST_METHOD'] == 'POST'){

$task = isset($_POST['task']) ? $_POST['task'] : null;
$importance = isset($_POST['importance']) ? $_POST['importance'] : null;
$due_date = isset($_POST['due_date']) ? $_POST['due_date'] : null;
$order = isset($_POST['order']) ? $_POST['order'] : null;

if(isset($task,$importance,$due_date,$user_name)){
$sql = "INSERT INTO tasks (task, importance, due_date, user_name) VALUES ('$task', '$importance', '$due_date', '$user_name')";

$result = mysqli_query($connection, $sql) or die(mysqli_error($connection));

}

}

?>

<?php
while($column = mysqli_fetch_assoc($result)){
?>
<tr><td><?php echo $column["task"]?></td><td class="<?php echo $column["importance"] ?>"><?php echo $column["importance"]?></td><?php if($column["due_date"]<$current_date){echo '<td class="overdue">';}else{echo '<td class="not_overdue">';} ?><?php echo $column["due_date"]?></td><td><?php echo "<a href='edit.php?id=".base64_encode($column['task_id'])."'>Edit</a>" ?></td><td><?php echo "<a href='delete_one.php?id=".base64_encode($column['task_id'])."' onclick=\"return confirm('Are you sure?')\">Delete</a>" ?></td></tr>
<?php
}
?>

这里是edit.php中的一些代码:

<?php

if($_GET['id'] != ""){

$task_id = $_GET['id'];

$task_id = base64_decode($task_id);

$sql = "SELECT * FROM tasks WHERE task_id='$task_id'";

$result = mysqli_query($connection, $sql) or die(mysqli_error($connection));

}

?>

<?php
}
?>

<?php

if ($_SERVER['REQUEST_METHOD'] == 'POST'){

$task = isset($_POST['task']) ? $_POST['task'] : null;
$importance = isset($_POST['importance']) ? $_POST['importance'] : null;
$due_date = isset($_POST['due_date']) ? $_POST['due_date'] : null;

if(isset($task,$importance,$due_date)){

$sql = "UPDATE tasks SET task='$task', importance='$importance', due_date='$due_date' WHERE task_id='$task_id'";

$result = mysqli_query($connection, $sql) or die(mysqli_error($connection));

}

}

?>

谁能告诉我我做错了什么?

【问题讨论】:

  • 大概你有一个insert,你应该有update
  • 这是否意味着旧记录都在数据库中?只有使用触发器才能实现
  • @GordonLinoff 在edit.php中没有插入语句。
  • @JacquesAmar 是的,它将旧记录留在数据库中并创建新记录。
  • 警告:使用mysqli 时,您应该使用parameterized queriesbind_param 将用户数据添加到您的查询中。 请勿使用字符串插值或连接来完成此操作,因为您创建了一个严重的SQL injection bug切勿$_POST$_GET任何用户数据直接放入查询中,如果有人试图利用您的错误,这可能会非常有害。

标签: php mysql sql mysqli edit


【解决方案1】:

在您的edit.php 文件中,Form 标签应该有一个指向edit.php 的Action 以进行更新。

【讨论】:

    【解决方案2】:

    我通过删除 edit.php 上的表单操作解决了这个问题。原文:

    <form method="post" action="index.php">
    

    新:

    <form method="post">
    

    然后我在 edit.php 的代码块底部添加了一个重定向:

    <?php
    
    if ($_SERVER['REQUEST_METHOD'] == 'POST'){
    
    $task = isset($_POST['task']) ? $_POST['task'] : null;
    $importance = isset($_POST['importance']) ? $_POST['importance'] : null;
    $due_date = isset($_POST['due_date']) ? $_POST['due_date'] : null;
    
    if(isset($task,$importance,$due_date)){
    
    $sql = "UPDATE tasks SET task='$task', importance='$importance', due_date='$due_date' WHERE task_id='$task_id'";
    
    $result = mysqli_query($connection, $sql) or die(mysqli_error($connection));
    
    header('Location: index.php');
    
    }
    
    }
    
    ?>
    

    【讨论】:

      【解决方案3】:

      我想在将 task_id 传递给 edit.php 时,您有一个用于编辑值的表单,并且在该表单中,操作部分应该更新为 edit.php。

      【讨论】:

        猜你喜欢
        • 2012-11-06
        • 2017-07-20
        • 2012-10-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-25
        • 1970-01-01
        • 2015-10-20
        相关资源
        最近更新 更多