【问题标题】:Record not delete from database after submitting the form提交表单后不从数据库中删除记录
【发布时间】:2017-02-11 21:59:06
【问题描述】:

我将表单的所有输出放在 while 循环中,但每当我尝试运行 delete 时,它​​就会停止工作。我的数据库还有一个是 id,它是独一无二的。我正在尝试使用 id 字段进行删除,但没有显示错误并且它也不起作用。如果我将代码放在 while 循环中,它会自行删除并一一显示消息。我怎样才能让它在循环外删除?

 <?php
    session_start();
 ?>

<html>
<body>

<?php
    require_once 'login.php';
    $connection = new mysqli($db_hostname, $db_username, $db_password, $db_database);
    if (!$connection)
        die("unable to connect to mysqli:" . mysqli_error());

    mysqli_select_db($connection, "dbase1") or die("db not selected" . mysqli_error());

    $sql = " SELECT * FROM tab";
    $result = $connection->query($sql);

    if ($result->num_rows > 0) {

        while ($row = $result->fetch_assoc()) {
?>
    <form class="boxed"  style ="border: 4px solid black ; text-align: center; action ="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">

    <h1> Message </h1>

    <?php echo "<br>" . "Name:  " . $row["name"] . "<br>" . " Email :  " . $row["email"] . "<br>" . "Phone # " . $row["phone"] . "<br>" . "Message : " . $row["text"] . "<br>"; ?>
    <input type="submit" class="button" name="delete" value="delete" style =" background-color: grey;
        border: none;
        color: white;
        padding: 15px 70px;
        margin: 15px 0px;
        cursor: pointer;"/>     
    </form> 
<?php 

        }
    }


    if (isset($_POST['delete'])) {
        echo "hry";

        $sql = " DELETE FROM tab WHERE id=" . $row["id"];
        $result = $connection->query($sql);
    }
?>   
</body>
<html>

【问题讨论】:

  • 第一件事 - 请格式化您的代码。你发布的内容太可怕了。您必须了解表单提交的工作原理。您在循环中创建表单,但表单除了提交按钮之外不提交任何数据。那么你怎么知道要删除哪条记录呢?检查此w3schools.com/php/php_forms.asp 改进您的代码,我会提供帮助。
  • 对不起,我是 php 的初学者,但是你建议我卡住了,你需要我缩进代码吗?
  • 除了while循环还有其他方法可以通过删除按钮带来多个数据库条目,是的,再次感谢您的帮助!

标签: php mysql database


【解决方案1】:

当然你应该更好地格式化你的代码,使用相同的引号用于相同的目的,而不是混合 '",使用缩进使代码可读。还要尽量避免使用内联样式,而是使用类进行样式设置。

对于功能本身 - 您必须通过提交表单对要删除的内容进行一些“标识”。如果所有表单都相同,脚本如何知道要删除哪条记录? 还要想想为什么把记录删除代码放在脚本的开头而不是结尾。在您的场景中:您单击删除,脚本将再次显示所有记录(表单),然后删除其中一个(因此它基本上显示不再存在的 roceord)。如果记录删除代码在开头,则记录被删除,然后循环显示它应该做什么。

这些都是非常基础的,所以你应该更多地研究 HTML 和 PHP 是如何工作的......

改进的功能代码:

<?php
require_once 'login.php';
$connection = new mysqli($db_hostname, $db_username, $db_password, $db_database);
if (!$connection) {
    die('unable to connect to mysqli:' . mysqli_error());
}
//not neccesary when the db is selected during connection
//mysqli_select_db($connection, 'dbase1') or die('db not selected' . mysqli_error());

// submited form process
if (isset($_POST['submit']) && $_POST['submit'] == 'delete') {

    echo "hry";

    $sql    = 'DELETE FROM tab WHERE id=' . $_POST['id'];
    $result = $connection->query($sql);

}
?>

<html>
<body>
    <?php
    $sql = 'SELECT * FROM tab';
    $result = $connection->query($sql);

    if ($result->num_rows > 0) {
        while ($row = $result->fetch_assoc()) {

            echo '<h1> Message </h1>';
            echo '<br>' . 'Name: ' . $row['name'];
            echo '<br>' . ' Email: ' . $row['email'];
            echo '<br>' . ' Phone # ' . $row['phone'];
            echo '<br>' . ' Message: ' . $row['text'];
            echo '<br>';

            echo '<form class="boxed" action="' . $_SERVER['PHP_SELF'] . '" method="post" style="...">';
            echo '<input type="hidden" name="id" value="' . $row["id"] . '" />';
            echo '<input type="submit" class="button" name="submit" value="delete" style="..." />';
            echo '</form>';
        }
    }
    ?>
</body>
<html>

【讨论】:

  • 非常感谢,真的非常有帮助,再次感谢:)
  • 如果可以的话,我需要更多帮助,如果您不介意,我在注销时遇到问题,我可以再次发送到这里,感谢您的努力!
  • 实际上它没有注销我对 php 的东西非常糟糕,我的意思是代码缩进如果你能帮助解决这个问题,那将再次有很大的帮助
  • 不是问题,但您应该针对另一个问题发布新问题。解决登录/注销问题取决于它在您的应用中的实现方式。
  • 我发布了,我在这里给你发个链接吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-15
相关资源
最近更新 更多