Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
根据mysql数据库检查php登录表单_Php_Mysql_Database_Logging_Login - Fatal编程技术网

根据mysql数据库检查php登录表单

根据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

我正在尝试创建一个会员网站。我已经成功地获得了一个向MySql数据库写入的注册表表单,但是我在根据数据库记录检查用户登录时遇到了问题

登入表格:

    <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不会使用正则表达式,谢谢你的编辑