在使用会话时,如何从PHP中的MySQL表中回显信息。
我使用会话将用户信息从一个页面传递到另一个页面。然而,我认为我可能使用了错误的概念来满足我的特殊需要。以下是我想做的:在使用会话时,如何从PHP中的MySQL表中回显信息。,php,mysql,session-variables,Php,Mysql,Session Variables,我使用会话将用户信息从一个页面传递到另一个页面。然而,我认为我可能使用了错误的概念来满足我的特殊需要。以下是我想做的: 当用户登录时,表单操作被发送到login.php,我在下面提供了它: login.php $loginemail = $_POST['loginemail']; $loginpassword = md5($_POST['loginpassword']); $con = mysql_connect("xxxx","database","pass"); if
$loginemail = $_POST['loginemail'];
$loginpassword = md5($_POST['loginpassword']);
$con = mysql_connect("xxxx","database","pass");
if (!$con)
{
die('Could not connect: ' .mysql_error());
}
mysql_select_db("db", $con);
$result = mysql_query("SELECT * FROM Members
WHERE fldEmail='$loginemail'
and Password='$loginpassword'");
//check if successful
if($result){
if(mysql_num_rows($result) == 1){
session_start();
$_SESSION['loggedin'] = 1; // store session data
$_SESSION['loginemail'] = fldEmail;
header("Location: main.php"); }
}
mysql_close($con);
session_start();
if($_SESSION['loggedin'] != 1){
header("Location: index.php"); }
$result = mysql_query("SELECT * FROM Members
WHERE fldEmail='$loginemail'
and Password='$loginpassword'");
//check if successful
if($result){
if(mysql_num_rows($result) == 1){
$row = mysql_fetch_array($result);
echo '<span class="backgroundcolor">' . $row['fldFullName'] . '</span><br />' ;
$result=mysql\u查询(“从成员中选择*
其中fldEmail=“$loginemail”
密码=“$loginpassword”);
//检查是否成功
如果($结果){
如果(mysql_num_rows($result)==1){
$row=mysql\u fetch\u数组($result);
回显“.$row['fldFullName']”。
;
我要指出的是,您使用的技术存在一些严重的安全漏洞,但为了避免关于安全性的严重争论,快速修复方法是将
login.php
中的$row
存储在会话变量中,然后由您访问。我很惊讶没有会话启动()
在login.php
顶部调用
不过,我强烈建议您考虑一种范式转换。您不应该保留一个变量来指示登录状态,而应该在会话状态下保留用户名和密码的加密版本。然后,在
main.php
的顶部,您每次都会从数据库中请求用户数据,并且您将拥有所有字段您还需要验证用户是否已登录。让我指出,您使用的技术存在一些严重的安全漏洞,但为了避免关于安全性的严重争论,快速修复方法是将login.php
中的$row
存储在会话变量中,然后由您访问。我很惊讶在login.php
顶部没有调用session\u start()
不过,我强烈建议您考虑一种范式转换。您不应该保留一个变量来指示登录状态,而应该在会话状态下保留用户名和密码的加密版本。然后,在main.php
的顶部,您每次都会从数据库中请求用户数据,并且您将拥有所有字段您还需要验证用户是否实际登录
我必须像在login.php中那样再次连接吗
是的,这就是PHP和mysql的工作方式
或者有没有其他方法可以简单地从MySQL表中回显用户名
不可以。要从mysql表中获取内容,必须先连接。
您可以将connect语句放入某个配置文件中,并将其包含到所有脚本中
如何在main.php上回显MySQL中“fldFullName”列中存储的用户全名
您需要一些标识符才能从数据库中获取正确的行。电子邮件可能会起作用,但强烈建议使用自动增量id字段,该字段将存储在会话中。
现在,您的后一个代码段中没有$loginemail和$loginpassword,是吗
还有一些关于代码的注释
任何标题(“位置:”;
语句后面必须跟有exit;
。否则将没有任何保护
任何要以引号放入查询的数据都必须使用mysql\u real\u escape\u string()
函数进行转义。没有例外
所以,事情会是这样的
include $_SERVER['DOCUMENT_ROOT']."/dbconn.php";
$loginemail = $_POST['loginemail'];
$loginpassword = md5($_POST['loginpassword']);
$loginemail = mysql_real_escape_string($loginemail);
$loginpassword = mysql_real_escape_string($loginpassword);
$query = "SELECT * FROM Members WHERE fldEmail='$loginemail' and Password='$loginpassword'";
$result = mysql_query($query) or trigger_error(mysql_error().$query);
if($row = mysql_fetch_assoc($result)) {
session_start();
$_SESSION['userid'] = $row['id']; // store session data
header("Location: main.php");
exit;
}
和main.php部分
session_start();
if(!$_SESSION['userid']) {
header("Location: index.php");
exit;
}
include $_SERVER['DOCUMENT_ROOT']."/dbconn.php";
$sess_userid = mysql_real_escape_string($_SESSION['userid']);
$query = "SELECT * FROM Members WHERE id='$sess_userid'";
$result = mysql_query($query) or trigger_error(mysql_error().$query);
$row = mysql_fetch_assoc($result));
include 'template.php';
我必须像在login.php中那样再次连接吗
是的,这就是PHP和mysql的工作方式
或者有没有其他方法可以简单地从MySQL表中回显用户名
不可以。要从mysql表中获取内容,必须先连接。
您可以将connect语句放入某个配置文件中,并将其包含到所有脚本中
如何在main.php上回显MySQL中“fldFullName”列中存储的用户全名
您需要一些标识符才能从数据库中获取正确的行。电子邮件可能会起作用,但强烈建议使用自动增量id字段,该字段将存储在会话中。
现在,您的后一个代码段中没有$loginemail和$loginpassword,是吗
还有一些关于代码的注释
任何标题(“位置:”;
语句后面必须跟有exit;
。否则将没有任何保护
任何要以引号放入查询的数据都必须使用mysql\u real\u escape\u string()
函数进行转义。没有例外
所以,事情会是这样的
include $_SERVER['DOCUMENT_ROOT']."/dbconn.php";
$loginemail = $_POST['loginemail'];
$loginpassword = md5($_POST['loginpassword']);
$loginemail = mysql_real_escape_string($loginemail);
$loginpassword = mysql_real_escape_string($loginpassword);
$query = "SELECT * FROM Members WHERE fldEmail='$loginemail' and Password='$loginpassword'";
$result = mysql_query($query) or trigger_error(mysql_error().$query);
if($row = mysql_fetch_assoc($result)) {
session_start();
$_SESSION['userid'] = $row['id']; // store session data
header("Location: main.php");
exit;
}
和main.php部分
session_start();
if(!$_SESSION['userid']) {
header("Location: index.php");
exit;
}
include $_SERVER['DOCUMENT_ROOT']."/dbconn.php";
$sess_userid = mysql_real_escape_string($_SESSION['userid']);
$query = "SELECT * FROM Members WHERE id='$sess_userid'";
$result = mysql_query($query) or trigger_error(mysql_error().$query);
$row = mysql_fetch_assoc($result));
include 'template.php';
是的,您必须为每个页面加载重新连接到数据库。只需将该代码放在一个单独的文件中,并使用PHP函数将其包括在内
您遇到的另一个问题是,main.php中不存在变量$loginemail
和$loginpassword
。您将用户的电子邮件地址存储在$\u会话数组中,因此只需重新加载用户信息:
$safe_email = mysql_real_escape_string($_SESSION['loginemail']);
$result = mysql_query("SELECT * FROM Members
WHERE fldEmail='$safe_email'");
此外,您的代码允许SQL注入攻击。在将任何变量插入SQL查询之前,始终使用该函数并将变量用引号括起来(如上面的代码段所示)。是的,您必须重新连接到