管理员登录表单

时间:2013-01-12 19:15:02

标签: php html

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

我遇到了一些错误:

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中,然后返回。然后我想从用户表中获取一个密钥(“用户名”和“密码”),并将它们与上面的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';
?>

任何想法都将不胜感激!

3 个答案:

答案 0 :(得分: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;

你试图将一个数组设置为一个通过函数运行的元组,并且该方法似乎不仅仅是设置键和值。

答案 1 :(得分:1)

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

此外,您正在检查查询的用户名和密码,然后您只需要知道它是返回结果还是不要。检查行数:)

答案 2 :(得分: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';
            ?>
相关问题