Я пытаюсь создать скрипт входа / создания пользователя в PHP и хотел бы знать, как лучше всего проверить, существует ли имя пользователя при создании пользователя. На данный момент у меня есть следующий код:
function createUser($uname,$pword) { $server->connect(DB_HOST,DB_USER,DB_PASS,DB_NAME); $this->users = $server->query("SELECT * FROM user_list"); while ($check = mysql_fetch_array($this->users) { if ($check['uname'] == $uname) {
Я не уверен, что это лучшая логика для этого. Я думал о добавлении логической переменной, чтобы сделать что-то вроде (после оператора if):
$boolean = true; } if ($boolean) { echo "User already exists!"; } else { $server->query("INSERT USER INTO TABLE"); echo "User added Successfully"; }
Но это кажется немного неэффективным – есть ли более эффективный способ сделать это? Извините, если у этого есть основное решение – я – относительно новый программист PHP.
Используйте WHERE
, чтобы получить только строки с заданным именем пользователя:
"SELECT * FROM user_list WHERE uname='".$server->real_escape_string($uname)."'"
Затем проверьте, приводит ли запрос к выбору любых строк (0 или 1 строки) с помощью MySQLi_Result::num_rows
:
function createUser($uname,$pword) { $server->connect(DB_HOST,DB_USER,DB_PASS,DB_NAME); $result = $server->query("SELECT * FROM user_list WHERE uname='".$server->real_escape_string($uname)."'"); if ($result->num_rows() === 0) { if ($server->query("INSERT INTO user_list (uname) VALUES ('".$server->real_escape_string($uname)."'")) { echo "User added Successfully"; } else { echo "Error while adding user!"; } } else { echo "User already exists!"; } }
В основном это связано с выполнением запроса, обычно во время проверки, перед вставкой члена в базу данных.
<?php $errors = array(); $alerts = array(); if (isset($_POST['register'])) { $pdo = new PDO('[dsn]', '[user]', '[pass]'); // first, check user name has not already been taken $sql = "SELECT COUNT(*) AS count FROM user_list WHERE uname = ?"; $smt = $pdo->prepare($sql); $smt->execute(array($_POST['uname'])); $row = $smt->fetch(PDO::FETCH_ASSOC); if (intval($row['count']) > 0) { $errors[] = "User name " . htmlspecialchars($_POST['uname']) . " has already been taken."; } // continue if there are no errors if (count($errors)==0) { $sql = "INSERT INTO user_list ([fields]) VALUES ([values])"; $res = $pdo->exec($sql); if ($res==1) { $alerts[] = "Member successfully added."; } else { $errors[] = "There was an error adding the member."; } } }
В приведенном выше примере используется PDO PHP, поэтому измените синтаксис, чтобы использовать любую абстракцию базы данных, которую вы используете.