我正在尝试创建一个页面,允许用户使用PHP编辑他们的详细信息,在提交之前验证内容。 我想允许用户更新他们的用户名,名字和姓名以及电子邮件地址。
验证包括:
<?php
if(preg_match("/^[0-9a-zA-Z_]{3,}$/", $_POST["username"]) == 0)
$error_username = '<li>Usernames may contain only digits, upper and lower case letters and underscores</li>';
if(preg_match("/^[A-Za-z]+$/", $_POST["fname"]) == 0)
$error_fname = '<li>First Name may contain upper and lower case letters</li>';
if(preg_match("/^[A-Za-z]+$/", $_POST["sname"]) == 0)
$error_sname = '<li>Second Name may contain upper and lower case letters</li>';
if(preg_match("/^[a-zA-Z]\w+(\.\w+)*\@\w+(\.[0-9a-zA-Z]+)*\.[a-zA-Z]{2,4}$/", $_POST["email"]) == 0)
$error_email = '<li>Email Addresses must have a valid email address format</li>';
else header("Location: edit.php");
?>
并显示错误:
<ul>
<?php if(isset($error_username)) echo $error_username; ?>
<?php if(isset($error_fname)) echo $error_fname; ?>
<?php if(isset($error_sname)) echo $error_sname; ?>
<?php if(isset($error_email)) echo $error_email; ?>
</ul>
我的表格是:
<form name="edit_account" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
<input class="form_field" name="username" type="text" value="<?php echo $_POST["username"]; ?>" placeholder="Username">
<input class="form_field" name="fname" type="text" value="<?php echo $_POST["fname"]; ?>" placeholder="First Name">
<input class="form_field" name="sname" type="text" value="<?php echo $_POST["sname"]; ?>" placeholder="Second Name">
<input class="form_field" name="email" type="text" value="<?php echo $_POST["email"]; ?>" placeholder="Email Address">
<input type="submit" name="Submit" value="Update Account">
</form>
如果满足验证的所有要求,则用户将被编辑为edit.php,然后重定向到成功页面:
<?php
$sql = $mysqli;
$id = htmlentities($_SESSION['user_id']);
$username = $sql->real_escape_string($_POST['username']);
$fname = $sql->real_escape_string($_POST['fname']);
$sname = $sql->real_escape_string($_POST['sname']);
$email = $sql->real_escape_string($_POST['email']);
$query = ("
UPDATE users
SET
username='$username',
fname='$fname',
sname='$sname',
email='$email'
WHERE id='$id'") ;
$sql->query($query) or die($query.'<br />'.$sql->error);
header ('Location: success.php');
?>
当我尝试运行此代码时,更新字段将作为空白提交到数据库中 - 但是,如果没有验证,则会成功输入用户提交的详细信息。
有人可以指出导致表单作为空白提交的原因。感谢。
答案 0 :(得分:1)
看起来您正在从验证脚本重定向到edit.php(其中包含数据库插入代码)。问题是重定向时会重置$ _POST变量。
我想include('path/to/edit.php')
edit.php脚本而不是重定向到它。如果那是不可能的,我会将$ _POST数据保存在$ _SESSION变量中。
希望这有帮助
答案 1 :(得分:0)
您已将其发布到验证页面,但在重定向到edit.php
页面时会丢失它们。在转到edit.php
之前,将信息存储在会话变量中,如下所示:
$_SESSION['username'] = $_POST["username"];
// other variables also
在edit.php
,而不是从$_POST
拉出,从$_SESSION
拉。
附注
请勿忘记每页顶部的session_start()
。此外,您应该在使用用户输入时查看prepared statements。