使用MySQL的PHP​​会话登录表单

时间:2015-04-21 17:06:45

标签: php mysql

当我输入用户名和密码时,我会收到如下警告:

  

警告:mysqli_num_rows()要求参数1为mysqli_result,第18行/home/data/www/z1760359/public_html/group/connectivity.php中给出的数组

  

密码或用户名不正确。

我输入了正确的凭据。 我的数据库结构是:

 member ID  firstName  lastName  userName  password

这是我的index.php和connectivity.php

的index.php

<?php
session_start(); 
?>
<html>
<head>
<style>
#login
{

    position:absolute;
    top: 30%;
    bottom: 30%;
    left:30%;
    right:30%;
    margin: 0px auto;
}

</style>
</head>
<body>
<?php


echo"<center>";
echo"<div id=\"login\">";

echo"<form method=\"POST\" action=\"connectivity.php\">";
echo"<b>Username</b>  <input type =\"text\" name=\"username\">";
echo"<br/><br/>";
echo"<b>Password</b>&nbsp;<input type =\"password\" name=\"password\">";
echo"<br/><br/>";
echo"<input type=\"submit\" value=\"submit\">";

echo"</div>";
echo"</center>";
?>

</body>
</html>

连接

<?php
$username = $_POST['username'];
$password = $_POST['password'];
$host="localhost";
$uname="user";
$pword="";
$db="z1760359";
$conn=mysqli_connect($host,$uname,$pword,$db) or die("Oops something went  wrong");
session_start();

$query="Select firstName  from member where userName='$username' AND password='$password'";

if(!empty($_POST['username'])) 
{
$query_first=mysqli_query($conn,$query) or die(" Query not retrieved");
//mysqli_error($query_first);
$query_second=mysqli_fetch_assoc($query_first);
$rows=mysqli_num_rows($query_second);
if($rows ==1)
{
    $_SESSION['user_name']=extract($query_second);
    echo"login successfull";
    sleep(3);
    header('Location:search.php');
}
else
{
    echo"Incorrect Password or Username";
}


}
else
{
echo"please enter the password or username";

}


?> 

2 个答案:

答案 0 :(得分:7)

您在<:p>中使用了错误的变量$query_second

$rows=mysqli_num_rows($query_second);

对于您的查询应为$query_first,而不是mysqli_fetch_assoc()

$rows=mysqli_num_rows($query_first);

图片的标题说明:

您目前的代码向SQL injection开放。使用mysqli with prepared statementsPDO with prepared statements

我注意到您可能以纯文本格式存储密码。如果是这种情况,则非常气馁。

要进行密码存储,请使用CRYPT_BLOWFISH或PHP 5.5&#39 {s} password_hash()功能。对于PHP&lt; 5.5使用password_hash() compatibility pack

事实上, ircmaxell早些时候就password_hash()使用PDO(预备语句)提出了答案。


修改

  

&#34;如何将firstName从数据库存储到$ _SESSION [&#39; user_name&#39;]?&#34;

$username = $_POST['username']; 

$_SESSION['user_name'] = $_POST['username'];
$saved_session = $_SESSION['user_name'];
echo $saved_session;

答案 1 :(得分:0)

尝试$ query_first而不是$ query_second