session - $_SESSION 变量在查询中使用
问题描述
我花了将近两天的时间在这个圈子上转。
我似乎很难在任何查询中使用 $_SESSION 或 $_POST 作为字符串或将它们转换为要使用的字符串。
我正在使用一种简单的哈希方法登录到一个站点。
从脚本中提取是
<?php
session_start();
echo "******Running Authenticate<br>";
echo "data submitted<br>".$_POST['site_login']."<br>".$_POST['site_password']."<br><br>";
$SiteLogin = $_POST['site_login']
$_SESSION['site_login'] = $_POST['site_login'];
$_SESSION['site_password'] = $_POST['site_password'];
$_SESSION['session_id'] = session_id();
$_SESSION['Now_val'] = date('Y-m-d H:i:s');
//include 'showallvars.php';
include 'dbconfig.php';
// Prepare our SQL
if ($stmt = $con->prepare('SELECT site_index, site_password FROM web_sites WHERE site_login = ?')) {
// Bind parameters (s = string, i = int, b = blob, etc), hash the password using the PHP password_hash function.
$stmt->bind_param('s', $_POST['site_login']);
$stmt->execute();
$stmt->store_result();
// Store the result so we can check if the account exists in the database.
if ($stmt->num_rows > 0) {
$stmt->bind_result($id, $password);
$stmt->fetch();
echo "account exists";
}
else
{
header('Location: badindex.php');
}
if (password_verify($_POST['site_password'], $password)) {
// Verification success! User has loggedin!
echo "password good";
}
else
{
header('Location: badindex.php');
}
}
$_SESSION['loggedin'] = TRUE;
?>
效果很好
但是记录中有另一个字段('site_name')我想结转。这应该很容易!
并且有十几种方法可以做到,例如“标准”示例类似于
$name = $mysqli->query("SELECT site_name FROM web_sites WHERE site_login = 'fred'")->fetch_object()->site_name;
这工作正常,但无论我如何尝试 - 连接或或......我无法让 $_SESSION['site_login'] 或 $_POST['site_login'] 替换'fred'。似乎添加了空白。
协助还是指导?
解决方案
应该可以像执行以下操作一样简单:
所以:
if ($stmt = $con->prepare('SELECT site_index, site_password
FROM web_sites WHERE site_login = ?')) {
变成:
if ($stmt = $con->prepare('SELECT site_index, site_password, site_login
FROM web_sites WHERE site_login = ' . $SiteLogin)) {
请注意,直接将 $SiteLogin 解析为查询是不好的做法,因为现在有人可以 SQL 注入并破解您的网站。他们需要做的就是使用您的表单并找出哪个字段负责 $SiteLogin。您需要转义您的 $SiteLogin。假设 Mysqli,它会变成:
if ($stmt = $con->prepare('SELECT site_index, site_password, site_login
FROM web_sites WHERE site_login = ' . $con->real_escape_string($SiteLogin))) {
推荐阅读
- reactjs - 我正在尝试在“是”复选框中导航到另一个页面。我收到错误“TypeError:无法读取未定义的属性‘push’”
- highcharts - Highchart:添加自定义按钮以显示/隐藏注释?
- javascript - 在应用程序中的何处放置安全标头?
- node.js - nodemon:在heroku上部署时权限被拒绝
- javascript - 输入达到一定长度后,我的计算器循环为什么会失败?
- java - 如何在不覆盖现有数据的情况下添加数据?
- requirejs - microsoftTeams 未定义
- sql - 在“in”SQL Server 中计数
- java - Tomcat7 未在 CentOS 上启动
- python - 使用 Python 解析 PDF 文本的 Tika 无法处理垂直文本。有任何想法吗?