Javascript 为什么零值仍然可以提交,即使我已经在那里添加了一些显示错误消息?

Javascript 为什么零值仍然可以提交,即使我已经在那里添加了一些显示错误消息?,javascript,php,mysql,css,forms,Javascript,Php,Mysql,Css,Forms,这是我的密码。我已经在PHP代码中设置了显示错误消息。但当所有元素都为空时,显示错误消息似乎不起作用。它可以在数据库中提交空值 <!DOCTYPE HTML> <html> <head> <style> .error {color: #FF0000;} </style> </head> <body> <?php // define variables and set to empty values

这是我的密码。我已经在PHP代码中设置了显示错误消息。但当所有元素都为空时,显示错误消息似乎不起作用。它可以在数据库中提交空值

<!DOCTYPE HTML>  
<html>
<head>
<style>
.error {color: #FF0000;}
</style>
</head>
<body>  

<?php
// define variables and set to empty values
$nameErr = $emailErr = $genderErr = $websiteErr = "";
$name = $email = $gender = $comment = $website = "";

if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (empty($_POST["name"])) {
$nameErr = "Name is required";
} else {
$name = test_input($_POST["name"]);
}

if (empty($_POST["email"])) {
$emailErr = "Email is required";
} else {
$email = test_input($_POST["email"]);
}

if (empty($_POST["website"])) {
$website = "";
} else {
$website = test_input($_POST["website"]);
}

if (empty($_POST["comment"])) {
$comment = "";
} else {
$comment = test_input($_POST["comment"]);
}

if (empty($_POST["gender"])) {
$genderErr = "Gender is required";
} else {
$gender = test_input($_POST["gender"]);
}
}

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


<p><span class="error">* required field.</span></p>
<form method="post" action="add.php<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">  
Name: <input type="text" name="name">
<span class="error">* <?php echo $nameErr;?></span>
<br><br>
E-mail: <input type="text" name="email">
<span class="error">* <?php echo $emailErr;?></span>
<br><br>
Website: <input type="text" name="website">
<span class="error"><?php echo $websiteErr;?></span>
<br><br>
Comment: <textarea name="comment" rows="5" cols="40"></textarea>
<br><br>
Gender:
<input type="radio" name="gender" value="female">Female
<input type="radio" name="gender" value="male">Male
<span class="error">* <?php echo $genderErr;?></span>
<br><br>
<input type="submit" name="submit" value="Submit">  
</form>

</body>
</html>
这是我的表单操作代码add.php


即使向表单中添加自定义错误消息,也不会阻止表单的提交。HTML不够高级,无法识别您添加的错误消息,因此表单将正常提交。

您正在测试$result是否为true。如果是,则显示成功消息

是什么让您相信空值会将$result设置为假值?您是否希望数据库返回假值


如果要避免传递空值,则需要在传递给数据库的值之前添加更多验证。

您永远不会验证表单,因为表单将提交给add.php,而不是包含验证规则的页面。下面是您应该做的事情:

<?php
// define variables and set to empty values
$nameErr = $emailErr = $genderErr = $websiteErr = "";
$name = $email = $gender = $comment = $website = "";
$error=false; // set error state to false

//if its a post request
if ($_SERVER["REQUEST_METHOD"] == "POST") {

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


    //validation rules
    if (empty($_POST["name"])) {
        $error=true;
        $nameErr = "Name is required";
    } else {
        $name = test_input($_POST["name"]);
    }

    if (empty($_POST["email"])) {
        $error=true;
        $emailErr = "Email is required";
    } else {
        $email = test_input($_POST["email"]);
    }

    if (empty($_POST["website"])) {
        $website = "";
    } else {
        $website = test_input($_POST["website"]);
    }

    if (empty($_POST["comment"])) {
        $comment = "";
    } else {
        $comment = test_input($_POST["comment"]);
    }

    if (empty($_POST["gender"])) {
        $error=true;
        $genderErr = "Gender is required";
    } else {
        $gender = test_input($_POST["gender"]);
    }

    //eof of validation rules


    //if there is no errors
    if(!$error){
        // connect to database and do your stuffs
        mysql_connect("localhost","root","") or die("Cannot connect");
        mysql_select_db("testingdb");


        $name= $_POST['name'];
        $email = $_POST['email'];
        $website =$_POST['website'];
        $comment=$_POST['comment'];
        $gender=$_POST['gender'];

        $result=mysql_query("INSERT INTO information (name , email, website,comment, gender) VALUES ('$name' , '$email' , '$website' , '$comment' , '$gender')");


        if($result){
            echo ("<SCRIPT LANGUAGE='JavaScript'>window.alert('SUCCESSFULLY ADD!')</SCRIPT>");
        }
        else {
            echo ("<SCRIPT LANGUAGE='JavaScript'>window.alert('FAILED TO ADD!')</SCRIPT>");
        }
    }else{  
    //show the forms with errors 
?>
<!DOCTYPE HTML>  
<html>
    <head>
        <style>
            .error {color: #FF0000;}
        </style>
    </head>
    <body> 
        <p><span class="error">* required field.</span></p>
        <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">  
        Name: <input type="text" name="name">
        <span class="error">* <?php echo $nameErr;?></span>
        <br><br>
        E-mail: <input type="text" name="email">
        <span class="error">* <?php echo $emailErr;?></span>
        <br><br>
        Website: <input type="text" name="website">
        <span class="error"><?php echo $websiteErr;?></span>
        <br><br>
        Comment: <textarea name="comment" rows="5" cols="40"></textarea>
        <br><br>
        Gender:
        <input type="radio" name="gender" value="female">Female
        <input type="radio" name="gender" value="male">Male
        <span class="error">* <?php echo $genderErr;?></span>
        <br><br>
        <input type="submit" name="submit" value="Submit">  
    </form>

</body>
</html>
<?php
    }
}
?>

您尝试插入数据的方式存在许多问题,但我认为您没有任何输出的原因是因为标准mysql命令在PHP5.5中被弃用,在PHP7.0中被删除。相反,您应该使用MySQLi,或者最好是PDO。您需要重新构造代码以使用这两种方法,我建议您首先阅读一下它们

看到和 有关如何使用它们的进一步说明。PDO更安全,但更难学习,而且并非所有的web主机都支持它-请务必咨询您的主机提供商

两种方法都大力推动的一件事是准备好的查询。如果不使用准备好的查询,您将容易受到SQL注入的攻击。准备好的查询会绑定要传递的参数,因此无法对其进行操作

以下是MySQLi编写的语句示例:

 if ($insert_stmt = $mysqli->prepare("INSERT INTO members (username, email, password) VALUES (?, ?, ?)")) {
     $insert_stmt->bind_param('sss', $username, $email, $password);
     if (!$insert_stmt->execute()) {
         // Insert failed
     }
     // Insert was successful
 }

您需要在add.php中验证请求数据。您的另一个PHP验证发生在浏览器接收HTML之前,因此这不是验证用户输入的内容。您的问题是您在错误的位置验证表单。看看我的答案。有人能解释一下为什么我的答案被否决了吗?我相信我的回答是有帮助的,并且与手头的问题有关。如果不是,你能告诉我为什么吗?我不懂PDO语法。还不是专家。HMMMM这不是PDO@WilsonEntering,使用过时的函数/代码只会进一步伤害你。应使用事先准备好的报表。;我认为这个答案被否决了,因为它没有解决OP询问的验证问题,尽管SQL注入问题应该得到解决。因为您描述的问题与问题无关,用户不想知道mysqli@ASK-提问者表示他们没有得到任何产出从他们使用MySQL命令的查询中。我说这可能是因为MySQL命令从5.5开始就被弃用,从7.0开始被删除。如果他们使用PHP7,则不会有任何输出。我的回答为提问者的问题存在提供了一个直接的可能原因。请向我解释为什么这不相关?另外,如果你能告诉我提问者明确指出他们对MySQLi不利的地方?缺少一些大括号。你使用什么框架?我使用Adboe dreamweaver,它说有错误,好的。我已经抄了。错误消息正在运行,但是,如果我想在元素中提交get值,则会出现get错误。给你。致命错误:在第11行的C:\xampp\htdocs\SPKPKG\testfile\test2.php中调用未定义的函数测试输入,答案应该有解释。well@wilson输入错误很明显,它表明函数测试输入尚未定义,所以将函数测试输入粘贴到验证的顶部,就像我所做的那样。。
 if ($insert_stmt = $mysqli->prepare("INSERT INTO members (username, email, password) VALUES (?, ?, ?)")) {
     $insert_stmt->bind_param('sss', $username, $email, $password);
     if (!$insert_stmt->execute()) {
         // Insert failed
     }
     // Insert was successful
 }