Добрый день! Im пытается сделать регистрацию на моей веб-странице, и у меня есть проблема - происходит регистрация, но она может создавать несколько пользователей с одинаковыми символами, а также одинаковые электронные письма и не давать ошибку, если пароли не совпадают.PHP mysql Страница регистрации вопроса
Вот форма -
<form action = "register.php" method = "post">
Select username:<br>
<input type = "text" name = "username"><br>
Your e-mail:<br>
<input type = "email" name = "email"><br>
Set password:<br>
<input type = "password" name = "password1"><br>
Repeat password:<br>
<input type = "password" name = "password2"><br>
<button> </button>
</form>
и вот PHP код -
<?php
if (isset($_POST['username']) && isset($_POST['email']) && isset($_POST['password1']) && isset($_POST['password2'])){
$query = 'select * from users where username = "'.addslashes($_POST['username']).'"';
$numrows = mysqli_num_rows($link,$query);
if($numrows == 0){
$query_mail = 'select * from users where email = "'.addslashes($_POST['email']).'"';
$numrows_mail = mysqli_num_rows($link,$query_mail);
if($numrows_mail == 0){
if(isset($_POST['password1']) == isset($_POST['password2'])){
$sql = 'INSERT INTO users (username,password,email) VALUES("'.addslashes($_POST['username']).'","'.addslashes($_POST['password1']).'","'.addslashes($_POST['email']).'")';
$result = mysqli_query($link,$sql) or die(mysqli_error($link));
if($result){
echo 'Account sucsessfully created! You can now log in.';
}else{
var_dump($result);
}
}else {
echo 'Passwords must match!';
}
}else {
echo 'E-mail allready registered!';
}
}else{
echo 'Username allready in use!';
}
}
?>
Может кто-то объяснить, что неправильно здесь?
Вт шляпа, вы имеете в виду под «* несколько пользователей с одинаковыми символами»? Можете привести несколько примеров? И вы не * на самом деле * выполняете запрос для проверки по электронной почте, вы используете 'mysqli_num_rows ($ link, $ query_mail);' - это должно вызывать ошибки. – Qirel
Вы также должны принять во внимание, что использование переменных, особенно пользовательского ввода, непосредственно в запросе небезопасно. Вместо этого вы должны использовать 'mysqli :: prepare()' с заполнителями вместо этого - руководство содержит примеры на нем, http://php.net/mysqli.prepare – Qirel
И 'if (isset ($ _ POST ['password1']) == isset ($ _ POST ['password2'])) 'не проверяет, совпадают ли пароли, только если они оба установлены. – Qirel