我是会话新手,不认为我的代码工作正常。
我的目标是使用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;
}
?>
答案 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