PHP/MySQL MySQL\u num\u行不返回值
我对PHP和编程基本上是新手,但我正在做一个登录。我已经完成了注册页面,我的数据库很好地填充了记录。然而,当这个代码得到输出时,它说我有0行来自mysql_num_rows($result);。。。当我输入正确的用户名/密码时,它应该会成功返回显示1行。无论我是否输入了成功的user/pass组合,它都会输出相同的结果 感谢您提供的任何帮助,代码如下所示:PHP/MySQL MySQL\u num\u行不返回值,php,mysql,Php,Mysql,我对PHP和编程基本上是新手,但我正在做一个登录。我已经完成了注册页面,我的数据库很好地填充了记录。然而,当这个代码得到输出时,它说我有0行来自mysql_num_rows($result);。。。当我输入正确的用户名/密码时,它应该会成功返回显示1行。无论我是否输入了成功的user/pass组合,它都会输出相同的结果 感谢您提供的任何帮助,代码如下所示: $SQL = "SELECT * FROM account WHERE username = $username AND password
$SQL = "SELECT * FROM account WHERE username = $username AND password = md5($password)";
$result = mysql_query($SQL);
$num_rows = mysql_num_rows($result);
echo $result;
echo $num_rows;
// CLOSE CONNECTION
mysql_close($db_handle);
// COMPARE $num_rows TO SEE IF A SUCCESSFUL LOGIN, THEN DIRECT TO MEMBERS PAGE
if ($result) {
if ($num_rows > 0) {
session_start();
$_SESSION['login'] = "1";
header ("Location: page1.php");
}
else {
$error_message = "Login failed. Please try again.";
echo $num_rows;
编辑:完成重写 试试这个:
<?php
$host = "host";
$user = "user";
$password = "password";
$database = "database";
$username = 'jack'; /* Insert $_Post [''] here with username variable you pass. You could sanitize and validate with for example filter_var (), clean (), etc */
$password_user = 'password from jack'; // same here.
$link = mysqli_connect($host, $user, $password, $database);
IF (!$link){
echo ("Unable to connect to database!");
}
ELSE{
$query = "SELECT * FROM account WHERE username ='$username' AND password = md5('$password_user')";
$result = mysqli_query($link, $query);
$num_rows = mysqli_num_rows($result);
$row = mysqli_fetch_array($result, MYSQLI_BOTH);
// COMPARE $num_rows TO SEE IF A SUCCESSFUL LOGIN, THEN DIRECT TO MEMBERS PAGE
if ($row) {
session_start();
$_SESSION['login'] = "1"; // pleae not that 1 is converted into a string value
$_SESSION['username'] = $username; // added username, just to test.
header ("Location: page1.php");
}
else {
$error_message = "Login failed. Please try again.";
echo $error_message;
}
// CLOSE CONNECTION
mysqli_close($link);
}
?>
样本页1
<?php
session_start();
$login = $_SESSION['login'];
$username = $_SESSION['username'];
echo '<h1>It WORKS, <i>'.$username.'</i>!!!</h1>';
?>
需要注意的是,我使用了MYSQLI库而不是MYSQL库。如果表中有多个列,则应选择每列的输出。例如,$result['id']
我发现您并没有在SQL语句中转义变量。我必须注意,我没有调试下面的部分:比较$num_行以查看是否成功登录,然后直接登录到成员。我想你可以自己处理
W.R.T.santization和validation你还需要做更多的工作。我不知道您的数据是如何通过用户登录表单传递的。假设您将使用POST。在这种情况下,您可以从页面顶部开始,首先使用$\u POST检索所有已发布的变量。然后对它们进行过滤,确保您的代码没有打开以进行SQL注入。例如,
$username=filter\u var($\u POST['username'],filter\u SANITIZE\u STRING)代码>。它们不再得到维护。看到了吗?相反,学习,并使用or-将帮助您决定哪一个。如果选择PDO,.$username
和$password
都应该是带引号的字符串。如果它们来自输入,希望它们至少已经用mysql\u real\u escape\u string()
清理过。打开错误报告,您可能会看到mysql\u num\u rows()期望参数1是资源,给定的布尔值
。Do:错误报告(E_ALL);ini设置(“显示错误”,1)代码>@johncode:这家伙显然是在学习使用一些示例脚本&而不是为生产环境创建代码的人。这些咄咄逼人的请不要在新代码中使用mysql_*函数。
消息非常疏远和咄咄逼人。还有一点133t
。让人们学习基本概念&也许回答手边的问题,然后解释一下mysql.*
函数被贬值了,但很严重。冷静点。@JakeGould为什么你说这不是生产代码?对我来说,它看起来像是生产中使用的东西。更不用说学习过时的技术不是明智的选择。学习你应该使用的东西。不是你应该忘记的东西。激进:我正在通过POST传递它,我正在对它进行消毒。我使用了你粘贴的代码,但仍然得到:警告:mysqli_num_rows()期望参数1是mysqli_result,在第53行的C:\xampp\htdocs\fun\login\login.php中给出的布尔值谢谢你的帮助,如果没有这个,我会迷路的。“MYSQL库而不是MYSQL库”?什么?回答问题和解释MySQLI与MySQL调用的最佳方式。@Mr.radial如果我不知道您想要什么库,我就不知道了。我首先假设PDO,但是有几个库。
<?php
session_start();
$login = $_SESSION['login'];
$username = $_SESSION['username'];
echo '<h1>It WORKS, <i>'.$username.'</i>!!!</h1>';
?>