PHP选择不工作

时间:2013-01-09 19:07:07

标签: php mysql

我正在尝试进行用户通过验证。更新的代码:

$username="------";
$password="------";
$database="------";
$host = "------";


mysql_connect($host,$username,$password);
mysql_select_db($database) or die( "Unable to select database");

$username = $_POST['username'];
$password = $_POST['password'];

echo 'username: ' . $username . '<br>';  //myname
echo 'password: ' . $password . '<br>';  //mypass

function checkpass()
{
    //$result = mysql_query("SELECT * FROM REG_USERS where USERNAME='$_POST[username]' and PASSWORD='$_POST[password]' ") or die(mysql_error());  
    $result = mysql_query("SELECT * FROM REG_USERS where USERNAME='" . $username . "' and PASSWORD='" . $password . "'") or die(mysql_error());  
    return  mysql_num_rows($result);
}

checkpass();
echo 'checkpass:'. checkpass();

在第一个查询中,checkpass返回1.在第二个查询中,它返回0.为什么?

3 个答案:

答案 0 :(得分:2)

好了,现在我们有了明显的全部代码。

$username$password不是全球性的。该函数不知道它们的设置。

$username = $_POST['username'];
$password = $_POST['password'];

echo 'username: ' . $username . '<br>';  //myname
echo 'password: ' . $password . '<br>';  //mypass

function checkpass()
{
    $username = mysql_real_escape_string($_POST['username']);
    $password = mysql_real_escape_string($_POST['password']);

    //$result = mysql_query("SELECT * FROM REG_USERS where USERNAME='$_POST[username]' and PASSWORD='$_POST[password]' ") or die(mysql_error());  
    $result = mysql_query("SELECT * FROM REG_USERS where USERNAME='" . $username . "' and PASSWORD='" . $password . "'") or die(mysql_error());  
    return  mysql_num_rows($result);
}

NB我知道mysqli。 OP并不是在询问它,我并不是在考虑它但是我已经添加了mysql_real_escape_string以便进行测量。

答案 1 :(得分:0)

让我们把问题留给mysql接口(不好用到前进)以及你真的不想把任何类型的用户受影响的变量直接放到你的sql字符串中这一事实[SQL注入!!!!],你在描述中说出以下内容:

$result = mysql_query("SELECT * FROM REG_USERS where
USERNAME='" . $username . "' and PASSWORD='" . $password . "'") or die(mysql_error());

不起作用。

为什么会这样? $username$password设置为空。在您的第一个示例中,您首先将它们设置为某些内容,但之后您不使用它们(而是使用直接$_POST变量)。

在第二个例子中,你没有设置它们。

以下工作也是如此(请注意,您不需要连接变量以将它们放入字符串中)?

   $username = $_POST['username'];  
   $password = $_POST['password'];  

   $result = mysql_query("SELECT * FROM REG_USERS where  
   USERNAME='$username' and PASSWORD='$password'") or die(mysql_error()); 

同样,请确保您从未在实际代码中实际执行此操作(只需将变量放入SQL字符串中)。请改用预备语句。

答案 2 :(得分:-1)

以下是使用mysqli_的解决方案:

$link = mysqli_connect("localhost", "my_user", "my_password", "world");

/* check connection */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

$city = "Amersfoort";

/* create a prepared statement */
if ($stmt = mysqli_prepare($link, "SELECT USERNAME FROM REG_USERS WHERE USERNAME = ? AND PASSWORD = ?")) {

    /* bind parameters for markers */
    mysqli_stmt_bind_param($stmt, "ss", $_POST[username], $_POST[password]);

    /* execute query */
    mysqli_stmt_execute($stmt);

    /* bind result variables */
    mysqli_stmt_bind_result($stmt, $USERNAME);

    /* fetch value */
    mysqli_stmt_fetch($stmt);

    echo "The username is $USERNAME";

    /* close statement */
    mysqli_stmt_close($stmt);
}

/* close connection */
mysqli_close($link);