我知道这个问题已被多次询问,但答案似乎与发布的脚本非常相关,而且根据我目前的知识,我无法从更正的脚本转换为实现它成我自己的。
一切正常 - 它在同一页面上提交并提供任何错误的反馈,但我希望在表单下面回显任何错误,这样用户只需更改错误输入的内容并重新提交即可。
从我在发布之前阅读的问题中我可以收集到的内容 - 可能只能使用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>
答案 0 :(得分:1)
答案:是的,你必须在那里使用jQuery。
您可以在用户输入第一个字母后验证表单。您可以在键上/下或提交时进行验证。我建议使用jQuery Validation Plugin。
要汇总表格,请使用ajax请求。这很简单。你可以阅读它here。我给出的最后一页有一些例子。
注意,如果您将使用jQuery Validation Plugin,则可以在valid
操作上发送ajax请求。使用此方法,带有序列化形式的ajax请求将在表单提交+表单上发送有效。如果表单有一些无效字段,则会显示错误,如果没有错误,则会发送ajax-request。
<强>建议强>: 你的arhitecture不是很好。为什么?如果人们写错了名字并再犯了10个其他错误,那么只有1个错误:
用户名只能包含字母和数字
将会显示。为什么?因为你arhitecture。在那之后,他将纠正第二个erorr。第3次错误等。
我建议你这样做:
$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 /> ";;
}
}
答案 1 :(得分:0)
我总是将错误设置为会话。这允许您一次设置多个错误,并在任何地方打印它们。
以下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>
这有点像日志。但它对我的所有项目都有用!
答案 2 :(得分:0)
是的,您需要javascript
。但不一定是jQuery
或ajax
。
但php
不使用ajax
总是需要你重新加载页面,否则不会执行php代码。
如果您不想重新加载页面,请搜索某种javascript / jQuery验证脚本。否则(如果你不关心页面重新加载),你也可以在表格的末尾用php发出错误信息。