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