【问题标题】:Session variable not working [PHP & MySQL]会话变量不起作用 [PHP 和 MySQL]
【发布时间】:2017-09-07 13:53:30
【问题描述】:

我有一个表 (news) 有不同的列名。使用我的代码,可以通过文本帖子将包含这些内容的新行添加到数据库中,然后在我的网站中回显。

但是,就在最近,它停止了工作,我注意到每个列名都会正常更新,除了定义用户发表的帖子 (idUSERS) 的列名。它最近刚刚停止工作,当我运行代码时,网站没有输出错误。我使用$_SESSION["idUSERS"] 来获取当前登录用户的ID

<?php

session_start();

    $servername = "localhost";
    $username = "root";
    $password = "";
    $dbname = "intranet";

    // Create connection

    $conn = new mysqli($servername, $username, $password, $dbname);

    // Check connection

    if ($conn->connect_error) {
        die("Connection failed: Please try again later" . $conn->connect_error);
    } 

//$fecha = date("d-m-y");
$fecha = $_POST['news_date'];

    $sql = "INSERT INTO news (title, description, date ,tipo, idUSERS)
    VALUES ('".$_POST['txtTitle']."', '".$_POST['txtNews']."', '".$fecha."', '".$_POST['cboTipo']."', '".$_SESSION["idUSERS"]."')";


    $result =  $conn->query($sql);

    $conn->close();

header("Location: DelkoINT_home.php");


?>

数据库参考。图片:https://i.stack.imgur.com/D4y94.png

<?php

session_start();
    $servername = "localhost";
    $username = "root";
    $password = "";
    $dbname = "intranet";

// Create connection

    $conn = new mysqli($servername, $username, $password, $dbname);

// Check connection

    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    } 

$sql = "Select * from login_info where loginUsername ='".$_POST['username']."' and loginPassword ='".$_POST['password']."'";

$result =  $conn->query($sql);

        if ($result ->num_rows >0) {
            $row= $result->fetch_assoc();
            $_SESSION["idLOGIN"]= $row["idLOGIN"];
            $_SESSION["idUSERS"]= $row["idUSERS"];
            $_SESSION["admin"]= $row["user_type"];
            $_SESSION["surname"]= $row["userSurname"];
            header("Location: intranet/DelkoINT_home.php");
        }
        else {
            echo "<font color='red'>The username or password is incorrect!</font><br/ > 
            <a href = 'Delko_login.php'>Click here to go back</font></a>";
        }


    $conn->close(); 

?>

MySQL写作页面上的会话数据var_dump

array(4) { 
         ["idLOGIN"]=> string(1) "2" 
         ["idUSERS"]=> NULL 
         ["admin"]=> string(1) "1" 
         ["surname"]=> NULL 
}

【问题讨论】:

  • 您对 SQL 注入持开放态度。由于您使用的是 mysqli,因此请利用 prepared statementsbind_param这将解决可能出现的任何令人讨厌的引用问题。
  • 不管是不是学校项目。您可以忽略安全方面,而是利用不必担心引用问题的优势:不再确保引用正确并且您输入的数据没有引起整个查询的引用。
  • @FrancoSoto 您越早了解安全性的重要性就越好。即使这是一个学校项目,您仍然可以学到很多东西——实际上,学校是学习养成正确做事习惯的最佳场所。因为这是一个学校项目而忽略安全问题不是一个聪明的主意。
  • 你能显示会话在哪里保存idUSERS 吗?
  • 调试时要做的第一件事:启用错误报告!直接在&lt;?php后面加上error_reporting(E_ALL); ini_set('display_errors', 1);,或许能给你一点线索。

标签: php mysql session


【解决方案1】:

我能够解释的是,您在格式化查询请求和为它们分配值的方式上存在问题。 你应该按以下方式编写sql语句

     $sql = "INSERT INTO booking ( EMAIL, PASENGER_NAME,  
     CONTACT_NUMBER, UNIT_NUM, STREET_NUM, STREET_NAME, SUBURB, 
     DESTINATION_SUBURB, PICK_DATE_TIME, BOOKING_DATE_TIME  ) 
             VALUES ( '{$_SESSION['EMAIL']}', '$Passenger_Name', 
            '$Phone', '$Unit_num', '$Street_num', '$Street_name', 
            '$Suburb', '$Dest_Suburb','$Pickup_Date_Time',
            '$current_time' )";

我的意思是你写的 SQL 语句不带双引号,特别是在你定义会话变量的地方。而是写成{$_SESSION['EMAIL']}.. 如果你使用$_POST格式,其他人也一样,那么你可以写成{$_POST['txtTitle']}{$_POST['txtNews']}{$_SESSION['idUSERS']}。还要检查您是否在上一页上定义了会话变量,例如$_SESSION['idUSERS']= $_POST['idusers'],并且您使用的是写格式的字母,例如小写和大写。只要这样做,我相信你一定会解决你的问题。

如果你也遇到了问题,请告诉我,那么在这种情况下,我会告诉你一个技巧,它可以帮助你找到代码中的错误点。

【讨论】:

    猜你喜欢
    • 2013-11-10
    • 2015-09-30
    • 2012-08-17
    • 2014-05-16
    相关资源
    最近更新 更多