Intereting Posts
Доступ к частной переменной из статической функции в php Класс «ГузлHttp \ Клиент» не найден Настройка переменных среды для доступа к PHP Почему PHP не автоматически вызывает родительские конструкторы? PHP: Самый простой способ удалить папку (включая ее содержимое) Есть ли способ следить за перенаправлениями с командной строкой cURL Проверка подлинности электронной почты с использованием регулярного выражения в PHP Извлечь объект JSON внутри объекта JSON через php Force https: // www. для Codeigniter в htaccess с mod_rewrite как мне помещать цикл в таблицу html? PHP: цикл через многомерный массив и установление отношений между родителями и дочерними элементами между элементами массива ОШИБКА Вставить в ON duplicatekey UPDATE Используйте массив данных Perl's Data :: Dumper в PHP как преобразовать форматы даты php в GMT и наоборот? ClassNotFoundException: Попытка загрузить класс «Mongo» из … (с сохранением) symfony2

Поиск существующей электронной почты и имени пользователя в базе данных

Как я могу проверить, есть ли электронная почта или имя пользователя уже в моей базе данных mysql, пока регистрируется другой пользователь, поэтому я могу остановить процесс регистрации и, возможно, предложить другое 2/3 новое имя пользователя, которого нет в базе данных для нового пользователя.

поэтому я попробовал работать, и я мог бы получить только тот, который проверяет, существует ли в базе данных электронная почта, тем временем мне нужен тот, который будет проверять как имя пользователя, так и адрес электронной почты в базе данных и печатать обе $ ошибки отдельно. Я имею в виду, что если существует электронная почта и имя пользователя не существует, она будет печатать только сообщение об ошибке и то же самое для имени пользователя.

Надеюсь, кто-то меня поймет.

<?php if(isset($_POST['register'])) { $username = $_POST['username']; $full_name = ucwords($_POST['full_name']); $email = $_POST['email']; $password = trim($_POST['password']); $time = time(); $age = $_POST['age']; $gender = $_POST['gender']; // Geolocation $longitude = $_SESSION['longitude']; $latitude = $_SESSION['latitude']; $geo_info = $geo->getInfo($latitude,$longitude); $city = $geo_info['geonames'][0]['name']; $country = $geo_info['geonames'][0]['countryName']; $check_d = $db->query("SELECT username, email from users WHERE username = '$username' OR email = '$email'"); $check_d = $check_d->num_rows; if($check_d == 0) { $db->query("INSERT INTO users (profile_picture,username,full_name,email,password,registered,credits,age,gender,ip,country,city,longitude,latitude) VALUES ('default_avatar.png','$username','$full_name','$email','".$auth->hashPassword($password)."','$time','100','$age','$gender','$ip','".$country."','".$city."','".$longitude."','".$latitude."')"); setcookie('justRegistered', 'true', time()+6); setcookie('mm-email',$email,time()+60*60*24*30,'/'); header('Location: '.$domain.'/people'); } else { $error = 'Username or password already exist, Try Another'; } } if($auth->isLogged()) { $first_name = $system->getFirstName($_SESSION['full_name']); $logged_in_user = header('Location: '.$domain.'/people'); } $users = $db->query("SELECT * FROM users ORDER BY RAND() LIMIT 7"); ?> 

Related of "Поиск существующей электронной почты и имени пользователя в базе данных"

Вы можете это сделать, проверив имя пользователя и адрес электронной почты в разделенных запросах.

В реализации я отправляю сообщение сначала, чтобы проверить почту, а затем проверить имя пользователя в базе данных. Если оба они уже находятся в db, более поздняя ошибка (для имени пользователя) перезапишет сообщение для сообщения электронной почты. Вы должны изменить это, чтобы дать пользователю более точную информацию о том, почему набор данных не может быть вставлен в таблицу.

Перед выполнением каких-либо проверок я инициализирую переменную $error AS null , так как она будет перезаписана, если одна из проверок ограничений завершится с ошибкой, я могу просто проверить, все ли она по-прежнему равна нулю после проверки, чтобы решить, должна ли выполняться insert или нет.

ПРИМЕЧАНИЕ. Вы не должны использовать этот скрипт, так как он серьезно уязвим для инъекций sql. Посмотрите эту тему, чтобы узнать, что вы должны изменить: как я могу предотвратить SQL-инъекцию в PHP?

 $error = null; $check_mail = $db->query("SELECT id FROM users WHERE email='" . $email . "'"); if ($check_mail->num_rows > 0) { $error = 'Email already exists'; } $check_username = $db->query("SELECT id FROM users WHERE username='" . $username . "'"); if ($check_username->num_rows > 0) { $error = 'username already exists'; } if($error === null){ $db->query("INSERT INTO users (profile_picture,full_name,email,password,registered,credits,age,gender,ip,country,city,longitude,latitude) VALUES ('default_avatar.png','$full_name','$email','" . $auth->hashPassword($password) . "','$time','100','$age','$gender','$ip','" . $country . "','" . $city . "','" . $longitude . "','" . $latitude . "')"); setcookie('justRegistered', 'true', time() + 6); setcookie('mm-email', $email, time() + 60 * 60 * 24 * 30, '/'); header('Location: ' . $domain . '/people'); } 

Как правило, вы хотите, чтобы такие ограничения выполнялись на уровне базы данных. С MySQL вы можете добавить unique индекс в столбцы имени пользователя и электронной почты. Когда дубликат будет введен, запрос завершится с ошибкой.

Затем вы можете проверить, произошел ли дубликат и соответствующим образом обрабатывать его.

 try { // Attempt to insert user here } catch (Exception $e) { // It failed! Check if username/email exists so we can confirm the exception is this // The following is pseudocode -- you will need to write your own if (username_exists() || email_exists() { // Generate alternative names $names = generateNames($username); // Send this to your view or however you are displaying info echo("Name is taken!<br>You can try one of these:<br>"); echo("<ul>"); foreach ($names as $name) { echo("<li>$name</li>"); } echo("</ul>"); } }