2014-02-10 3 views
0

Привет, почему-то я не знаю, что я продолжаю получать следующие ошибки:Предупреждение: mysql_real_escape_string() [function.mysql-real-escape-string]: доступ запрещен для пользователя 'a8221325' @ 'localhost' (с использованием пароля: НЕТ)

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'a8221325'@'localhost' (using password: NO) in /home/a8221325/public_html/add.php on line 11 

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in /home/a8221325/public_html/add.php on line 11 

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'a8221325'@'localhost' (using password: NO) in /home/a8221325/public_html/add.php on line 12 

Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in /home/a8221325/public_html/add.php on line 12 

Из исследования я сделал я чувствую, что проблема заключается в том, как я подключиться к базе данных, но я не совсем уверен. Если кто-то может помочь мне заставить мой код работать, это будет потрясающе! До сих пор мой сайт состоит из двух страниц, теста и добавить здесь свой код:

test.html:

<!doctype html> 
<html> 
<head> 
<meta charset="utf-8"> 
<title>Untitled Document</title> 
</head> 

<body> 
<form action="add.php" method="post" name="form1" id="form1"> 
    <label for="name">Text Field:</label> 
    <input type="text" name="name" id="name"> 
    <label for="password">Text Field:</label> 
    <input type="text" name="password" id="password"> 
    <input type="submit" name="submit" id="submit" value="Submit"> 
</form> 
</body> 
</html> 

add.php:

<?php 
$con=mysqli_connect("mysql1.000webhost.com","a8221325_admin","**************","a8221325_prom"); 

// Check connection 
if (mysqli_connect_errno()) 
    { 
    echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
    } 

$escapedName = mysql_real_escape_string($_POST['name']); # use whatever escaping function your db requires this is very important. 
$escapedPW = mysql_real_escape_string($_POST['password']); 

# generate a random salt to use for this account 
$salt = bin2hex(mcrypt_create_iv(32, MCRYPT_DEV_URANDOM)); 

$saltedPW = $escapedPW . $salt; 

$hashedPW = hash('sha256', $saltedPW); 

$query = "insert into user (name, password, salt) values ('$escapedName', '$hashedPW', '$salt'); "; 
?> 

Спасибо!

+1

'mysql_real_escape_string' является функцией расширения' mysql', 'mysqli_connect' является функцией расширения' mysqli'. И вы не должны дезинфицировать пароль пользователя ** ПЕРЕД ** вы хеш его, но прежде чем вставлять хеш в базу данных – zerkms

+0

Что неясно, что выдается сообщение об ошибке? – PeeHaa

+0

@PeeHaa: на самом деле это немного сложно, особенно для новичков – zerkms

ответ

5

Вы используете расширение mysqli для создания соединения с базой данных.

Затем вы используете совершенно другое расширение с именем «mysql» (обратите внимание на отсутствующий «i» в конце), чтобы выйти.

Экранирование требует существующего соединения mysql. Если не существует, он будет создан неявно со значениями по умолчанию. Выполнение этого не выполняется.

Но он не указывает вас в правильном направлении: вам нужно использовать функции экранирования с расширения, с которым вы создаете соединение. Что такое mysqli_real_escape_string (обратите внимание на добавленный «i» после «mysql»).

Общие дисклеймеры:

При использовании Mysqli, использовать подготовленные заявления, чтобы избавиться от вылетающих строк.

Не используйте быстрые хэш-функции для хэш-паролей. Включите эту библиотеку, которая реализует функции PHP5.5 для хэширования паролей: https://github.com/ircmaxell/password_compat

+1

было бы неплохо, если бы вы упомянули подготовленные заявления – zerkms

+0

@zerkms: Просто сделал. – Sven

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

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