Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/86.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_Html_Sql - Fatal编程技术网

Php 在索引页上实现登录

Php 在索引页上实现登录,php,html,sql,Php,Html,Sql,我正在尝试在我的索引页中实现登录。代码运行时没有错误。我的问题是用户提交后,他们没有登录。我很感谢大家的评论,我是stackoverflow新手,而不是编码新手,所以我仍在努力了解社区及其工作方式 <?php session_start() if($_POST['submit']=='Login') { //Login form submitted?? $err = array(); //Hold errors if(!$_POST['username'] || !$_POST[

我正在尝试在我的索引页中实现登录。代码运行时没有错误。我的问题是用户提交后,他们没有登录。我很感谢大家的评论,我是stackoverflow新手,而不是编码新手,所以我仍在努力了解社区及其工作方式

<?php
session_start()
if($_POST['submit']=='Login')
{
 //Login form submitted??

$err = array();
 //Hold errors


if(!$_POST['username'] || !$_POST['password'])
    $err[] = 'All the fields must be filled in!';

if(!count($err))
{
    $_POST['username'] = mysql_real_escape_string($_POST['username']);
    $_POST['password'] = mysql_real_escape_string($_POST['password']);


     //Data escaping

    $row = mysql_fetch_assoc(mysql_query("SELECT id,usr FROM tz_members WHERE usr='{$_POST['username']}' AND pass='".md5($_POST['password'])."'"));

    if($row['usr'])
    {
         //If kosher, Login

        $_SESSION['usr']=$row['usr'];
        $_SESSION['id'] = $row['id'];


         //Session storing data

        setcookie('tzRemember');
    }
    else $err[]='Wrong username and/or password!';
}
if($err)
$_SESSION['msg']['login-err'] = implode('<br />',$err);
 //Save errors in session

header("Location: login.php/");
exit;
}
您的代码中有许多错误(对我来说)。首先,如果不打开session_start(),sessions将永远无法工作。第二,“如果”的条件我认为是不正确的,因为没有比较法。我希望它能帮助你

<?php
    if($_POST['submit']=='Login')
    {
     //Login form submitted??

    $err = array();
    // Hold errors


    if(!$_POST['username'] || !$_POST['password'])
        $err[] = 'All the fields must be filled in!';

    if(!count($err))
    {
        $_POST['username'] = mysql_real_escape_string($_POST['username']);
        $_POST['password'] = mysql_real_escape_string($_POST['password']);


         //Data escaping

        $row = mysql_fetch_assoc(mysql_query("SELECT id,usr FROM tz_members WHERE usr='{$_POST['username']}' AND pass='".md5($_POST['password'])."'"));

        if(!empty($row['usr']))
        {
           //  If kosher, Login
            session_start();
            $_SESSION['usr']=$row['usr'];
            $_SESSION['id'] = $row['id'];


             //Session storing data

            setcookie('tzRemember');
        }
        else $err[]='Wrong username and/or password!';
    }
    if(!empty($err)){
    session_start();
    $_SESSION['msg']['login-err'] = implode('<br />',$err);
    }
     //Save errors in session

    header("Location: login.php/");
    exit;
    }?>

尽管你没有提出一个明确的问题,而只是要求进行代码审查(这样做会更好),但我的观点是

你有几个明显的问题

  • 首先,就像我说的,你真的需要开始你的会话,否则你的错误报告就没有什么用处了
  • 其次,你对所有类型的恶意攻击都持开放态度,这会破坏你的安全登录
虽然并非详尽无遗,但下面包含了一些建议,有助于提高安全性

  • 将变量从后全局变量中分离出来-使其在输入中更加明显
  • 使用PDO数据库连接,因为这是比mysql_connect更安全的数据库连接方法,尤其是在使用绑定参数防止sql注入时(请参阅讨论)
  • 密码 下面是一个快速准备,希望能为您指出正确的方向,并提高一些安全性

        // Start the session for storing your errors
        session_start();
    
        // Check that the button was clicked on the form
        if (isset($post)) {
    
        // Array for storing any errors
        $err = array();
    
        // Extract details from POST global
        $_username = $_POST['username'];
        $_password = $_POST['password'];
    
        /*
        You may want to consider some filtering here
         */
        
        // Did the user fill in the username field?
        if (empty($_username)) {
            $err['username'] = "User name not provided";
        }
    
        // Did the user fill in the password field?
        if (empty($_password)) {
            $err['password'] = "Password not provided";
        } else {
            // Yes so hash it for the database check
            $hashedPassword = md5($_password);
        }
    
        if (empty($err)) {
    
            // Establish database connection
            try {
                $dsn = "mysql:host{$host};port={$port};dbname={$database}";
                $connection = new PDO($dsn, $dbUsername, $dbPassword, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
            } catch (PDOException $e) {
                throw new \Exception("Unable to connect to the Database"); 
            }
            
            // Build SQL query and run on PDO connection
            $sql = "SELECT id, usr FROM tz_members WHERE usr = :username AND pass = :hashedPassword";
            
            try {
                $stmt = $connection->prepare($sql);
                // Bid your parameters to prevent sql injection
                $stmt->bindParam(':username', $_username);
                $stmt->bindParam(':hashedPassword', $hashedPassword);
                $stmt->execute();
            } catch (PDOException $e) {
                throw new Exception("Error with executing query: {$e->getMessage()}");   
            }
            
            // Fetch your results 
            $row = $stmt->fetch(PDO::FETCH_ASSOC);
    
            if (!empty($row)) {
    
                // Fill the session up with users details
                $_SESSION['id'] = $row['id'];
                $_SESSION['usr'] = $row['usr'];
    
                // Head back to the login page - surely you wan to head to your protected page?
                header("Location: login.php/");
                return;
            }
    
            // Login failed
            $err['login'] = "Wrong username and/or password!";
        }
    
        // Head back to the login page
        $_SESSION['errors'] = $err;
        header("Location: login.php/");
        return;
    }
    
    进一步阅读 下面是一些到图坦卡蒙的链接,可能会有所帮助

  • 这是一个图坦卡蒙的优秀杰弗里的方式使用
  • 并研究更详细的方式来保护您的表单

  • 我希望这能有所帮助,如果有什么让你问更多的问题。

    所以。。。你有什么错误/问题?提交后,用户没有登录。我觉得我忽略了一些简单的事情。我已经推迟了一段时间。你可以尝试在你的评论前面加上
    /
    我的评论前面加了第9行和第10行,我想你的意思是指$\u POST而不是$POST非常感谢你的有用评论。我是一个新手,仍然在学习网站的礼仪。谢谢你的建议。。