You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP表单无法插入数据库数据排查(疑与单选按钮Preke相关)

无法向数据库插入数据的问题排查与修复

我仔细梳理了你的代码,发现几个核心问题导致数据无法插入数据库,其中包含你怀疑的单选按钮相关逻辑,还有其他关键漏洞,下面逐一说明并给出修复方案:


1. 未完成的test_input数据处理函数

你的test_input函数最后一行代码不完整,只写了htmlspecialc,正确应该是htmlspecialchars($data);。这个函数负责清洗用户输入,不完整会导致脚本报错,直接中断后续逻辑。

2. 单选按钮验证逻辑位置错误

你把单选按钮的验证代码放在了$_SERVER["REQUEST_METHOD"] == "POST"的判断外部!当页面首次加载(非POST请求)时,$_POST["Preke"]根本不存在,会直接触发错误提示,而且这部分验证完全脱离了表单提交的上下文。正确的做法是所有表单验证逻辑都要包裹在POST请求的判断块内。

3. 缺失数据库插入的核心代码

你只实现了表单验证逻辑,但完全没有编写连接数据库、执行插入语句的代码——没有实际执行插入操作,数据当然不会被写入数据库。

4. 变量赋值的低级错误

  • 你把Pk字段的错误提示赋值给了$Pk变量:$Pk = "Įveskite prekės kodą";,正确应该是赋值给$PkErr,否则会把错误文本当成字段值传入数据库。
  • 数字类型字段(Pk、Kiekis)仅验证非空不够,还需要验证是否为有效数字,避免插入非法内容。

修复后的完整代码示例

<!DOCTYPE HTML> 
<?php 
// 定义变量并初始化为空值
$VarErr = $PavErr = $AdErr = $PreErr = $PkErr = $KiekErr = "";
$Vardas = $Pavarde = $Adresas = $Preke = $Pk = $Kiekis = "";

// 数据清洗函数
function test_input($data) {
    $data = trim($data);
    $data = stripslashes($data);
    $data = htmlspecialchars($data);
    return $data;
}

// 表单提交处理逻辑
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    // 验证Vardas
    if (empty($_POST["Vardas"])) {
        $VarErr = "Įveskite vardą";
    } else {
        $Vardas= test_input($_POST["Vardas"]);
        if (!preg_match("/^[a-zA-Z ]*$",$Vardas)) {
            $VarErr = "Galima vesti tik su raidėmis";
        }
    }

    // 验证Pavarde
    if (empty($_POST["Pavarde"])) {
        $PavErr = "Įveskite pavardę";
    } else {
        $Pavarde = test_input($_POST["Pavarde"]);
        if (!preg_match("/^[a-zA-Z ]*$",$Pavarde)) {
            $PavErr = "Galima vesti tik su raidėmis";
        }
    }

    // 验证Adresas
    if (empty($_POST["Adresas"])) {
        $AdErr = "Įveskite adresą";
    } else {
        $Adresas= test_input($_POST["Adresas"]);
    }

    // 验证Preke(单选按钮)
    if (empty($_POST["Preke"])) {
        $PreErr = "Pasirinkite prekės tipą";
    } else {
        $Preke = test_input($_POST["Preke"]);
    }

    // 验证Pk(数字验证)
    if (empty($_POST["Pk"])) {
        $PkErr = "Įveskite prekės kodą";
    } else {
        $Pk = test_input($_POST["Pk"]);
        if (!is_numeric($Pk)) {
            $PkErr = "Prekės kodas turi būti skaičius";
        }
    }

    // 验证Kiekis(数字验证)
    if (empty($_POST["Kiekis"])) {
        $KiekErr = "Įveskite kiekį";
    } else {
        $Kiekis = test_input($_POST["Kiekis"]);
        if (!is_numeric($Kiekis) || $Kiekis <= 0) {
            $KiekErr = "Kiekis turi būti teigiamas skaičius";
        }
    }

    // 所有验证通过后,执行数据库插入
    if (empty($VarErr) && empty($PavErr) && empty($AdErr) && empty($PreErr) && empty($PkErr) && empty($KiekErr)) {
        // 数据库连接配置(根据你的实际信息修改)
        $servername = "localhost";
        $username = "你的数据库用户名";
        $password = "你的数据库密码";
        $dbname = "你的数据库名称";

        // 创建连接
        $conn = new mysqli($servername, $username, $password, $dbname);
        // 检查连接
        if ($conn->connect_error) {
            die("连接失败: " . $conn->connect_error);
        }

        // 使用预处理语句防止SQL注入
        $stmt = $conn->prepare("INSERT INTO 你的表名 (Vardas, Pavarde, Adresas, Preke, Pk, Kiekis) VALUES (?, ?, ?, ?, ?, ?)");
        $stmt->bind_param("ssssii", $Vardas, $Pavarde, $Adresas, $Preke, $Pk, $Kiekis);

        // 执行插入并提示结果
        if ($stmt->execute()) {
            echo "<div class='alert alert-success'>Užsakymas sėkmingai įrašytas!</div>";
        } else {
            echo "<div class='alert alert-danger'>Klaida įrašant užsakymą: " . $stmt->error . "</div>";
        }

        // 关闭连接
        $stmt->close();
        $conn->close();
    }
}
?> 
<html class="no-js" lang="en"> 
<head> 
    <title>Dailės parduotuvė</title> 
    <meta charset="UTF-8"> 
    <meta http-equiv="x-ua-compatible" content="ie=edge"> 
    <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous"> 
    <link rel="stylesheet" type="text/css" href="css/stilius.css"> 
