2010-11-01 2 views
1

Notice: Undefined индекс: имя в C: \ WAMP \ WWW \ espn.com \ registration.php на линии 12что это уведомление со ссылкой на

Примечание: Undefined индекс: имя пользователя в C: \ WAMP \ WWW \ espn.com \ registration.php в строке 13

Уведомление: Неопределенный индекс: пароль в C: \ wamp \ www \ espn.com \ registration.php в строке 14 Извините, но указанное вами имя пользователя уже были приняты. Выберите другой.

кодирования

<html> 
<body> 
<?php 
$dbhost = "localhost"; 
$dbname = "users"; 
$dbuser = "root"; 
$dbpass = "*******"; 

mysql_connect ($dbhost,$dbuser,$dbpass)or die("Could not connect: ".mysql_error()); 
mysql_select_db($dbname) or die(mysql_error()); 

$name = $_POST['name']; 
$username = $_POST['username']; 
$password = md5($_POST['password']); 

$checkuser = mysql_query("SELECT username FROM users WHERE username='$username'"); 

$username_exist = mysql_num_rows($checkuser); 

if($username_exist > 1){ 
    echo "I'm sorry but the username you specified has already been taken. Please pick another one."; 
    unset($username); 
    include 'registration.html'; 
    exit(); 
} 

$query = "INSERT INTO users (name,username, password) 
VALUES('$name','$username', '$password')"; 
mysql_query($query) or die(mysql_error()); 
mysql_close(); 

echo "You have successfully registered"; 
?> 
</body> 
</html> 
+0

Возможный дубликат [PHP: «Примечание: неопределенная переменная» и «Уведомление: Неопределенный индекс»] (http://stackoverflow.com/questions/4261133/php-notice-undefined-variable-and-notice-undefined- index) – Jocelyn

ответ

7

Это означает, что $ _POST [ 'имя'], $ _POST [ 'имя пользователя'] и $ _POST [ 'пароль'] не существует. Ваша форма, скорее всего, не была отправлена ​​при доступе к registration.php (или имена полей неверны).

В PHP вы должны убедиться, что каждое поле, которое вы будете использовать, будет установлено до его использования. Вы можете использовать! Empty или isset.

Кроме того, ваш скрипт уязвим для SQL-инъекций, взгляните на функцию mysql_real_escape_string. И ваше условие неверно: если вы хотите узнать, существует ли имя пользователя, вы должны проверить, больше ли оно , а не 1. Вы также можете использовать запрос COUNT (*) вместо выбора строки.

+0

и где я должен проверять/добавлять необходимые поля? – ben

0

В основном глобальные переменные $ _POST ['name'], $ _POST ['username'] и $ _POST ['password'] не существуют. Я предлагаю вам проверить, что каждый вход формы представляются в качестве имени, которое может быть объявлено следующим образом:

<input name="username"/> 

Так что вы можете получить доступ к значению этого входа на $ _POST [ «имени пользователя»] , После того, что строка, что выходной сценарий (я извиняюсь, но имя пользователя, указанные уже принято Пожалуйста, выберите другой.). Вторят потому что ваш запрос выглядит следующим образом:

SELECT username FROM users WHERE username='' 

который будет возвращать каждый пользователь с пустым ('') именем пользователя. Также, как уже было сказано, исправьте скрипт как можно скорее.

+0

Нет, совсем нет! 'SELECT username FROM users WHERE username = ''' ** не ** 'SELECT username FROM users'! Первый возвращает строки, в которых имя пользователя является пустой строкой (NULL <> ''!), А вторая возвращает все строки. –

+0

Да, извините. Я думал с логикой: никто не имеет пользователей с пустым именем пользователя. Поэтому я исправил свой ответ. – Shoe

Смежные вопросы