我正在尝试进行用户通过验证。更新的代码:
$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.为什么?
答案 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);