2009-08-30 3 views
3

Im, создающий скрипт регистрации для моего сайта, и я хочу проверить, существует ли $ _POST ['username'] в db.проверить, существует ли имя пользователя

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

Вот как это выглядит сейчас:

$checkusername = mysql_query("SELECT username FROM users WHERE username = '$_POST[username]'"); 
$row83 = mysql_fetch_assoc($checkusername); 

if ($_POST['username'] == $row83['username']) die('Username already in use.'); 
+4

Надеюсь, у вас нет пользователей с именем '; drop table users - – leeeroy

+0

leeeroy поднимает очень важный момент ... проверьте все входные данные из пользовательского интерфейса и никогда не доверяйте ему. Если вы этого не сделаете, кто-то может ввести SQL в ваш оператор SELECT, который будет мусор вашей БД. Для юмористического угла по этому поводу см. Http://2.bp.blogspot.com/_isk1o8_XWYA/R0ML6q6-HYI/AAAAAAAAAtY/_bm0dffd6Gc/s1600-h/exploits_of_a_mom.png –

+1

@ Eric J, кредит, в котором причитается кредит: http://xkcd.com/327/ комикс, если вы не знаете, XKCD автор Randall Munroe. –

ответ

4

Добавить unique constraint на свой стол:

alter table users 
add unique (username) 

Тогда ваши insert или update заявления не получится из:

mysql_query("insert into users (username) values ('$username')") 
    or die('Username exists'); 

Конечно, большая проблема с вашим кодом, что вы Арен» t предотвращение SQL-инъекции. Ваш код должен быть:

$username = mysql_real_escape_string($_POST['username']); 
mysql_query("insert into users (username) values ('$username')") 
    or die('Username exists'); 
+0

классный не знал, что спасибо помощнику – 2009-08-31 00:06:08

0

, так как вы уже проверки имени пользователя в вызове SQL, то вам действительно нужно просто видеть, если запись возвращается в PHP стороне вещей

$row83 = mysql_query($checkusername); 
if (mysql_num_rows($row83) == 0) die('Username already in use.'); 
0

Если вы установили имя пользователя как «уникальное» в своей базе данных, вы можете просто запустить запрос на вставку, который не удастся (что вы можете обработать). То же самое касается электронной почты - сделать ее «уникальной».

This может пригодиться.