PHP-表单错误警报在页面加载时显示


PHP - Form error alerts displays on page load

我是一个新手,只是一路学习。我在一个页面上有两个表单(我只显示了其中一个,因为另一个表单是带有不同变量的相同代码)。它们的两条错误消息都显示在页面加载上。我该怎么阻止?

我已经读了很多关于这方面的帖子,但我仍然找不到解决方案。

<?php
    if(isset($_POST['Update'])) {
        $c_fname = $_POST['fname'];
        $c_lname = $_POST['lname'];
        $c_email = $_POST['email'];
        $c_phone = $_POST['phone'];
        // Save $_POST to $_SESSION
        //query
        $insert_det = "INSERT INTO  Cus_acc_details(CUS_Fname,CUS_Lname,Cus_Email,CUS_Phone) 
            VALUES (?,?,?,?)
            ON DUPLICATE KEY 
            UPDATE
            Cus_acc_details.CUS_Fname = '$c_fname',
            Cus_acc_details.Cus_Lname = '$c_lname',
            Cus_acc_details.Cus_Email = '$c_email',
            Cus_acc_details.CUS_Phone = '$c_phone'";
        $stmt = mysqli_prepare($dbc, $insert_det);
        //new
        // $stmt = mysqli_prepare($dbc, $insert_c);
        //debugging
        //$stmt = mysqli_prepare($dbc, $insert_c)  or die(mysqli_error($dbc));
        mysqli_stmt_bind_param($stmt, 'sssi', $c_fname, $c_lname, $c_email, $c_phone);
        /* execute query */
        $r = mysqli_stmt_execute($stmt);
        // if inserted echo the following messges
        if ($r) {
            echo "<script> alert('Saved')</script>";
        }
    } else {
        echo "<b>Oops! we have an issu </b>";
    }
?>

if (isset($_POST['Update']))之后有一个else。在其他内容中,您显示错误,就好像用户试图提交表单一样。如果用户尝试提交表单,则仅设置$_POST['Update']。将其他内容移动到if:中

if (isset($_POST['Update'])) {
    /* a bunch of code to insert into the DB */
    // if inserted echo the following messges
    if ($r) {
        echo "<script> alert('Saved')</script>";
    }else{
        echo "<b>Oops! we have an issu </b>";
    }
}

此外:

评论者是对的。您面临SQL注入的风险。请使用事先准备好的语句。

问题是每次未设置变量$_POST['Update']时,您的else语句都在运行。

解决此问题的一种方法是将错误消息移动到表单检查代码中。像这样的东西会起作用:

if (isset($_POST['Update'])) {
    /* unchanged code snipped */
    if ($r) {
        echo "<script> alert('Saved')</script>";
    } else {
        echo "<b>Oops! we have an issu </b>";
    }
}

希望能有所帮助!