PHP语句重定向到";否则";不考虑用户输入

PHP语句重定向到";否则";不考虑用户输入,php,Php,我正在尝试制作一个简单的登录脚本,可以与Pancake一起使用。(在线发票) 无论您在表单中键入什么,它都会重定向到“else”语句。而不是试图重定向到成功页面 <?php $con=mysqli_connect("example.com","example","example","example"); // Check connection if (mysqli_connect_errno()) { echo "Failed to connect to MySQL: " . my

我正在尝试制作一个简单的登录脚本,可以与Pancake一起使用。(在线发票)

无论您在表单中键入什么,它都会重定向到“else”语句。而不是试图重定向到成功页面

<?php
$con=mysqli_connect("example.com","example","example","example");
// Check connection
if (mysqli_connect_errno())
{
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

$result = mysqli_query($con, "SELECT * FROM mypanda_clients
                              WHERE unique_id='$_POST[username]'");

while ($row = mysqli_fetch_array($result))
{
    if ($_POST[password] == $ROW[passphrase])
    {
        header('Location: http://www.green-panda.com/my_panda/Clients/'.$_POST[username]); // concatenate the string
    }
    else
    {
        echo "The username and or password was incorrect. Please try again."; // missing semi colon
    }
}
?>

未定义变量$ROW

改变

if ($_POST[password] == $ROW[passphrase])
if ($_POST[password] == $ROW[passphrase])

if ($_POST[password] == $row[passphrase])
if( $_POST[ 'password' ] == $row[ 'passphrase' ] )
此外,如果在数组键周围使用引号,PHP将更快地处理语句:

if ($_POST['password'] == $row['passphrase'])
这是因为php解释代码的方式。在意识到这不是基于整数的索引之前,它必须到达文本“passphrase”的结尾。然后尝试将其作为关联数组中的键查找。这意味着在成功之前,它会有效地查找两次
$row['passphrase']

编辑:

我在这里有点偏离-我加入Philip的评论,以澄清这是错误的原因:


*“实际上情况更糟。如果您打开了E_通知,它会警告您它正在将未知常量转换为字符串值。这是不正确的,PHP只是试图帮助解决问题”*

变量$ROW未定义

改变

if ($_POST[password] == $ROW[passphrase])
if ($_POST[password] == $ROW[passphrase])

if ($_POST[password] == $row[passphrase])
if( $_POST[ 'password' ] == $row[ 'passphrase' ] )
此外,如果在数组键周围使用引号,PHP将更快地处理语句:

if ($_POST['password'] == $row['passphrase'])
这是因为php解释代码的方式。在意识到这不是基于整数的索引之前,它必须到达文本“passphrase”的结尾。然后尝试将其作为关联数组中的键查找。这意味着在成功之前,它会有效地查找两次
$row['passphrase']

编辑:

我在这里有点偏离-我加入Philip的评论,以澄清这是错误的原因:


*“实际上情况更糟。如果您打开了E_通知,它会警告您它正在将未知常量转换为字符串值。这是不正确的,PHP只是试图帮助解决问题”*

变量是
$row
,而不是
$row
,您需要在索引周围加引号

来自

if ($_POST[password] == $row[passphrase])
if( $_POST[ 'password' ] == $row[ 'passphrase' ] )

我还建议使用而不是变量是
$row
,而不是
$row
,您需要在索引周围加引号

来自

if ($_POST[password] == $row[passphrase])
if( $_POST[ 'password' ] == $row[ 'passphrase' ] )

我还建议使用php而不是

php区分大小写。将
$ROW[passphrase]
更改为
$ROW[passphrase]
否。将
$ROW[passphrase]
更改为
$ROW['passphrase']
发布的密码不应与数据库中的密码匹配,因为数据库值应始终是散列。用纯文本保存密码是一个非常糟糕的主意。php区分大小写。将
$ROW[passphrase]
更改为
$ROW[passphrase]
否。将
$ROW[passphrase]
更改为
$ROW['passphrase']
发布的密码不应与数据库中的密码匹配,因为数据库值应始终是散列。用纯文本保存密码是一个非常糟糕的主意,实际上更糟。如果启用了
E_NOTICE
,它将警告您正在将未知常量转换为字符串值。这是不正确的,PHP只是试图提供帮助。这一点很好。只是想让它简单易懂。一句话:坏主意。实际上更糟。如果启用了
E_NOTICE
,它将警告您正在将未知常量转换为字符串值。这是不正确的,PHP只是试图提供帮助。这一点很好。只是想让它简单易懂。一句话:坏主意。