繁体   English   中英

我需要从mysql_query转换为PDO的帮助

[英]I need help converting from mysql_query to PDO

我想使我的网站尽可能安全,所以我需要将所有内容转换为PDO。 我已经成功完成了一些操作,但是在“登录”页面上遇到了一个障碍。

这是我的代码:

<?php
//signin.php
include 'connect.php';
include 'header.php';
session_start();

echo '<h3>Sign in</h3>';

//first, check if the user is already signed in. If that is the case, there is no need to display this page
if(isset($_SESSION['signed_in']) && $_SESSION['signed_in'] == true)
{
    echo 'You are already signed in, you can signout if you want.';
}
else
{
    if($_SERVER['REQUEST_METHOD'] != 'POST')
    {
        echo '<div class="formdivs" id = "logindiv"><form class = "homeforms" method="post" action="">
            <label>Username:<input class="forminput" id="smallinput" type="text" name="user_name" /></label>
            <label>Password:<input class="forminput" id="smallinput" type="password" name="user_pass"></label>
            <input class = "formbutton" type="submit" name = "button" value = "Sign In!"/>
         </form></div>';


    }
    else
    {

        $errors = array();

        if(!isset($_POST['user_name']))
        {
            $errors[] = 'Missing Username.';
        }

        if(!isset($_POST['user_pass']))
        {
            $errors[] = 'Missing Password.';
        }

        if(!empty($errors))
        {
            echo 'Errors';
            echo '<ul>';
            foreach($errors as $key => $value)
            {
                echo '<li>' . $value . '</li>';
            }
            echo '</ul>';
        }
        else
        {    

//THIS IS WHERE MY PDO PROBLEM BEGINS-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|


        $password = sha1($_POST['user_pass']);
        $sql= "SELECT * FROM users WHERE user_name = :username AND user_pass = :password"; 
        $stmt = $pdo->prepare($sql);
        $stmt->bindParam(':username', $_POST['user_name']); 
        $stmt->bindParam(':password', $password);
        $stmt->execute();
        $stmt->setFetchMode(PDO::FETCH_ASSOC);

            if(true)
            {
                if(true)
                {

                    $_SESSION['signed_in'] = true;


                    while($row = $stmt->fetch())
                    {
                        $_SESSION['user_id']    = $row['user_id'];
                        $_SESSION['user_name']  = $row['user_name'];
                        $_SESSION['user_level'] = $row['user_level'];
                    }
                    header('Location: /forum.php');
                    exit;
                }
            }
        }
    }
}

include 'footer.php';
?>

我的页面加载表单,但是当我按下我的提交按钮时,它变成空白(除了我的页眉和页脚),这告诉我我的php错误。 (明显)

我希望我的页面能够运行其错误检查(以查看两个框是否都有输入),然后在按下按钮时执行。 我按下按钮后,如果有一个错误(在数据库关闭等情况下),我希望它回显SQL错误,然后如果数据库中不存在用户名或密码,也要回显SQL错误。 (即select语句不返回任何内容)。

目前,我已经硬编码了“ admin”和“ password”,因为我认为我的bindparams语句不起作用。

编辑:我还应该指出,我所有的错误检查均不起作用。 如果我尝试使用空框运行它,则仍然不会显示任何内容。

编辑:解决方案:当我应该使用$ DBH时,我正在使用$ pdo。 我没有意识到php手册中的$ pdo变量应该是我在connect.php文件中创建的实际实例。 谢谢大家的帮助

您需要在SQL字符串中加冒号

$sql= "SELECT * FROM users WHERE user_name = :username AND user_pass = :userpass"; 
$stmt = $pdo->prepare($sql);
$stmt->bindParam(':username', $_POST['user_name']); 
$stmt->bindParam(':userpass', $password);
$stmt->execute();

不需要循环,因为它是一条记录:

$stmt->setFetchMode(PDO::FETCH_ASSOC);
$row = $stmt->fetch();
//set your session
$_SESSION['user_id']    = $row['user_id'];
$_SESSION['user_name']  = $row['user_name'];
$_SESSION['user_level'] = $row['user_level'];

保持简单

 if(isset($_POST['submit']){
    //form submitted, checking errors
    $errors = array();

    if(!isset($_POST['user_name']))
    {
        $errors[] = 'Missing Username.';
    }

    if(!isset($_POST['user_pass']))
    {
        $errors[] = 'Missing Password.';
    }

    if(!empty($errors))
    {
        echo 'Errors';
        echo '<ul>';
        foreach($errors as $key => $value)
        {
            echo '<li>' . $value . '</li>';
        }
        echo '</ul>';
        exit();//error! let's exit
    }else{
      //No errors run the PDO query here
    }

}else{
   //no submission display the form
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM