2014-02-05 4 views
0

У меня есть страница для входа. , когда я не использую mysql_real_escape_string с именем пользователя и паролем. Нет проблем.mysql_real_escape_string function

Но когда я использую mysql_real_escape_string с именем пользователя и паролем я не могу войти на главную страницу, и я получаю страница не найдена, и когда я обновите страницу, я получаю выберите * от входа, где имя пользователя = «» и пароль = «» неправильно

формы страница

<?php 
session_start(); 
if(!isset($_SESSION['username'])) { 
?> 
<html> 
<body> 
<form action="w.php" method="post"> 

Username : 
<input type = "text" name="username" /> 
<br /> 
Pass : 
<input type = "password" name = "password" /> 

<input type="submit" vale = "ok"> 
</form> 
</body> 
</html> 
<?php 
} else { 
?> 
<html> 
<body> 
you are login 
<a href ="logout.php">logout</a> 
</body> 
</html> 
<?php 
} 
?> 

и веб-страница

<?php 
session_start(); 
$_POST = array_map('removeSlashes',$_POST); 
function removeSlashes($value) { 
    if(is_array($value)) { 
     $value = array_map('removeSlashes',$value); 
    } else { 
     $value = stripslashes($value); 
     } 
return $value; 
} 

$con = mysql_connect('localhost', 'root', 'a12345'); 
$db ='sess1'; 
$select = mysql_select_db($db); 
$username = mysql_real_escape_string($_POST['username']); 
$password = mysql_real_escape_string($_POST['password']); 

$query= "select * from login where username= '$username' and password = '$password' "; 
echo "$query"; 
$result = mysql_query($query) or die (mysql_error()); 

if(mysql_affected_rows() > 0) { 
    $_SESSION['username'] = true; 
    header('location:index.php'); 
} else { 
    echo "wrong"; 
} 
?> 
+2

У вас ошибка «страница не найдена» при добавлении mysql_real_escape_string()? Я не считаю, что это вызывает проблему. –

+0

@MarcelBalzer да. когда я использую такой же код, я получаю страницу не найденной. но когда я удалю его, страница откроется, и я получу вас, войдите в систему – user3264926

+1

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

ответ

0

проблемы вы описываете косяк, возможно, происходит от добавления mysql_real_escape_string(). Поскольку эта функция только ускользает от «символов mysql».

Так что ваша проблема должна быть где-то еще.

Одна вещь, вы должны изменить это (Добавить пробел после нахождения):

header('location: index.php'); 

Кроме того, вы не schould использовать MySQL * функции, так как это будут depracted. Посмотрите на mysqli или PDO!

EDIT

Посмотрев глубже в вашем коде. большая часть из них является нарушением лучших практик. Я предлагаю начать с самого начала после хорошего учебника.

Может быть, один из тех, ржали: http://www.wikihow.com/Create-a-Secure-Login-Script-in-PHP-and-MySQL http://webcodingtutorial.blogspot.se/2013/05/php-mysqli-secure-login-page-with.html http://forums.devnetwork.net/viewtopic.php?f=28&t=135287

Все они используют различные решения Mysqli.

Если вам нравится, вы также можете искать и использовать пример PDO или что-то еще. Но я настоятельно рекомендую вам не использовать mysql *

+0

Я делаю пространство. еще проблема – user3264926

+0

Обновление: см. мое редактирование! –

-1

php внизу.

<?php 
session_start(); 

$con = mysql_connect('localhost', 'root', 'a12345'); 
$db ='sess1'; 
    $select = mysql_select_db($db); 
$username = mysql_real_escape_string($_POST['username']); 
$password = mysql_real_escape_string($_POST['password']); 

$query= "select * from login where username= '".$username."' and password = '".$password."' "; 
    echo "$query"; 
$result = mysql_query($query) or die (mysql_error()); 

    if(mysql_affected_rows() > 0) { 
    $_SESSION['username'] = true; 
    header("Location: index.php"); 
    } else { 
    echo "wrong"; 
    } 
+0

спасибо. но все еще проблема – user3264926

+0

Я обновил код ... и не могли бы вы указать, какую ошибку вы получаете –

0

заменить mysql_affected_rows() с mysql_num_rows(), потому что

int mysql_affected_rows ([ resource $link_identifier = NULL ]) 

Получить число пострадавших строк последним INSERT, UPDATE, DELETE или REPLACE запрос, связанный с link_identifier.

int mysql_num_rows (resource $result) 

Извлекает количество строк из набора результатов. Эта команда действительна только для операторов, как SELECT, или SHOW, которые возвращают фактический результат установить

Уведомление

mysql_ Помните, что функции устарели. Вы должны использовать mysqli_ вместо

+0

спасибо, но все еще проблема – user3264926

+0

добавить 'var_dump ($ _ POST);' перед вызовами mysql_real_escape_string'; и 'var_dump ($ username, $ password);' after – xzag

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