[英]PHP submit form on same page with echo shown below form
我知道这个问题已经被问过很多次了,但是答案似乎确实是发布的脚本所特有的,以我目前的知识,我无法从已更正的脚本过渡到自己实现。
一切都很好-在同一页面上提交并提供任何错误的反馈,但是我希望在表单下方回显任何错误,以便用户更方便地更改他们错误输入的内容并重新提交。
从我在发布本文之前阅读的问题中可以收集到的信息中得知-只能使用jQuery / Ajax吗?
我的剧本:
<?php
if(isset($_POST['submit'])){
require "connection.php";
$username = $_POST["username"];
$password = $_POST["password"];
$email = $_POST["email"];
$repeat_password = $_POST["repeat_password"];
$username_query = mysql_query("SELECT id FROM users WHERE username = '$username'");
$email_query = mysql_query("SELECT id FROM users WHERE email = '$email'");
if($username == "" || $password == "" || $repeat_password == "" || $email == ""){
die("All boxes must be filled out!");
}// ^ Checking if all boxes have been filled out
else {
if (!ctype_alnum($username)){
die("Username can only contain letters and numbers");
}// ^ Checking if username is alphanumeric
else {
if (strlen($username) < 6 || strlen($username) > 15){
die("Username must be between 6-15 characters.");
}// ^ Checking if username is between 6-15 characters
else {
if (mysql_num_rows($username_query) != 0){
die("Username is taken, please choose another.");
}// ^ Checking if username exists in database
else {
if (!preg_match("/[0-9]/",$password)){
echo "password doesnt contain a number";
}
else {
if ($password != $repeat_password){
die("Passwords do not match");
}// ^ Checking if password and repeat_password match
else {
if (strlen($password) < 6){
die("Password must be atleast 6 characters long.");
}// ^ Checking if password is longer than 6 characters
else {
if (!filter_var($email, FILTER_VALIDATE_EMAIL)){
die("E-mail address is not vaild.");
}// ^ Checking if e-mail address is valid
else {
if (mysql_num_rows($email_query) != 0){
die("This e-mail address has already been used to create a different account.");
}// ^ Checking if e-mail address has already been used
else {
mysql_query("INSERT INTO users (username, password, email, signup_date) VALUES ('$username', '$password', '$email', CURDATE())") or die(mysql_error());
echo "Account succesfully created, welcome ".$username."!";
}
}
}
}
}
}
}
}
}
exit;
}
//
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<table>
<tr>
<td>
Username:
</td>
<td>
<input type="text" name="username">
</td>
</tr>
<tr>
<td>
Password:
</td>
<td>
<input type="password" name="password">
</td>
</tr>
<tr>
<td>
Repeat password:
</td>
<td>
<input type="password" name="repeat_password">
</td>
</tr>
<tr>
<td>
E-mail:
</td>
<td>
<input type="email" name="email">
</td>
</tr>
<tr>
<td colspan="2">
<center><input type="submit" name="submit"></center>
</td>
</tr>
</table>
</form>
答:是的,您必须在那里使用jQuery。
您可以在用户输入第一个字母后验证表格。 您可以验证键的上/下或提交。 我建议使用jQuery Validation Plugin 。
要汇总格式,请使用ajax请求。 这很简单。 你可以在这里阅读。 我在最后一页给出了一些示例。
请注意,如果您将使用jQuery Validation Plugin,则可以在valid
操作上发送ajax请求。 使用此方法,带有序列化表单的ajax请求将在表单提交+表单有效时发送。 如果form包含一些无效字段,则将显示错误,如果没有错误,则将发送ajax-request。
忠告 :您的建筑不是很好。 为什么? 如果人们会写下坏名而又犯了10个其他错误,那么只有1个错误:
用户名只能包含字母和数字
将显示。 为什么? 因为你的建筑。 之后,他将纠正第二错误。 第三次错误等
我建议您这样做来处理错误:
$errors = array();
$errorsFlag = false;
if(check_username1()) {
$errors[] = 'Tell about this error';
$errorsFlag = true;
}
if(check_username2()) {
$errors[] = 'Tell about this error';
$errorsFlag = true;
}
if(check_mail()) {
$errors[] = 'Tell about this error';
$errorsFlag = true;
}
以及如何输出呢? 用这个:
if($errorsFlag == true) {
foreach($errors as $error) {
echo $error . " <br /> ";;
}
}
我总是将错误设置为会话。 这样一来,您就可以一次设置多个错误,并在任何需要的地方打印。
以下if语句仅是您将在其中设置错误的示例...
session_start(); //you will need this
if ( username_exists($un) ) {
handleError("Username already exists!");
}
...
if ( !passwordIsStrong($pw) ) {
handleError("Password is not strong enough!");
}
这是实际设置/打印错误的功能。
function handleError( $err ) {
//get any existing errors
$existing = isset($_SESSION['form-errors']) ? $_SESSION['form-errors'] : '';
//append the new error to the existing ones. Over-write the session with new data.
$_SESSION['form-errors'] = "$existing<li>$err</li>";
}
function getErrors() {
if( isset($_SESSION['form-errors']) )
echo $_SESSION['form-errors'];
}
getErrors();
可以在您的html中的任何地方调用。 它将打印出这样的内容...
<li>Username already exists!</li>
<li>Password is not strong enough!</li>
有点像日志。 但这对我所有的项目都有效!
是的,您需要javascript
。 但不一定是jQuery
或ajax
。
但是不使用ajax
php
总是需要您重新加载页面,否则将无法执行php代码。
如果您不希望重新加载页面,请搜索某种javascript / jQuery验证脚本。 否则(如果您不关心页面重新加载),也可以使用php在表格末尾显示错误消息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.