0

我正在尝试制作一个适用于 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
    }
}
?>
4

2 回答 2

2

变量是$row,不是$ROW,并且您需要在索引周围加上引号

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

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

我还建议使用mysqli_fetch_assoc而不是mysqli_fetch_array

于 2013-05-17T21:56:29.920 回答
1

变量 $ROW 未定义。

改变

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

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

此外,如果您在数组键周围使用引号,PHP 将更快地处理您的语句:

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

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

编辑:

我在这里有点偏离 - 我正在添加 Philip 的评论以澄清为什么这是错误的:

*“实际上更糟。如果你打开了 E_NOTICE,它会警告你它正在将一个未知的常量转换为字符串值。这是不正确的,PHP 只是想帮忙”*

于 2013-05-17T21:55:43.193 回答