根据mysql数据库检查php登录表单
我正在尝试创建一个会员网站。我已经成功地获得了一个向MySql数据库写入的注册表表单,但是我在根据数据库记录检查用户登录时遇到了问题 登入表格:根据mysql数据库检查php登录表单,php,mysql,database,logging,login,Php,Mysql,Database,Logging,Login,我正在尝试创建一个会员网站。我已经成功地获得了一个向MySql数据库写入的注册表表单,但是我在根据数据库记录检查用户登录时遇到了问题 登入表格: <form id="login" name="login" onsubmit="" action="scripts/login.inc.php" method="post"> <label class="label">Username:</label> <input t
<form id="login" name="login" onsubmit="" action="scripts/login.inc.php" method="post">
<label class="label">Username:</label> <input type="text" name="user" id="user" onkeyup="return validateForm();" size="25" />
<span id="feedback_msg_user"></span><br />
<label class="label">Password:</label> <input type="password" name="pass" id="pass1" onblur="return validateForm();" size="25" />
<span id="feedback_msg_pass1"></span><br />
<input type="submit" name="loggedin" value="Log In" />
<input type="reset" />
</form>
用户名:
密码:
处理器脚本:
include('../includes/connect.inc.php');
$user = $_REQUEST['user'];
$pass = $_REQUEST['pass'];
if(isset($_POST['loggedin']))
{
if (empty ($user)) //if username field is empty echo below statement
{
echo "you must enter your unique username <br />";
}
if (empty ($_REQUEST['pass'])) //if password 1 field is empty echo below statement
{
echo "you must enter your password <br />";
}
}
else
{
$query = "SELECT * FROM user WHERE $user = username AND $pass = passowrd" ;
$result = mysqli_query($dbc,$query);
if ($result)
{
echo "query successfull wrote to DB";
header('location:../members.php');
}
else
{
echo"unscccessful login";
}
}
include('../includes/connect.inc.php');
$user=$\请求['user'];
$pass=$_请求['pass'];
如果(isset($_POST['loggedin']))
{
if(empty($user))//如果username字段为空,则在语句下面回显
{
echo“您必须输入您的唯一用户名
”;
}
if(empty($\u REQUEST['pass'])//如果密码1字段为空,则在语句下面回显
{
echo“您必须输入密码
”;
}
}
其他的
{
$query=“从用户中选择*,其中$user=username和$pass=passowrd”;
$result=mysqli_查询($dbc,$query);
如果($结果)
{
echo“查询成功写入数据库”;
标题('location:../members.php');
}
其他的
{
回显“未成功登录”;
}
}
这将退回
不成功的登录
。我哪里做错了?任何帮助都将不胜感激。我认为您的SQL查询应该是:
$query = "SELECT * FROM user WHERE username = '".$user."' AND password = '".$pass."'";
我建议检查找到的行数,并检查是否发生了MySQL错误(如果有)
使用以下命令获取行数:
$count = mysqli_num_rows($result);
您需要行计数,并且您的查询也是错误的
$query = "SELECT * FROM user WHERE username = '". mysqli_real_escape_string($user) ."' AND pass = '". mysqli_real_escape_string($pass) ."'" ;
$result = mysqli_query($dbc,$query);
if (mysqli_num_rows($result) == 1) {
//Pass
} else {
//Fail
}
我认为你的问题应该是这样的
<?php
if(isset($_POST['submit'])) {
$user=$_POST['user'];
$password=$_POST['password'];
$query="select * from users where user='$user' and password='$password'";
$con=mysqli_connect('localhost','root','','database');
$run=mysqli_query($con,$query);
if(mysqli_num_rows($run)>0) {
while()
echo "<script> window.open('index.php','_self')</script>";
$_SESSION['user']=$user;
} else {
echo"<script>alert('incorrect user name or password')</script>";
}
}
?>
result
中的FALSE
值表示查询失败。在您的情况下,您需要引用'$user'
和'$pass
'。始终测试失败:如果(!$result)echo mysql_error()`请阅读有关sql注入的内容,您的代码非常不安全……您的代码容易受到sql注入的攻击。至少,在这些变量上调用mysqli\u real\u escape\u string()
,但最好使用mysqli准备好的语句,因为您已经在使用mysqli了。@Sven显然,他至少需要使用mysqli\u real\u escape\u string
,现在我们可以;我们不能为他清理数据,但我们可以逃避。这一步不是可选的。@Sven但必须有正则表达式,比如他不能使用特殊字符或用户名等任何符号,所以有可能,如果他使用preg\u match
抛出错误,就不需要使用mysqli\u real\u escape\u string
。您假设,由于其他函数可能只发出安全字符,因此调用转义函数是可选的,因为它不会改变任何内容。坏主意。你现在必须考虑你是否绝对必须逃跑,或者你是否可以不打电话。转义到正确的上下文总是正确的,但不转义到应该转义的地方是错误的。@Sven好的,我至少可以转义,而不是编写正则表达式,我想OP不会使用正则表达式,谢谢你的编辑