mysql_real_escape_string函数

时间:2014-02-05 08:44:50

标签: php mysql

我有登录页面。 当我不使用mysql_real_escape_string用户名和密码。没问题。

但是当我使用带有用户名和密码的mysql_real_escape_string时,我无法进入索引页面并且我找不到页面,当我刷新页面时,我从登录中选择*,其中username =''和password =''错误

表单页面

<?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";
}
?>

3 个答案:

答案 0 :(得分:0)

您所描述的问题可能源于添加mysql_real_escape_string()。由于此函数只能转义“mysql字符”。

所以你的问题必须在其他地方。

您应该更改的一件事是(在位置后添加空格字符):

header('location: index.php');

此外,你不应该使用mysql *函数,因为它被删除了。请改为查看mysqli或PDO!

修改

深入研究您的代码。其中大部分都违反了最佳做法。我建议你从一个好的教程开始。

也许其中一个吼叫: 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 *

答案 1 :(得分:0)

mysql_affected_rows()替换为mysql_num_rows(),因为

int mysql_affected_rows ([ resource $link_identifier = NULL ] )

通过与link_identifier关联的最后一次INSERT,UPDATE,REPLACE或DELETE查询获取受影响的行数。

int mysql_num_rows ( resource $result )

从结果集中检索行数。此命令仅对SELECT或SHOW等返回实际结果集

的语句有效

<强>通知

请记住,mysql_函数已弃用。您应该使用mysqli_代替

答案 2 :(得分:-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";
  }