验证后php重定向到另一个页面
我试图弄清楚如何在表单验证之后重定向(即在满足表单的条件之后)(我在PHP代码的末尾有标题)。我有一个基本的表单,我知道这应该是一个简单的代码行,但我似乎无法使它工作!非常感谢你的建议验证后php重定向到另一个页面,php,forms,validation,redirect,Php,Forms,Validation,Redirect,我试图弄清楚如何在表单验证之后重定向(即在满足表单的条件之后)(我在PHP代码的末尾有标题)。我有一个基本的表单,我知道这应该是一个简单的代码行,但我似乎无法使它工作!非常感谢你的建议 <?php $firstNameErr = ''; $lastNameErr = ''; $emailErr=''; $passwordErr = ''; $passwordConfErr=''; if($_SERVER["REQUEST_METHOD&q
<?php
$firstNameErr = '';
$lastNameErr = '';
$emailErr='';
$passwordErr = '';
$passwordConfErr='';
if($_SERVER["REQUEST_METHOD"] == "POST"){
$firstName = $_POST["firstName"];
if(empty($firstName)){
$firstNameErr = "First Name is required";
}
else if(!preg_match("/^[a-zA-Z]+$/", $firstName)){
$firstNameErr= "Only letters, no spaces or special characters allowed";
}
else{
$firstNameErr = "Valid";
}
}
if($_SERVER["REQUEST_METHOD"] == "POST"){
$lastName = $_POST["lastName"];
if(empty($lastName)){
$lastNameErr = "Last Name is required";
}
else if(!preg_match("/^[A-Za-z]+((\s)?((\'|\-|)?([A-Za-z])+))*$/", $lastName)){
$lastNameErr = "No Special characters or numbers allowed";
}
else{
$lastNameErr = "Valid";
}
}
if($_SERVER["REQUEST_METHOD"] == "POST"){
$email = $_POST["email"];
if(empty($email)){
$emailErr = "Email is required";
}
else if(!filter_var($email, FILTER_VALIDATE_EMAIL)){
$emailErr = "Invalid email format";
}
else{
$emailErr = "Valid";
}
}
if($_SERVER["REQUEST_METHOD"] == "POST"){
$password=$_POST["password"];
if(empty($password)){
$passwordErr = "Please Enter your password";
}
else if (strlen($password) < "8") {
$passwordErr = "Your Password Must Contain At Least 8 Digits !";
}
else if(!preg_match("#[0-9]+#",$password)) {
$passwordErr = "Your Password Must Contain At Least 1 Number !";
}
else if(!preg_match("#[A-Z]+#",$password)) {
$passwordErr = "Your Password Must Contain At Least 1 Capital Letter !";
}
else if(!preg_match("#[a-z]+#",$password)) {
$passwordErr = "Your Password Must Contain At Least 1 Lowercase Letter !";
}
else if(!preg_match('/[\'^£$%&*()}{@#~?><>,|=_+¬-]/', $password)) {
$passwordErr = "Your Password Must Contain At Least 1 Special Character !";
}
else{
$passwordErr = "Valid";
}
}
if($_SERVER["REQUEST_METHOD"] == "POST"){
}
if($_SERVER["REQUEST_METHOD"] == "POST"){
$confirmPassword = $_POST["confirmPassword"];
$password = $_POST["password"];
if(empty($confirmPassword)){
$passwordConfErr = "Please Enter your password";
}
else if($password!=$confirmPassword){
$passwordConfErr = "Passwords do not match";
}
else{
$passwordConfErr="Valid";
}
}
else{
echo "Form not submitted with POST";
}
if($_SERVER["REQUEST_METHOD"] == "POST"){
if(isset($_POST['Register']) and $firstNameErr == "Valid" and $lastNameErr =="Valid" and $emailErr == "Valid" and $passwordErr == "Valid" and $passwordConfErr=="Valid") {
header("Location: profile.php");
exit();
}
}
一个如果($\u服务器[“请求方法”]=“发布”){
封装所有$\u发布逻辑就足够了,这取决于你的应用程序(如果它主要是AJAX)您应该使用一个响应/请求流,以便POST逻辑位于顶部,并将错误传递到视图中,然后可以在视图中使用这些错误,或者您应该返回JSON并执行AJAX请求,否则您将无法提取错误,除非您将错误放入会话中,然后在重定向时提取错误,这只是额外的步骤。
示例请求/响应,对于单个页面,即register.php
,可以通过include或view加载程序加载HTML,但思路相同
<?php
$errors = [];
if ($_SERVER["REQUEST_METHOD"] == "POST") {
// first name
if (empty($_POST["firstName"])){
$errors['firstName'] = "First Name is required";
} else if (!preg_match("/^[a-zA-Z]+$/", $_POST["firstName"])) {
$errors['firstName'] = "Only letters, no spaces or special characters allowed";
}
// last name
if (empty($_POST["lastName"])) {
$errors['lastName'] = "Last Name is required";
} else if (!preg_match("/^[A-Za-z]+((\s)?((\'|\-|)?([A-Za-z])+))*$/", $_POST["lastName"])) {
$errors['lastName'] = "No Special characters or numbers allowed";
}
// ...others
// errors is empty, so must all be valid
if (empty($errors)) {
// do something like insert into db and set session status
header("Location: profile.php");
exit();
}
// otherwise continue to form
} ?>
<form>
...
<input name="firstName" value="<?= htmlspecialchars($_POST['firstName'] ?? '', ENT_QUOTES, 'UTF-8') ?>"/>
<?= isset($errors['firstName']) ? '<span class="form-error">'.$errors['firstName'].'</span>' : '' ?>
<input name="lastName" value="<?= htmlspecialchars($_POST['lastName'] ?? '', ENT_QUOTES, 'UTF-8') ?>"/>
<?= isset($errors['lastName']) ? '<span class="form-error">'.$errors['lastName'].'</span>' : '' ?>
</form>
...
验证代码应如下所示:
$Name = $Surname = $username = $password = $confirm_password =
$email ="";
if($_SERVER["REQUEST_METHOD"] == "POST"){
// Validate Name.
if (empty(trim($_POST["firstName"]))) {
$errors[] = 'name required.';
} else {
$Name = $_POST["firstName"];
}
// Validate lastName.
if (empty(trim($_POST["lastName"]))) {
$errors[] = 'surname required.';
} else {
$Surname = $_POST["lastName"];
}
// Validate username
if (!preg_match("/^[a-zA-Z]+$/", $_POST["username"])) {
$errors['username'] = "Only letters, no spaces or special characters allowed";
}
// Validate username from database to see if username already exist.
//You can check for the email is well.
if(empty(trim($_POST["username"]))){
$errors[] = "Please enter a username.";
} else{
// Prepare a select statement
$sql = "SELECT id FROM users WHERE username = :username";
if($stmt = $pdo->prepare($sql)){
// Bind variables to the prepared statement as parameters
$stmt->bindParam(":username", $param_username, PDO::PARAM_STR);
// Set parameters
$param_username = trim($_POST["username"]);
// Attempt to execute the prepared statement
if($stmt->execute()){
if($stmt->rowCount() == 1){
$errors[] = "This username is already taken.";
} else{
$username = trim($_POST["username"]);
}
} else{
echo "Oops! Something went wrong. Please try again later.";
}
// Close statement
$stmt->closeCursor();
}
}
// Validate password
if(empty(trim($_POST["password"]))){
$errors[] = "Enter password.";
} elseif(strlen(trim($_POST["password"])) < 6){
$errors[] = "password should be min 6 characters.";
} else{
$password = trim($_POST["password"]);
}
// Validate confirm password
if(empty(trim($_POST["confirm_password"]))){
$errors[] = "confirm pass.";
} else{
$confirm_password = trim($_POST["confirm_password"]);
if($password != $confirm_password){
$errors[] = "pass no matches.";
}
}
// Validate Email
if(filter_var($email, FILTER_VALIDATE_EMAIL)){
$email = $_POST["email"];
} else {
$errors[] = "invalid email type.";
}
// Validate Email
if(empty(trim($_POST["email"]))){
$errors[] = 'email required.';
}else {
$email = filter_var($_POST["email"], FILTER_SANITIZE_EMAIL);
}
if(empty($errors)){
//if no errors
//Do everythin else in here
//Do insert query after you are done redirect to profile page
header("Location: profile.php");
exit();
}
}
$Name=$Name=$username=$password=$confirm\u password=
$email=“”;
如果($\服务器[“请求\方法”]=“发布”){
//验证名称。
如果(为空(修剪($_POST[“firstName”])){
$errors[]=“需要名称”;
}否则{
$Name=$_POST[“firstName”];
}
//验证lastName。
如果(为空(修剪($_POST[“lastName”])){
$errors[]=“需要姓氏”;
}否则{
$姓氏=$_POST[“lastName”];
}
//验证用户名
如果(!preg_match(“/^[a-zA-Z]+$/”,$_POST[“username”])){
$errors['username']=“仅允许字母,不允许空格或特殊字符”;
}
//从数据库验证用户名,以查看用户名是否已存在。
//您可以检查电子邮件是否正常。
如果(为空(修剪($_POST[“username”])){
$errors[]=“请输入用户名。”;
}否则{
//准备select语句
$sql=“从用户名=:username的用户中选择id”;
如果($stmt=$pdo->prepare($sql)){
//将变量作为参数绑定到准备好的语句
$stmt->bindParam(“:username”,$param_username,PDO::param_STR);
//设置参数
$param_username=trim($_POST[“username]”);
//尝试执行准备好的语句
如果($stmt->execute()){
如果($stmt->rowCount()==1){
$errors[]=“此用户名已被使用。”;
}否则{
$username=trim($_POST[“username”]);
}
}否则{
echo“哎呀!出现问题。请稍后再试。”;
}
//结束语
$stmt->closeCursor();
}
}
//验证密码
如果(为空(修剪($_POST[“password”])){
$errors[]=“输入密码。”;
}elseif(strlen(trim($_POST[“password”]))<6){
$errors[]=“密码应至少包含6个字符。”;
}否则{
$password=trim($_POST[“password”]);
}
//验证确认密码
如果(为空(修剪($_POST[“确认密码”])){
$errors[]=“确认通过。”;
}否则{
$confirm_password=trim($_POST[“confirm_password”]);
如果($password!=$confirm\u password){
$errors[]=“不传递匹配项。”;
}
}
//验证电子邮件
if(过滤变量($email,过滤验证电子邮件)){
$email=$_POST[“email”];
}否则{
$errors[]=“无效的电子邮件类型。”;
}
//验证电子邮件
如果(空(修剪($_POST[“email”])){
$errors[]=“需要电子邮件”;
}否则{
$email=filter\u var($\u POST[“email”]、filter\u SANITIZE\u email);
}
if(空($errors)){
//如果没有错误
//这里的一切都做了吗
//完成后插入查询重定向到配置文件页面
标题(“位置:profile.php”);
退出();
}
}
要获取eRoom,请执行以下操作:
<?php if(isset($errors)) {?>
<div class="error">
<?php echo implode('<br/>', $errors); ?>
</div>
<?php } unset($_SESSION['errors']); ?>
如果您的html表单位于同一页面中,请在此处输入:
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post">
//inputs etc..
</form>
非常感谢!这帮了我很大的忙!不仅找出了我的错误,而且意识到我的代码有一个结构是非常重要的!再次感谢
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post">
//inputs etc..
</form>