Session $\查询中使用的会话变量

Session $\查询中使用的会话变量,session,string,Session,String,我花了将近两天的时间在这件事上兜圈子 我似乎很难在任何查询中使用$\u SESSION或$\u POST作为字符串,或者将它们转换为字符串以供使用 我使用一种简单的哈希方法登录到一个站点 从脚本中提取的内容是 <?php session_start(); echo "******Running Authenticate<br>"; echo "data submitted<br>".$_POST['site_login']."<br>".$_PO

我花了将近两天的时间在这件事上兜圈子

我似乎很难在任何查询中使用$\u SESSION或$\u 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;


?>
那很好 但无论我如何尝试-连接或。。。我无法获取$\u SESSION['site\u login']或$\u POST['site\u login']来替换'fred'。 似乎添加了空白


帮助或指导?

应尽可能简单地执行以下操作:

因此:

变成:

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))) {

谢谢你的回答,但当我看到你答案中的括号时,我突然想到了这一切。我忘记了PHP在方括号中有问题

 $sql = ("SELECT site_name FROM web_sites WHERE site_login = '". $_SESSION{'site_login'} ."' LIMIT 1");
我知道这很容易


您对注入的评论当然是正确的,但这是一段经过编辑的代码摘录,$SiteLogin只是作为“临时工作变量(如果需要)”添加进来的。

请不要发布多个相互矛盾的答案。猜测和错误发现应该被编辑到你的问题中,你应该发布一个答案,详细说明你的解决方案。您可以根据需要编辑问题和答案以更正它们。你应该考虑一下,这不是PHP问题吗?如果我的答案对你有帮助的话,你至少应该投票支持我的答案。抱歉——我在一阵热情中成功地用蓝屏显示了自己!
if ($stmt = $con->prepare('SELECT site_index, site_password, site_login 
    FROM web_sites WHERE site_login = ' . $con->real_escape_string($SiteLogin))) {
 $sql = ("SELECT site_name FROM web_sites WHERE site_login = '". $_SESSION{'site_login'} ."' LIMIT 1");