【发布时间】:2019-02-23 22:35:39
【问题描述】:
所以,我正在尝试创建一个小脚本来检查用户填写的数据是否正确,但是我的问题是:即使它不正确,它也会抛出警报然后仍然重定向用户到将完成检查的页面(我想可能是因为我的表单字段的操作是将您发送到那里?)。我的问题:当弹出警告提示未正确填写某些内容时,如何让用户保持在同一页面中(也不会丢失输入字段的值)?
我的代码:
<?php
if(!isset($_POST['submit'])) {
header('Location: errorHandler.php');
exit();
} else {
$email =$_POST['email'];
$usrName =$_POST['userName'];
$pwd =$_POST['password'];
$pwdConfirm =$_POST['confirmPassword'];
if ($email !== $email) {
echo '<script language="javascript">';
echo 'alert("It seems your email was not correct.")';
echo '</script>';
} else if ($usrName !== $usrName) {
echo '<script language="javascript">';
echo 'alert("It seems your username was not correct.")';
echo '</script>';
} else if ($pwd !== $pwdConfirm) {
echo '<script language="javascript">';
echo 'alert("it seems the passwords do NOT match")';
echo '</script>';
} else {
include_once 'db.inc.php';
$email = mysqli_real_escape_string ($conn, $_POST['email']);
$usrName = mysqli_real_escape_string ($conn, $_POST['userName']);
$pwd = mysqli_real_escape_string ($conn, $_POST['password']);
$pwdConfirm = mysqli_real_escape_string ($conn, $_POST['confirmPassword']);
$sqli = "INSERT INTO logindb (email, name, password) VALUES ('$email', '$usrName', '$pwd')";
mysqli_query($conn, $sqli);
}
}
如何创建输入字段:
function getEblock() {
let eBlock = ($('<div/>', {
'class': 'col-md-6 col-md-offset-3 well'
}));
return eBlock;
}
function getEmail() {
let email = ($('<input/>', {
'type': 'email',
'name': 'email',
'placeholder': 'Fill out your e-mail...',
'required': true,
'class': 'form form-control'
}));
return email;
}
function getUserName() {
let userName = ($('<input/>', {
'type': 'text',
'name': 'userName',
'placeholder': 'Fill out your username...',
'required': true,
'class': 'form form-control'
}));
return userName;
}
function getPassword() {
let password = ($('<input/>', {
'type': 'password',
'name': 'password',
'placeholder': 'Fill out your password...',
'required': true,
'class': 'form form-control'
}));
return password;
}
function getConfirmPassword() {
let confirmPassword = ($('<input/>', {
'type': 'password',
'name': 'confirmPassword',
'placeholder': 'Confirm your password...',
'required': true,
'class': 'form form-control'
}));
return confirmPassword;
}
function getConfirmBtn() {
let submitBtn = ($('<button/>', {
'type': 'submit',
'name': 'submit',
'class': 'btn btn-info',
'id': 'submitBtn'
})).text('Submit');
return submitBtn;
}
是的,我知道我将所有内容插入数据库表的方式很糟糕,我知道我必须加密密码等,但现在我想知道如何防止用户(仍然)去@ 987654323@。由于输入字段等是由 javascript 制作的,因此我的 HTML 不会向您显示太多内容。
【问题讨论】:
-
您的输入元素是否添加到
<form>元素中? -
是的。我将它们全部附加到表单字段中,并且一切正常(提交时)。但是,当用户没有正确填写密码和密码确认时,它会发出警报,警报会显示,但是当您单击“ok”时,它仍然会将您重定向到 save.php 页面。我可以使用 header() 函数,但这可能会导致页面重置,因此会丢失我 100% 确定的值。
-
如果您将元素包装在
<form>标记中,那么您将需要阻止表单的默认行为。e.preventDefault();. -
一个更好的主意是在重定向到另一个页面之前在客户端处理您的验证逻辑。那么您可以将
if(validate()){ //do redirect }validate 作为一个处理您的验证的函数,其中默认值为 true,如果验证失败,它应该返回 false。 -
啊...这是一个很好的@Martin。我会调查的。\
标签: javascript php