Javascript 为什么零值仍然可以提交,即使我已经在那里添加了一些显示错误消息?
这是我的密码。我已经在PHP代码中设置了显示错误消息。但当所有元素都为空时,显示错误消息似乎不起作用。它可以在数据库中提交空值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
<!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
}