会话脚本没有设置变量

时间:2014-02-25 00:36:46

标签: php session pdo

我是会话新手,不认为我的代码工作正常。

我的目标是使用PDO而不是SQL,但是因为我也是PDO的新手,所以我有点陷入困境。

我正在尝试将我的$ who设置为会话,但是当我在SQL和PDO之间进行操作时,事情变得让我感到困惑。你能帮我把事情变成犹太人吗?

<?php
require_once('/scripts/include.php');
require_once('/scripts/includePDO.php');

$error = '';
$form = $_POST['submit'];
$email = $_POST['email'];
$password = $_POST['password'];

if( isset($form) ) {
if( isset($email) && isset($password) && $email !== '' && $password !== '' ) {

$sql = "SELECT * FROM tbl_users WHERE email = :email and password = :password";

$q   = $conn->prepare($sql); // the default way of PDO to manage errors is quite the same as `or die()` so no need for that
        $q->bindValue(':email',$email,PDO::PARAM_STR);
        $q->bindValue(':password',$password,PDO::PARAM_STR);
        $q->execute();

            $r = $q->fetch(PDO::FETCH_ASSOC);
            if(($r)!=0)

{ //success

$info = mysql_fetch_array( $sql );
$answer = $info['id'];

$_SESSION['logged-in'] = true;
$_SESSION['who']=$answer;

//If the login details are entered and they match those in the database, forward to new page.
header('Location: /social3/home/');

exit;

// If information is wrong or missing, provide error message.
} else { echo "Sorry, something hasn't worked. Are you entering all the information correctly?"; }
} 

}

?>

我认为一切都很好,直到 //成功,然后我迷失了方向。

-----附加会话问题----

在我的每个网站页面的顶部,我都包含一个允许PDO连接到我的数据库的php文件。这是必要的,因为我的大多数页面都使用PDO查询。

但现在回过头来看,它出于某种原因,在顶部有一些会话编码。这应该在那里(考虑到,我在一个完全不同的页面上分配会话?

<?php

session_start();

$host   = "xxxx";
$db = "xxxx";
$user   = "xxxx";
$pass   = "xxxxx";

$conn = new PDO("mysql:host=$host;dbname=$db",$user,$pass);

?>

---进一步提问---

所以,最后......更多会话和PDO的想法。 在每个页面的顶部,我包含一个文件以确保用户已登录,如果没有,则会转发到登录页面。

我也将此代码从SQL更改为PDO,显然我的PDO知识中存在间隙,如下面的代码所示。帮助

<?php

session_start();

$who = $_SESSION['who'];

$host = "xxx";
$username = "xxxx";
$password = "xxxx";
$db = "xxx";

@mysql_connect(:host,:username,:password);

$q   = $conn->prepare($sql);
$q->bindValue(':host',$host,PDO::PARAM_STR);
$q->bindValue(':username',$username,PDO::PARAM_STR);
$q->bindValue(':password',$password,PDO::PARAM_STR);
$q->execute();

@mysql_select_db($db) or die("error");
// is the one accessing this page logged in or not?

if ( !isset($_SESSION['logged-in']) || $_SESSION['logged-in'] !== true) {

// not logged in, move to login page

header('Location: /social3/');

exit;

}


?>

1 个答案:

答案 0 :(得分:0)

您正在使用PDO,因此这些行无效 -

$info = mysql_fetch_array( $sql );
$answer = $info['id'];

您已经提取了该行并将其存储在$r中,因此您只需要 -

$answer = $r['id'];

响应您的修改。

包含的php代码/页面顶部的session_start();是必需的。没有它,你就无法$_SESSION['logged-in'] = true;&amp; $_SESSION['who']=$answer;。您需要启动会话才能设置会话值,并且必须在发送任何数据/标头之前。请查看手册 - http://php.net/session_start