</head> 
<body class="content "> 
    <div class="container"> 
        <nav class="navbar navbar-expand-lg navbar-dark "> 
            <a class="navbar-brand" href="index.html">Kauno dailė</a> 
            <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent"> 
                <span class="navbar-toggler-icon"></span> 
            </button> 
            <div class="collapse navbar-collapse" id="navbarSupportedContent"> 
                <ul class="navbar-nav ml-auto"> 
                    <li class="nav-item"> 
                        <a class="nav-link" href="Visos.html">Visos prekės</a> 
                    </li> 
                    <li class="nav-item"> 
                        <a class="nav-link" href="Uzsakymas.php">Užsisakymas</a> 
                    </li> 
                    <li class="nav-item"> 
                        <a class="nav-link" href="#">Kontaktai</a> 
                    </li> 
                </ul> 
            </div> 
        </nav> 
        <div> 
            <div class="content sm-4 text-center"> 
                <h2>Užsisakymo forma</h2> 
                <p><span class="error">* privalomi laukai</span></p> 
                <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> 
                    <p class="text-center">Vardas</p><br> 
                    <input type="text" name="Vardas" value="<?php echo $Vardas;?>"> 
                    <span class="error">* <?php echo $VarErr;?></span> 

                    <p class="text-center">Pavarde</p><br> 
                    <input type="text" name="Pavarde" value="<?php echo $Pavarde;?>"> 
                    <span class="error">* <?php echo $PavErr;?></span> 

                    <p class="text-center">Adresas</p><br> 
                    <input type="text" name="Adresas" value="<?php echo $Adresas;?>"> 
                    <span class="error">* <?php echo $AdErr;?></span><br> 

                    Prekės rūšis:<br> 
                    <input type="radio" name="Preke" value="Vienišas(-a)" <?php echo ($Preke == "Vienišas(-a)") ? "checked" : "";?>>Dažai(5&euro;)<br> 
                    <input type="radio" name="Preke" value="Susituokęs(-usi)" <?php echo ($Preke == "Susituokęs(-usi)") ? "checked" : "";?>>Teptukas(2&euro;)<br> 
                    <input type="radio" name="Preke" value="Išsiskyręs(-usi)" <?php echo ($Preke == "Išsiskyręs(-usi)") ? "checked" : "";?>>Pieštukas(2&euro;)<br> 
                    <input type="radio" name="Preke" value="Našlys(-ė)" <?php echo ($Preke == "Našlys(-ė)") ? "checked" : "";?>>Ofiso įrankis(1&euro;)<br> 
                    <span class="error">* <?php echo $PreErr;?></span> 
                    <br> 

                    <p class="text-center">Prekės kodas</p><br> 
                    <input type="number" name="Pk" value="<?php echo $Pk;?>"> 
                    <span class="error">* <?php echo $PkErr;?></span> 

                    <p class="text-center">Kiekis</p><br> 
                    <input type="number" name="Kiekis" value="<?php echo $Kiekis;?>"> 
                    <span class="error">* <?php echo $KiekErr;?></span> 
                    <br> 

                    <!-- Input For Add Values To Database--> 
                    <input type="submit" name="insert" value="Užsisakyti"> 
                </form> 
            </div> 
        </div> 
    </div>
</body>
</html>

额外说明

  • 请根据你的实际数据库信息修改$servername、$username、$password、$dbname和表名。
  • 使用了预处理语句来防止SQL注入,这是处理用户输入的必要安全措施。
  • 修复了单选按钮的回显逻辑:表单验证失败后,会保留用户之前选择的选项,提升用户体验。

内容的提问来源于stack exchange,提问作者Auridas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:35:54