简单的PHP登录将无法连接到DB

时间:2011-07-24 23:03:03

标签: php mysql login

以下是成员登录和连接数据库的代码。我已经设置了数据库,数据库所有者用户和密码,数据库“members”表和数据库成员用户。第一部分代码只是登录的html表单[它是索引文件],第二部分是应该将所述用户连接到数据库的PHP文件[checklogin.php]。问题是输入html表单的任何内容都会让用户到下一页说“嘿,用户,你已登录”,即使该用户不在member表中。我觉得他们根本就没有真正联系,只是回应了这一点。 - 使用++++++

键入所有数据库信息
    <html>
    <form action='checklogin.php' method='POST'
    <strong>username:</strong><br />
    <input name="myusername" type="text" id="myusername"><br />
    <strong>password:</strong><br />
    <input name="mypassword" type="password" id="mypassword"><br />
    <input type="submit" name="Submit" value="Login">
    </form>
    </html> 

    <?php
    $host="localhost"; 
    $username="++++++"; 
    $password="++++++"; 
    $db_name="++++++"; 
    $tbl_name="members"; 

    mysql_connect("$host", "$username", "$password")or die("cannot connect");
    mysql_select_db("$db_name")or die("cannot select DB");
    $myusername=$_POST['myusername'];
    $mypassword=$_POST['mypassword'];
    echo "hey, " . $myusername . ", you are correctly signed in."
    ?>

谢谢。在我开始之后,我将添加安全元素。它最终会将用户登录并让他们直接进入他们的个人资料。

3 个答案:

答案 0 :(得分:3)

嗯,你没有执行任何查询或进行任何类型的验证,所以显然只是打印那个语句,无论如何。我想你想要这样的东西(但这在很大程度上取决于你的表结构)

$myusername = mysql_real_escape_string($_POST['myusername']);
$mypassword = mysql_real_escape_string($_POST['mypassword']);
$query = "SELECT * FROM $tbl_name where username=$myusername AND password=$mypassword";
$result = mysql_query($query);
$user = mysql_fetch_array($result);
if ($user) {
  echo "hey, " . $myusername . ", you are correctly signed in."
} else {
  echo "Not signed in."
} 

这将检查成员表以查看具有该名称/密码的用户是否在表中。

另请注意我在post变量上使用mysql_real_escape_string,这有助于防止SQL注入攻击。

答案 1 :(得分:2)

mysql_connect()返回您需要传递给mysql_query()的调用的连接资源,以及SQL查询以确定凭据是否与数据库中的用户匹配。

$con = mysql_connect($server, $dbuser, $dbpass);
mysql_select_db($db_name)

您的查询需要检查数据库以查看$myusername是否存在,以及$myusername的密码是否等于$mypassword。你提到表名是成员。

$user = mysql_query("select password from members where username = '" . 
    mysql_real_escape_string($_POST['myusername']) . "'", $con);

if(mysql_num_rows($user) == 0) {
    // Username not found
}

$user = mysql_fetch_assoc($user);
if($_POST['password'] != $user['password']) {
    // Password does not match
}

实际查询取决于数据库的架构。

答案 2 :(得分:0)

您使用mysql_connect()仅连接到数据库。 这看起来不错。 mysql_connect("$host", "$username", "$password")or die("cannot connect"); mysql_select_db("$db_name")or die("cannot select DB");

但您需要验证用户并显示用户名。

$username = mysql_real_escape_string(strip_tags($_POST['username']));
$password=md5(mysql_real_escape_string(strip_tags($_POST['password'])));
$query="select * from login1 where username='$username' AND password='$password'";
$result=mysql_query($query);
if(mysql_num_rows($result)!=1)
{
//If the username or password wrong 
}
else
{
//Username and password correct
$row=mysql_fetch_array($result);
echo "hey, " . $row['username'] . ", you are correctly signed in."
}

Take a look this example.