欣殇芷 2024-06-18 19:24 采纳率: 0%
浏览 1

php用sql 添加新用户信息

img

为什么我php用sql 添加不了新信息进去
为什么我php用sql 添加不了新信息进去
为什么我php用sql 添加不了新信息进去

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-06-18 19:24
    关注

    引自免费微信小程序:皆我百晓生

    从提供的代码片段来看,存在一些明显的错误和不良实践,这些可能是导致无法添加新用户信息到数据库的原因。下面我将详细分析并提供修改建议。

    错误分析与修正

    1. 表单提交方法和动作属性错误 表单的action属性为空,这意味着表单数据将被发送到当前页面自身,但你的PHP代码似乎没有正确处理POST请求。正确的做法是将表单数据发送到一个专门用于处理表单数据的脚本,例如t1.php

    2. POST数据获取错误 在PHP中,$POST应该写为$_POST。此外,if($POST)这样的条件语句不会按预期工作,因为它将检查$_POST是否为真,而通常情况下它总是真的(即使没有POST数据)。正确的做法是检查是否有特定的字段被提交。

    3. SQL语法错误 SQL插入语句中的变量名被错误地使用了前缀S,这会导致SQL语法错误。你需要使用实际的变量名。

    4. SQL注入风险 直接在SQL语句中使用用户输入的数据可能会导致SQL注入攻击。应该使用参数化查询或预处理语句来防止此类攻击。

    修改后的代码示例

    以下是修改后的代码示例,用于解决上述问题:

    <?php
    if ($_SERVER["REQUEST_METHOD"] == "POST") {
        $loginId = $_POST['uid'];
        $loginPwd = $_POST['upwd'];
        $username = $_POST['uname'];
    
        // 数据库连接
        $link = mysqli_connect("localhost", "root", "root", "test");
        if (!$link) {
            die("数据库连接失败: " . mysqli_connect_error());
        }
        mysqli_set_charset($link, "utf8");
    
        // 预处理语句,防止SQL注入
        $stmt = $link->prepare("INSERT INTO users (login_id, login_pwd, username) VALUES (?, ?, ?)");
        $stmt->bind_param("sss", $loginId, $loginPwd, $username);
    
        // 执行插入操作
        if ($stmt->execute()) {
            echo '添加成功';
            header("Refresh:1");
        } else {
            echo '添加失败: ' . $stmt->error;
        }
    
        // 关闭预处理语句和数据库连接
        $stmt->close();
        mysqli_close($link);
    }
    ?>
    
    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>添加用户信息</title>
    </head>
    <body>
    <div class="box2">
    <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>">
        登录名字:<input type="text" name="uid"><br><br>
        登陆密码:<input type="password" name="upwd"><br><br>
        用户姓名:<input type="text" name="uname"><br><br>
        <input type="submit" value="添加新的用户信息">
        <input type="reset" value="重置填入的信息">
    </form>
    </div>
    </body>
    </html>
    

    这个修改后的代码解决了原始代码中的所有问题,并使用了预处理语句来增强安全性。请确保将此代码保存在服务器上并进行测试。如果仍然遇到问题,请检查数据库结构和字段名称是否与代码中使用的相匹配。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 6月18日

悬赏问题

  • ¥15 win2012 iscsi ipsec
  • ¥15 封装的 matplotlib animation 不显示图像
  • ¥15 python摄像头画面无法显示
  • ¥15 关于#3d#的问题:d标定算法(语言-python)
  • ¥15 cve,cnnvd漏洞扫描工具推荐
  • ¥15 图像超分real-esrgan网络自己训练模型遇到问题
  • ¥15 如何构建全国统一的物流管理平台?
  • ¥100 ijkplayer使用AndroidStudio/CMake编译,如何支持 rtsp 直播流?
  • ¥15 用js遍历数据并对非空元素添加css样式
  • ¥15 使用autodl云训练,希望有直接运行的代码(关键词-数据集)