2013-01-05 41 views
0

我遇到了在php文件中显示我的会话的问题。我可以让会议显示,但它显示不正确 - 它只显示字母'S'。查询数据库和会话

会话是在用户登录到我的系统时创建的,它们包含其唯一ID和全名。

我的登录php如下。只有'full_name'和'id'会话我有问题,因为我必须自己将它们编码到脚本中。 我有探头的地方

<?php 

ob_start(); 
include ("includes/dbConfig.php"); 
$tbl_name="users"; // Table name 

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

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


// To protect MySQL injection (more detail about MySQL injection) 
$username = stripslashes($username); 
$encrypted_password=md5($password); 
$username = mysql_real_escape_string($username); 
$encrypted_password = mysql_real_escape_string($encrypted_password); 
$sql="SELECT * FROM $tbl_name WHERE username='$username' and password='$encrypted_password'"; 
$result=mysql_query($sql); 

//Get User Info 

$userinfo="SELECT * FROM $tbl_name WHERE username='$username'"; 
$result=mysql_query($userinfo); 

$full_name= $userinfo['full_name']; 
$id= $userinfo['id']; 

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

// If result matched $username and $password, table row must be 1 row 
if($count==1){ 

// Register $username, $password and redirect to file "console.php" 
session_start(); 
$_SESSION['username'] = $username; 
$_SESSION['full_name'] = $full_name; 
$_SESSION['id'] = $id; // store session data 
header("Location: console.php");  
} 
else { 
echo "Wrong Username or Password"; 
} 
ob_end_flush(); 

?> 

犯了一个错误我已经测试了我的站点内的会议,并横跨确定一些虚拟的信息传递。我认为它是从数据库中获取信息的问题。

我知道md5并不是最安全的密码加密方式,但是对于我所需要的就可以了。

谢谢先进。


这是我的页面顶部的代码。

<?php 

    include ("includes/dbConfig.php"); 

    session_start(); 
    if(!$_SESSION['username']) 
    if(!$_SESSION['full_name']) 
    if(!$_SESSION['id']) { 
     // user not logged in redirect 
     header("Location: index.php"); 
    } 
?> 

这是我用来打印会话数据的代码。

<?php echo "" . $_SESSION["username"]; ?> 
<?php echo "" . $_SESSION["full_name"]; ?> 
<?php echo "" . $_SESSION["id"]; ?> 
+0

确实console.php具有'在session_start();'中呢?如果没有,那是你的问题。 – Popnoodles

+0

是的,它的确如此。 '用户名'会话通过确定,因为我可以让我的用户名打印。它只是其他两个,当我打印他们的字母'S'刚刚显示。 – user1948851

+0

你能提供打印它们的代码吗? – Popnoodles

回答

3

这很快就会被弃用,但不应该导致错误。

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

这是毫无意义的,你已经在上面的查询得到这个数据

//Get User Info 
$userinfo="SELECT * FROM $tbl_name WHERE username='$username'"; 
$result=mysql_query($userinfo); 

这是不对的,你要访问一个字符串作为关联数组!

$full_name= $userinfo['full_name']; 
$id= $userinfo['id']; 

你需要

$count=mysql_num_rows($result); 
// If result matched $username and $password, table row must be 1 row 
if($count==1){ 
    $row = mysql_fetch_assoc($result); 
    $full_name= $row['full_name']; 
    $id= $row['id']; 
} 

相当为什么它是生产 'S'。我不确定。但是无论如何这些都是错误的。

+0

没有发现。 – Popnoodles

+0

绝对精彩的谢谢。我新的PHP和MySQL,所以所有的学校男孩错误。 感谢您的帮助! – user1948851

0

您必须确保首先发生的是方法调用session_start()。如果您的代码在方法调用之前只回响一个字符,则会话不起作用。

+0

我问过已经和响应是肯定的[console.php] [有session_start();在里面] – Popnoodles

0

只是想表明,有在原来的脚本,你不需要大量的代码,(这种融合菲利普怀特豪斯的分辨率的问题)

<?php 

include "includes/dbConfig.php"; 
$tbl_name="users"; // Table name 
// Connect to server and select databse. 
mysql_connect($host, $un, $pwd)or die("cannot connect"); // no quotes needed around vars 
mysql_select_db($db_name)or die("cannot select DB"); // no quotes needed around vars 

$username = mysql_real_escape_string($_POST['username']); 
$encrypted_password = mysql_real_escape_string(md5($_POST['password'])); 
$sql="SELECT username, full_name, id FROM $tbl_name WHERE username='$username' and password='$encrypted_password'"; 
$result=mysql_query($sql); 

// If result matched $username and $password, table row must be *AT LEAST* 1 row 
if(mysql_num_rows($result)){ 
    session_start(); 
    $_SESSION['user'] = mysql_fetch_assoc($result); 
    header("Location: console.php");  
} 
else { 
    echo "Wrong Username or Password"; 
    die; 
} 

?> 

,并检查

<?php 

session_start(); 
// using if(!$_SESSION['..']) without isset throws a warning if it's not set 
if(!isset($_SESSION['user'])) header("Location: index.php"); 

?> 

和呼应

<?php 

echo $_SESSION['user']['username']; 
echo $_SESSION['user']['full_name']; 
echo $_SESSION['user']['id']; 

?>