0

我正在尝试构建一个登录表单,以便我在数据库中指定的管理员可以将图像插入我的数据库。

我有一些错误:

1)我<?php echo $_SERVER['PHP_SELF']; ?>用来调用自己(调用Login.php),所以它会加载它下面的PHP代码(在同一个文件中)。每当我按下提交时,它不会转到 php 代码中的指定标头,而是返回到 homepage.php。

Login.php:管理员登录表单 html

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<table>
    <tr>
        <td>Username: </td><td><input type="text" name="username"></td>
    </tr>
    <tr>
        <td>Password: </td> <td><input type="text" name="pw"></td>
    </tr>
</table>
<br />
<input type="submit" value="Log in">
</center>

2) 第二个问题是...查看 php 代码,我试图找到一个函数,它可以让我获取关联数组的特定键。例如,我运行数据库查询并将其作为关联数组存储在 $result 中,然后返回。然后我想从 users 表中获取一个键(“用户名”和“密码”)并将它们与上述 html 表单的输入进行比较。

我试过使用array_keys,但这需要一个数组,而不是一个对象。所以我投了它,它仍然不起作用。

print_r(array_keys($userResult, "username"));用来看看它是否会打印我想要的密钥。

Login.php php代码

<?php 

$username = isset($_POST['username']) ? $_POST['username'] : "";
$password = isset($_POST['pw']) ? $_POST['pw'] : "";

$userResult = verify($username, $password);
$array = (array)$userResult; //cast to array

print_r(array_keys($userResult, "username"));

if(array_keys($userResult, "username") == "dan" && array_keys($userResult, "password") == "12345") {
    header("Location: ?action=admin");
}
else {
    echo "<center>Incorrect credentials</center>";
}

function verify($user, $pw) {
    include './scripts/dbconnect.php';

    $result = $mysqli->query("SELECT username, password FROM users WHERE username='" . $user . "' AND password='" . $pw . "'"); 

    return $result; 
}

include 'include/footer.php';
?>

任何想法将不胜感激!

4

3 回答 3

1

对于第一部分,如果您只想刷新页面,您可以这样做。

<form action='' method=''>

否则,硬编码从 login.php 到处理文件的路径可能更容易。

对于第二部分,我认为您错误地创建了数组。

$array = array();
$array[$username] = $password; // $username is the key and $password is the value aka.. array ($username => $password )

我不知道为什么,但似乎

$array = (array)$userResult;

您正在尝试将数组设置为通过函数运行的元组,并且该方法似乎比仅设置键和值要清晰得多。

于 2013-01-12T19:23:44.283 回答
1

您可以将操作保留为空白action="",它将发布在同一页面中。我不记得$_SERVER['PHP_SELF']内部/外部返回的内容,但这一定是您的问题。

此外,您已经在查询中检查用户名和密码,那么您只需要知道它是否返回结果。检查行数:)

于 2013-01-12T19:25:56.680 回答
0

谢谢nimlhug,让它像这样工作......忘记了我检查数据库的主要原因是实际查看是否有匹配的结果......不知道为什么我要再次检查以查看是否有匹配我本来可以用num_rows == 1的,哈哈。

                <?php
            include 'include/header.php';
            ?>
            <center>

            <h2>Admin Log in</h2>
            <br/>

            <form action="" method="post">
                <table>
                    <tr>
                        <td>Username: </td><td><input type="text" name="username"></td>
                    </tr>
                    <tr>
                        <td>Password: </td> <td><input type="text" name="pw"></td>
                    </tr>
                </table>
                <br />
                <input type="submit" value="Log in">
                </center>
            <?php 

            $username = isset($_POST['username']) ? $_POST['username'] : "";
            $password = isset($_POST['pw']) ? $_POST['pw'] : "";


            if(verify($username, $password) == 1) {
                header("Location: ?action=admin");
            }
            else {
                echo "<center>Incorrect credentials</center>";
            }

            function verify($user, $pw) {
                include './scripts/dbconnect.php';

                $result = $mysqli->query("SELECT username, password FROM users WHERE username='" . $user . "' AND password='" . $pw . "'"); 

                return $result->num_rows;
            }

            include 'include/footer.php';
            ?>
于 2013-01-13T17:55:11.327 回答