繁体   English   中英

将 MYSQL 数据放入会话变量以传递到下一页

[英]Place MYSQL data into session variable to pass to next page

我是 PHP 世界的新手,并且已经研究了好几天,但似乎被卡住了。

我试图建立一个小型网站作为客户帐户区域,后端有一个 MySQL 数据库。

我有一个带有登录表单的网页,用户可以在其中输入用户名和密码。 有一个 php 脚本可以检查 SQL 数据库以查看是否匹配,如果匹配则将它们重定向到帐户页面。 我在网上找到了一个示例脚本,我用来创建这个脚本,这部分效果很好。

我试图更进一步,并在网页上显示匹配的 SQL 记录中的数据。 从我所做的研究来看,最好的方法是将会话变量传递到帐户页面。

这是我的设置

第 1 页 - index.php 这是一个登录页面,带有一个包含用户名和密码条目的表单。 提交时,它运行 checklogin.php

第 2 页 - checklogin.php

<?php
session_start();

$host="localhost:3306"; // Host name 
$username="**********"; // Mysql username 
$password="**********"; // Mysql password 
$db_name="galactek_myecl"; // Database name 
$tbl_name="clients"; // Table name 

// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB");

// Define $myusername and $mypassword 
$myusername=$_POST['username']; 
$mypassword=$_POST['password']; 

// To protect MySQL injection (more detail about MySQL injection)
$myusername = stripslashes($myusername);
$mypassword = stripslashes($mypassword);
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);

$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'";
$result=mysql_query($sql);

// set variables
$_SESSION['office_name'] = mysql_query("SELECT office FROM $tbl_name WHERE username='$myusername' and password='$mypassword'");


// Mysql_num_row is counting table row
$count=mysql_num_rows($result);

// If result matched $myusername and $mypassword, table row must be 1 row
if($count==1){
// Register $myusername, $mypassword and redirect to   file "login_success.php"
session_register("username");
session_register("password"); 
header("location:myecl.php");
}
else {
header( 'Location: http://www.galactek.com/support/offmaint.html' );
}

?>

第 3 页 - myecl.php 这是我想要显示该数据的页面。 目前我试图只显示办公室名称,但它一直显示为 0。如果我将办公室名称硬编码到 checklogin.php 页面上的变量中,它不会出现问题。

<?php
session_start();
//if(!session_is_registered(myusername)){
// header("location:index.php");
// }
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0    Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<meta content="en-us" http-equiv="Content-Language" />
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<title>Untitled 1</title>
</head>

<body>

<p>You're HERE!</p>

<?php

echo $_SESSION['office_name']

?>

</body>

</html>

我很确定我忽略了一些东西。 我对 PHP 的接触不多,无法区分问题所在。 任何帮助将不胜感激。

我认为问题出在这里:

$_SESSION['office_name'] = mysql_query("SELECT office FROM $tbl_name WHERE username='$myusername' and password='$mypassword'");

函数mysql_query不返回字符串,而是一个包含查询结果的对象。 (请参阅文档。)但实际上,您已经在上一个查询的结果中找到了 office,因此无需再执行另一个查询。 您可以只使用您所做的第一个查询中的变量$result

$sql="SELECT * FROM $tbl_name WHERE username='$myusername' and password='$mypassword'";
$result=mysql_query($sql);

// Mysql_num_row is counting table row
$count=mysql_num_rows($result);

// If result matched $myusername and $mypassword, table row must be 1 row
if($count==1){
    // Register $myusername, $mypassword and redirect to   file "login_success.php"
    $row = mysql_fetch_assoc($result); //Get an array with the results.
    $office = $row["office"]; //Get the office.
    session_register($office); //Register the office with the session.
    session_register("username");
    session_register("password"); 
    header("location:myecl.php");
}

一些进一步的说明:

首先,应避免使用mysql_函数。 它们已被弃用并将被删除。 最重要的是,它们容易出现安全问题。 建议改用 PDO 或 MySQLi。 是一个很好的 MySQLi 初学者指南。

二、 session_register("username"); 不注册变量$username而是文字字符串"username" 我不确定这就是你想要做的。

第三,文档说明了有关使用session_register的以下内容:

警告:该函数自 PHP 5.3.0 起已弃用,自 PHP 5.4.0 起已移除。

考虑使用这样的代码:

$_SESSION['office'] = $row["office"];

是否可以像 myecl.php 中的 echo 语句需要分号一样简单?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM