Я пытаюсь создать register page
и на этом у меня есть несколько задач, которые я хотел бы выполнить.
1)The username to only accept a-z A-Z 0-10 characters
2)The passwords being entered at the stage of registration are checked to
see if they match, if not get the user to try again
3)Set the passwords to only accept A-Z a-z 0-10 ! characters
Я работаю над task 2
код, который у меня работает, но, хотя он показывает ошибку, он все еще вводит данные в базу данных. не уверен, куда я иду.
if(isset($_POST['submit'])){
$username = mysql_real_escape_string($_POST['username']);
$password1 = mysql_real_escape_string($_POST['password1']);
$password2 = mysql_real_escape_string($_POST['password2']);
$email = mysql_real_escape_string($_POST['email']);
$selected = mysql_select_db("register", $dbhandle);
$query = "SELECT * FROM users WHERE email='".$email."'
OR username= '".$username."'";
$result = mysql_query($query);
if(mysql_num_rows($result) > 0){
echo "A record already exists.";
exit;
}
else{
$insert = mysql_query("INSERT into users (username, password1, password2, email) VALUES
('".$username."','".$password1."','".$password2."','".$email."')");
}
if($insert){
echo "Success";
}
else{
echo "There was an error " . mysql_error();
}
mysql_close();
if ($_POST['password1']!= $_POST['password2'])
{
echo("Oops! Password did not match! Try again. ");
}
}
?>
Вам необходимо проверить, есть ли какие-либо ошибки при регистрации, а если нет, то вставить данные в базу данных. Проверьте ниже код;
$err = "";
//your extra code and validations
if ($_POST['password1']!= $_POST['password2'])
$err .= "Oops! Password did not match! Try again."; //append to $err
if ($err=="")
{
//insert here
}
//display $err somewhere below
Или вам нужно изменить свой код следующим образом
if(isset($_POST['submit']))
{
$username = mysql_real_escape_string($_POST['username']);
$password1 = mysql_real_escape_string($_POST['password1']);
$password2 = mysql_real_escape_string($_POST['password2']);
$email = mysql_real_escape_string($_POST['email']);
$selected = mysql_select_db("register", $dbhandle);
$query = "SELECT * FROM users WHERE email='".$email."' OR username= '".$username."'";
$result = mysql_query($query);
if(mysql_num_rows($result) > 0)
{
echo "A record already exists.";
exit;
}
else
{
if ($_POST['password1']!= $_POST['password2'])
echo("Oops! Password did not match! Try again. ");
else
{
$insert = mysql_query("INSERT into users (username, password1, password2, email) VALUES ('".$username."','".$password1."','".$password2."','".$email."')");
if($insert)
echo "Success";
else
echo "There was an error " . mysql_error();
}
}
mysql_close();
}
Имя пользователя, чтобы принять только A-Z A-Z 0-10 символов
Используйте следующий код для проверки имени пользователя
if (preg_match('/^[a-zA-Z0-9]+$/', $username))
echo "valid username";
else
echo "invalid username";
Установите пароли, чтобы принимать только A-Z a-z 0-10! персонажи
Используйте следующий код для проверки пароля
if (preg_match('/^[a-zA-Z0-9!]+$/', $password1))
echo "valid password";
else
echo "invalid password";
Полный код
if(isset($_POST['submit']))
{
$username = mysql_real_escape_string($_POST['username']);
$password1 = mysql_real_escape_string($_POST['password1']);
$password2 = mysql_real_escape_string($_POST['password2']);
$email = mysql_real_escape_string($_POST['email']);
$selected = mysql_select_db("register", $dbhandle);
$query = "SELECT * FROM users WHERE email='".$email."' OR username= '".$username."'";
$result = mysql_query($query);
if(mysql_num_rows($result) > 0)
{
echo "A record already exists.";
exit;
}
else
{
if ($_POST['password1']!= $_POST['password2'])
echo("Oops! Password did not match! Try again. ");
else
{
//too many if/else blocks but don't want to change the structure of your code
if (!preg_match('/^[a-zA-Z0-9]+$/', $username))
echo "invalid username";
else
{
if (!preg_match('/^[a-zA-Z0-9!]+$/', $password1))
echo "invalid password";
else
{
$insert = mysql_query("INSERT into users (username, password1, password2, email) VALUES ('".$username."','".$password1."','".$password2."','".$email."')");
if($insert)
echo "Success";
else
echo "There was an error " . mysql_error();
}
}
}
}
mysql_close();
}
Эхо не прерывает выполнение. Ваш код, вероятно, выглядит так:
if ($_POST['password1']!= $_POST['password2'])
{
echo("Oops! Password did not match! Try again. ");
}
saveToDb();
Так что читайте как в «если пароли1 и пароли2 не совпадают, выведите сообщение об ошибке. В любом случае saveToDB».
Если вы хотите прервать выполнение, используйте exit
скорее тогда echo
или убедитесь, что saveToDb выполняется только тогда, когда ваша форма действительна, например как это:
$valid = true;
if ($_POST['password1']!= $_POST['password2'])
{
echo "No Match";
$valid = false;
}
if (...)
{
echo "...";
$valid = false;
}
...
if ($valid)
{
saveToDb();
}
Где у вас есть:
echo("Oops! Password did not match! Try again. ");
Вам нужно «$ failflag = 1», тогда, когда у вас есть DBQuery, который вводит данные, просто добавьте предложение if;
if($failflag==1)
//Dont do db stuff
else
//Do do db stuff
РЕДАКТИРОВАТЬ:
Старайтесь держаться подальше от устаревших функций mysql_query, если вы немного растерялись из-за того, где и как использовать ООП, я предлагаю использовать этот класс, это хорошо для начинающих:
HI Для 1-го и 3-го задания вы можете использовать регулярные выражения
http://php.net/manual/en/function.preg-match.php
http://www.regular-expressions.info/
для второго задания вам нужен скрипт выхода после
echo("Oops! Password did not match! Try again. ");
или вам нужно написать как ниже
if(//username is not OK){
//echo error
}
else if(//password is not OK){
//echo error
}
else if ($_POST['password1']!= $_POST['password2'])
{
echo("Oops! Password did not match! Try again. ");
}
else{
//insert in database
}