我有一个简单的JavaScript函数,如果没有填写所有字段,则不允许提交表单。最重要的是,我希望PHP在空字段旁边写出错误消息。问题是该函数在$_POST
上激活,但只要其中一个字段为空,我的JavaScript函数就不允许$_POST
发生。
如果我将操作保持在$_POST
条件之外,则页面将加载并显示错误消息。我对PHP和JavaScript相当陌生,并希望能够对我可以用来触发我的错误消息出现在我的表单中的其他可用条件有所了解。我也对任何其他错误处理建议持开放态度。我确实希望保持我的JavaScript存在,因为如果它没有正确填充,它可以保持表单不被提交。除非采用其他方式采取行动,否则我必须保留JavaScript。
PHP:
function cleanCrew ($id, $pswrd) {
$id = stripslashes($id);
$pswrd = stripslashes($pswrd);
$id = strip_tags($id);
$pswrd = strip_tags($pswrd);
return array($id, $pswrd);
}
require_once 'dbServ.php';
$db_server = mysqli_connect($db_host,$db_user,$db_pass,$db_base);
if ($db_server) {
$error_1 = "";
} else{
$error_1 = "connection to database unsuccessful";
}
$error_2 = "";
$error_3 = "";
if ($_POST) {
$user_id = mysqli_real_escape_string($db_server, $_POST['userId']);
$user_pass = mysqli_real_escape_string($db_server, $_POST['pass']);
$id_and_pass = cleanCrew($user_id, $user_pass);
if ($user_id == "" || $user_id == null) {
$error_2 = "please fill in proper User Id";
} else{
$error_2 = " ";
}
if($user_pass == "" || $user_pass == null){
$error_3 = "please fill out password";
} else{
$error_3 = " ";
}
echo $id_and_pass[0];
echo $id_and_pass[1];
}
HTML:
<div id="intro">
<h1 id="the_blog" align="center">The <span id="blog_animate" style="position:relative;">Blog</span></h1>
<div id="log-in"><p id="log">Log In</p><br> <?php echo $error_1; ?>
<form action="blog.php" method="post" onsubmit="return checkForm(this)" name="form1">
<p id="log">User ID :</p> <input type="text" placeholder="johnnyApple175" name="userId"></input><?php echo $error_2 ?><br>
<p id="log">Password:</p> <input type="password" name="pass"></input><?php echo $error_3; ?><br>
<input type="submit" value="submit" class="button" ></input>
</form>
答案 0 :(得分:1)
第一: 像你一样,验证数据服务器端总是一个非常好的主意。 原因很简单:Javascript是客户端的,可以很容易地修改为例如绕过那些检查。另外,在数据库查询中使用它之前,您已将转发的数据转义为好。
你的问题是,你正在检查$ _POST是否存在 - 它总是存在,它是一个超级全局变量。您实际上想要检查是否为空:
if (!empty($_POST))...
如果您真的想要提供详细信息究竟是什么错误,您可能想要考虑一下。提供更多信息更加用户友好,但它使攻击更容易,特别是如果您在X重试后没有阻止用户。