Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.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
无法让PHP登录正常工作,以前可以正常工作,但稍有改动_Php_Mysql_Forms_Login_Pdo - Fatal编程技术网

无法让PHP登录正常工作,以前可以正常工作,但稍有改动

无法让PHP登录正常工作,以前可以正常工作,但稍有改动,php,mysql,forms,login,pdo,Php,Mysql,Forms,Login,Pdo,我做了一个工作完美的登录,但现在我复制和编辑它的原始工作在我的另一个网页项目和它的jsut dosnt接缝想要工作,任何帮助将不胜感激 以下是有效的登录名: <?php session_start(); include('../includes/connect-db.php'); if (isset($_SESSION['logged_in'])) { ?> <html> <head> </head> <bod

我做了一个工作完美的登录,但现在我复制和编辑它的原始工作在我的另一个网页项目和它的jsut dosnt接缝想要工作,任何帮助将不胜感激

以下是有效的登录名:

<?php

session_start();

include('../includes/connect-db.php');

if (isset($_SESSION['logged_in'])) {
?>

<html>
    <head>
    </head>
    <body>
        <div>Message would go here</div>
    </body>
</html>

<?php
} else {
    if (isset($_POST['username'], $_POST['password'])) {
        $username = $_POST['username'];
        $password = $_POST['password'];

        if (empty($username) or empty($password)) {
            $error = 'All fields are required!';
        } else {
            $query = $pdo->prepare('SELECT * FROM users WHERE user_username = ? AND user_password = ?');

            $query->bindValue(1, $username);
            $query->bindValue(2, $password);

            $query->execute();

            $num = $query->rowCount();

            if ($num == 1) {
                $_SESSION['logged_in'] = true;
                header('Location: index.php');
                exit();
            } else {
                $error = 'Incorrect details!';
            }
        }
    }
?>

<html>
    <head>
    </head>
    <body>
        <div>Login form would go here</div>
    </body>
</html>

<?php } ?>
在主题中,我想要我拥有的内容:

<?php echo($content); ?>

在登录php文件中,我将把它放入php主题文件中:

$content = '<form action="index.php" method="post" autocomplete="off">
    <input type="text" name="username" placeholder="Username" />
    <input type="password" name="password" placeholder="Password" />
    <input type="submit" value="Submit" />
</form>
<?php if (isset($error)) { ?>
    <small style="color:#aa0000"><?php echo($error); ?></small>
<?php } ?>';
$content='1!'
';
我希望有人能帮忙,希望我错过了一些小东西

谢谢你的帮助,如果还需要什么,请告诉我

亲切问候,, 海登。

尝试更换

$num = $query->rowCount();

更新

刚刚注意到这个

if (isset($_POST['username'], $_POST['password'])) {
应该是

if( isset($_POST['username']) && isset($_POST['password']) ) {
我想在这里添加一个else条件来显示某个描述的错误消息

更新2

对connect.php稍加修改

try {
    // create a new instance of a PDO connection
    $pdo = new PDO('mysql:host=localhost;dbname=techbite', 'root', '');
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $e) {
    // if the connection fails, display an error message
    echo 'ERROR: ' . $e->getMessage();
}

它没有显示错误,因为

$content = '<form action="index.php" method="post" autocomplete="off">
    <input type="text" name="username" placeholder="Username" />
    <input type="password" name="password" placeholder="Password" />
    <input type="submit" value="Submit" /> </form>
<?php if (isset($error)) { ?>
    <small style="color:#aa0000"><?php echo($error); ?></small>
<?php } ?>';
$content='1!'
';
都只是一个字符串,php解释器永远不会解析该字符串中的
部分。查看登录页面的页面源代码,您应该可以在那里看到它们

如果设置使用此$content变量和theme-select.php文件,请尝试将其更改为:

$content = '<form action="index.php" method="post" autocomplete="off">
    <input type="text" name="username" placeholder="Username" />
    <input type="password" name="password" placeholder="Password" />
    <input type="submit" value="Submit" /> </form>';
if (isset($error)) {
    $content .= '<small style="color:#aa0000">'.$error.'</small>';
}
$content='1!'
';
如果(isset($error)){
$content.=''.$error';
}
至于它为什么不登录,这是一个愚蠢的问题,但是你是否在数据库中创建了一个名为admins的表以及一个设置了用户名和密码的记录?

我修复了它! 我知道它是如此的小和简单,是表单操作被设置为错误的文件名,它被设置为index.php而不是login.php


谢谢大家的帮助!:)

请注意:您真的在数据库中以明文形式存储管理员密码吗?这不是一个好的做法!只要在谷歌上搜索“为什么不用纯文本存储密码”,你就会发现很多原因。在您可以找到您应该如何做:-)嗨,DaveG,是的,我知道数据库中的密码,因为这是本地的,在一个WAMP服务器上,我只是用它来让它工作,当它在我的托管服务器上时,我会使它安全,但感谢您的提醒!)这是编程而不是绗缝…嗨,Adrock,谢谢你的回答,我尝试过替换它,但它仍然在做同样的事情,但是,有什么想法吗?除了我的更新,如果你只运行代码来查询数据库,那行得通吗?嗯,没有,它不起作用或提供任何数据!我刚刚试着将我的登录名中的所有代码复制到这个web项目中(并更改了目录名和数据库表名以使用这个项目),dosnt seam也可以,我确信它的连接很好,但是以防万一,这里是数据库连接:Iv将其添加到主要问题:)我在数据库连接中添加了一部分以捕获错误Hi Luke,这是可以理解的,但是当我将其作为html表单而不是字符串进行测试时,我得到了相同的结果,没有错误,没有登录。您是否看到$content=''中包含php的
;我确实看到了php标记,但是在标准html表单中没有php标记。正如我所说,我不能提供关于标准html表单的建议,因为您还没有编写代码。如果您在html源代码中看到php标记,它们不会被解释,这就是为什么您当前没有看到登录错误。你试过修理吗?“无登录”部分是一个单独的错误,您是否检查过admins表是否存在?表单与
$content=''中的内容完全相同所以它应该是
if( isset($_POST['username']) && isset($_POST['password']) ) {
try {
    // create a new instance of a PDO connection
    $pdo = new PDO('mysql:host=localhost;dbname=techbite', 'root', '');
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $e) {
    // if the connection fails, display an error message
    echo 'ERROR: ' . $e->getMessage();
}
$content = '<form action="index.php" method="post" autocomplete="off">
    <input type="text" name="username" placeholder="Username" />
    <input type="password" name="password" placeholder="Password" />
    <input type="submit" value="Submit" /> </form>
<?php if (isset($error)) { ?>
    <small style="color:#aa0000"><?php echo($error); ?></small>
<?php } ?>';
$content = '<form action="index.php" method="post" autocomplete="off">
    <input type="text" name="username" placeholder="Username" />
    <input type="password" name="password" placeholder="Password" />
    <input type="submit" value="Submit" /> </form>';
if (isset($error)) {
    $content .= '<small style="color:#aa0000">'.$error.'</small>';
}