当我使用正确的用户名和密码登录时,我收到错误"错误的用户名或密码"数据库连接有效,我认为密码+用户名检查有问题.
<?php
$host="mysql12-int.cp.hostnet.nl"; // Host name
$username="u33936_mick"; // username
$password="//password was correct"; // password
$db_name="db33936_axe"; // Database name
$tbl_name="users"; // Table name
mysql_connect("$host", "$username", "$password");
mysql_select_db("$db_name");
$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);
$sql = 'SELECT * FROM `users` LIMIT 0, 30 WHERE username="$myusername" and
password="$mypassword"';
$result=mysql_query($sql);
$count=mysql_num_rows($result);
if($count==1){
session_register("username");
session_register("password");
header("location:index.php");
} else {
echo "Wrong Username or Password";
}
?>
Run Code Online (Sandbox Code Playgroud)
这是我的表格
<form name="login" method="post" action="login.php">
<fieldset id="inputs">
<input id="myusername" type="text" name="myusername"
placeholder="Username" required="">
<input id="mypassword" type="password" name="mypassword"
placeholder="Password" required="">
</fieldset>
<fieldset id="login.php">
<input type="submit" id="submit" value="Login">
</style>
</fieldset>
</form>
Run Code Online (Sandbox Code Playgroud)
最重要的是,我建议您考虑转换远离已弃用mysql_*的函数系列,转而使用mysqli(docs)或PDO(docs),就代码而言,这两者都不需要对您进行任何重大更改.
至于您的特定错误,您似乎错误地将值连接到查询中.此外,您WHERE和LIMIT订单不正确且SQL无效.这是正确的形式:
$sql = '
SELECT
*
FROM
`users`
WHERE
username="'.$myusername.'" AND
password="'.$mypassword.'"
LIMIT 0, 30
';
Run Code Online (Sandbox Code Playgroud)
目前尚不清楚您使用该LIMIT声明带来了什么好处.您应该有一个匹配的行,或者没有.如果有的话,我会用LIMIT 1.如果你有30排回来,你会怎么做他们!?
转换为PDO很容易!PDO中的相同查询如下所示:
$host="mysql12-int.cp.hostnet.nl"; // Host name
$username="u33936_mick"; // username
$password="//password was correct"; // password
$db_name="db33936_axe"; // Database name
$pdo = new PDO('mysql:host='.$host.';dbname='.$db_name, $username, $password);
$sth = $pdo->prepare('
SELECT
*
FROM
`users`
WHERE
username=:username AND
password=:password
LIMIT 0, 30
');
$sth->execute(array('username'=>$myusername, 'password'=>$mypassword));
$user = $sth->fetch();
Run Code Online (Sandbox Code Playgroud)
请注意,当您使用带有绑定参数的PDO(此处显示)时,您不必使用mysql_real_escape_string或addSlashes在代码中进行清理.
你在哪里定义目前尚不清楚$mypassword和$myusername,但如果你正在使用注册全局变量,那么你应该改变你的代码.直接从中获取值$_POST.addSlashes是不安全的,也不是注册的全局变量.
文档
mysql_* 函数的弃用通知- http://www.php.net/manual/en/function.mysql-query.phpmysqli- http://php.net/manual/en/book.mysqli.php