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

XAMPP环境下PHP连接MySQL插入数据失败排查求助

解决XAMPP中表单数据无法写入MySQL数据库的问题

嗨,我仔细看了你的代码,找到了几个导致数据没法写入数据库的核心问题,咱们一步步来修复:

1. 最直接的触发逻辑错误

你的表单提交按钮的name属性是submit,但代码里判断是否执行插入的条件是isset($_POST['insert'])——这就相当于你喊了"开门",但代码在等"开窗"的指令,永远不会触发插入逻辑!

修复方案:把判断条件改成isset($_POST['submit']),或者把按钮的name改成insert,前者更贴合你现有代码:

// 把原来的if(isset($_POST['insert']))改成:
if(isset($_POST['submit'])) {
    // 插入逻辑放在这里
}

2. 数据库连接的异常处理无效

mysqli默认不会抛出异常,所以你写的try{ mysqli_connect(...); } catch(...)根本捕捉不到连接错误,应该手动检查连接是否成功:

$host = "localhost";
$user = "root";
$password ="";
$database = "uzsakymas";

$connect = mysqli_connect($host,$user,$password,$database);
// 手动检查连接
if (!$connect) {
    die("数据库连接失败: " . mysqli_connect_error());
}

3. Pk字段的错误处理逻辑错误

你在用户未填写Pk时,把$Pk赋值成了错误提示字符串"Įveskite prekės kodą",这会导致如果用户没填这个字段,插入数据库的是这段文本而不是空值,而且错误信息也没正确赋值给$PkErr:

// 修正前的错误代码
if (empty($_POST["Pk"])) {
    $Pk = "Įveskite prekės kodą"; // 这里应该给$PkErr赋值!
}

// 修正后
if (empty($_POST["Pk"])) {
    $PkErr = "Įveskite prekės kodą";
    $Pk = ""; // 初始化空值,避免插入错误文本
} else {
    $Pk = test_input($_POST["Pk"]);
}

4. 严重的SQL注入风险(必须修复!)

你的插入语句直接拼接用户输入的变量,存在极高的SQL注入漏洞,恶意用户可以通过这个漏洞篡改甚至删除你的数据库。必须使用预处理语句来避免这个问题:

if(isset($_POST['submit'])) {
    // 先检查所有表单验证是否通过
    if(empty($VarErr) && empty($PavErr) && empty($AdErr) && empty($PkErr) && empty($KiekErr)){
        // 使用预处理语句
        $insert_query = "INSERT INTO uzsakymai (Vardas,Pavarde,Adresas,Pk,Kiekis) VALUES(?, ?, ?, ?, ?)";
        $stmt = mysqli_prepare($connect, $insert_query);
        // 绑定参数:"ssssi"表示5个参数分别是字符串、字符串、字符串、字符串、整数
        mysqli_stmt_bind_param($stmt, "ssssi", $Vardas, $Pavarde, $Adresas, $Pk, $Kiekis);
        $insert_result = mysqli_stmt_execute($stmt);
        
        if($insert_result){
            if(mysqli_affected_rows($connect) > 0) {
                echo '<p style="color:green;">数据已成功插入数据库!</p>';
            }else{
                echo '<p style="color:red;">数据未插入,请检查表结构和字段是否匹配!</p>';
            }
        } else {
            echo '插入错误: ' . mysqli_error($connect); // 输出具体错误信息方便排查
        }
        mysqli_stmt_close($stmt);
    } else {
        echo '<p style="color:red;">请先修正表单中的错误再提交!</p>';
    }
}

5. 调整插入逻辑的位置

把插入逻辑放在表单验证完成之后,确保只有当所有字段都验证通过时才执行插入,避免把无效数据写入数据库。

最后,给你整合好的完整修正代码:

<!DOCTYPE HTML> 
<html> 
<head> 
    <style>
        .error {color: #FF0000;}
    </style>
</head> 
<body> 
<?php 
// define variables and set to empty values 
$VarErr = $PavErr = $AdErr = $PkErr = $KiekErr = ""; 
$Vardas = $Pavarde = $Adresas = $Pk = $Kiekis = ""; 

if ($_SERVER["REQUEST_METHOD"] == "POST") { 
    if (empty($_POST["Vardas"])) { 
        $VarErr = "Įveskite vardą"; 
    } else { 
        $Vardas= test_input($_POST["Vardas"]); 
        // check if name only contains letters and whitespace 
        if (!preg_match("/^[a-zA-Z ]*$",$Vardas)) { 
            $VarErr = "Galima vesti tik su raidėmis"; 
        } 
    } 

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

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

    if (empty($_POST["Pk"])) { 
        $PkErr = "Įveskite prekės kodą";
        $Pk = "";
    } else { 
        $Pk = test_input($_POST["Pk"]); 
    } 

    if (empty($_POST["Kiekis"])) { 
        $KiekErr = "Įveskite kiekį"; 
    } else { 
        $Kiekis = test_input($_POST["Kiekis"]); 
    } 
} 

function test_input($data) { 
    $data = trim($data); 
    $data = stripslashes($data); 
    $data = htmlspecialchars($data); 
    return $data; 
} 

// 数据库连接
$host = "localhost";
$user = "root";
$password ="";
$database = "uzsakymas";

$connect = mysqli_connect($host,$user,$password,$database);
if (!$connect) {
    die("数据库连接失败: " . mysqli_connect_error());
}

// 插入逻辑
if(isset($_POST['submit'])) {
    if(empty($VarErr) && empty($PavErr) && empty($AdErr) && empty($PkErr) && empty($KiekErr)){
        $insert_query = "INSERT INTO uzsakymai (Vardas,Pavarde,Adresas,Pk,Kiekis) VALUES(?, ?, ?, ?, ?)";
        $stmt = mysqli_prepare($connect, $insert_query);
        mysqli_stmt_bind_param($stmt, "ssssi", $Vardas, $Pavarde, $Adresas, $Pk, $Kiekis);
        $insert_result = mysqli_stmt_execute($stmt);
        
        if($insert_result){
            if(mysqli_affected_rows($connect) > 0) {
                echo '<p style="color:green;">数据已成功插入数据库!</p>';
            }else{
                echo '<p style="color:red;">数据未插入,请检查表结构和字段是否匹配!</p>';
            }
        } else {
            echo '插入错误: ' . mysqli_error($connect);
        }
        mysqli_stmt_close($stmt);
    } else {
        echo '<p style="color:red;">请先修正表单中的错误再提交!</p>';
    }
}

mysqli_close($connect);
?> 

<h2>PHP Form Validation Example</h2> 
<p><span class="error">* required field</span></p> 
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> 
    Vardas: <input type="text" name="Vardas" value="<?php echo $Vardas;?>"> 
    <span class="error">* <?php echo $VarErr;?></span> 
    <br><br> 

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

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

    Pk: <input type="number" name="Pk" value="<?php echo $Pk;?>"> 
    <span class="error"><?php echo $PkErr;?></span> 
    <br><br> 

    Kiekis:<input type="number" name="Kiekis" value="<?php echo $Kiekis;?>"> 
    <span class="error"><?php echo $KiekErr;?></span> 

    <input type="submit" name="submit" value="Submit"> 
</form> 

<?php 
echo "<h2>Your Input:</h2>"; 
echo $Vardas; 
echo "<br>"; 
echo $Pavarde; 
echo "<br>"; 
echo $Adresas; 
echo "<br>"; 
echo $Pk; 
echo "<br>"; 
echo $Kiekis; 
?> 
</body> 
</html>

内容的提问来源于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 06:51:34