【问题标题】:How to delete data from SQL, using PHP/HTML form如何使用 PHP/HTML 表单从 SQL 中删除数据
【发布时间】:2014-12-10 18:10:46
【问题描述】:

我有一个关于使用 php 表单从 SQL 中删除数据的问题。

我的 php 表单是这样的:(我猜它只是 HTML)

<html>
    <body>
        <form action="delete.php" method="get">
          Uporabniško ime <input type="text" name="user"><br>
          <input type="submit" value="Submit">
        </form>
    </body>
</html>

然后我有代码应该从我的 sql 中删除,称为 delete.php:

<?php
    $servername = "localhost";
    $username = "test";
    $password = "test";
    $dbname = "iss";

    // Create connection
    $conn = new mysqli($servername, $username, $password, $dbname);
    // Check connection
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    } 

    $user = $_POST['user'];


    /*if (is_int($_GET['up_ime']) 
        $query = "DELETE FROM uporabniki WHERE up_ime = " . $_GET['up_ime'];
        $result = mysqli_query($con, $query);
        // Check the result and post confirm message
    }*/

    $sql = "DELETE FROM iss.uporabniki WHERE uporabniki.up_ime = " .$_POST['user'];

?>

在我的 sql 数据库中,我有名为“iss”的数据库和表“uporabniki”。 up_ime 是唯一的,基本上是用户名。 所以我正在尝试制作表单,我可以在其中写用户名,当我点击提交时,应该从 SQL 数据库中删除该用户。 我不知道我做错了什么以及为什么这不起作用。

【问题讨论】:

  • 你的表单方法不正确;使用“发布”。注意这个 => $_POST
  • 还要确保您要删除的用户是 int 并基于用户 ID 号。否则,".$_POST['user']; 将添加到代码的失败中。更不用说你现在的代码对SQL injection开放。
  • 警告:使用mysqli 时,您应该使用参数化查询和bind_param 将用户数据添加到您的查询中。 请勿使用字符串连接来完成此操作,因为您将创建严重的SQL injection bugs。这段代码非常危险。
  • 仅供参考:如果可以,请使用 jQuery ajax 调用,它会很高效并防止刷新浏览器。

标签: php html mysql sql forms


【解决方案1】:

您在 html 中编写 method="get",在 php 中使用 $_POST。正确更改此设置,您的代码将成功运行。

【讨论】:

    【解决方案2】:

    只需像这样更改表单方法:

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

    别忘了执行查询:

    $sql = "DELETE FROM iss.uporabniki WHERE uporabniki.up_ime = " .$_POST['user'];
    $delete_result = mysqli_query($conn, $sql) ;
    

    【讨论】:

    • 是的,丢失的查询逃脱了我;这就是长时间查看代码时会发生的情况。好吧,我会 +1,但请注意,这仍然SQL injection 开放,不应该被信任。
    • 我按照你说的做了,但我得到了错误:警告:mysqli_query() 需要至少 2 个参数,1 个在 C:\wamp\www\8\delete.php 第 24 行调用堆栈上给出# 时间记忆函数位置 1 0.0005 242584 {main}( ) ..\delete.php:0 2 0.0022 252248 mysqli_query ( ) ..\delete.php:24
    • 是的,你需要把 mysqli_query 的链接放上去。答案已更新
    • 没有更多错误,但它仍然不会从数据库中删除用户
    • 请您回显$sql 并直接从mysql 运行查询?
    【解决方案3】:

    参考本 W3 文档http/1.1 Methods definition

    这应该是怎么写一个专门用来删除东西的表格

    <html>
        <body>
            <form action="delete.php" method="delete">
              Uporabniško ime <input type="text" name="user"><br>
              <input type="submit" value="Submit">
            </form>
        </body>
    </html>
    

    这将是接收请求的 php(我也建议您使用,而不是 mysqliPDO,然后我将在我的回答中使用)

    <?php
        $host= "localhost";
        $username = "test";
        $password = "test";
        $dbname = "iss";
    
        // Create connection and catch possible error
        try {
            $conn = new PDO('mysql:host='.$host.';dbname='.$dbname.', '.$username.', '.$password);}
        catch (Exception $e)
        {
            die('Error : ' . $e->getMessage());
        } 
    
        if (isset($_DELETE['user'] && !empty($_DELETE['user'])) {
            $user = $_DELETE['user'];
        } else {
            // if $_DELETE['user'] is not set or empty we close the transaction
            $pdo = null;
            die('Error : user is undefined');
        }
        $stmt = $conn->prepare("DELETE FROM iss.uporabniki WHERE uporabniki.up_ime = :user");
        // we bind parameter to reduce the risk of injection
        $stmt->bindparam(:user, $user, PDO::PARAM_STR);
        $stmt->execute();
        $stmt = null;
        $pdo = null;
    ?>
    

    希望这对您或将来的其他人有所帮助!

    【讨论】:

      猜你喜欢
      • 2015-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-25
      • 2023-02-06
      • 1970-01-01
      • 1970-01-01
      • 2021-12-08
      相关资源
      最近更新 更多