sql无法在另一个页面的Session_start()内工作

时间:2017-08-29 03:15:29

标签: php mysql

会话在我的项目中使用。成功登录后,在login.php页面中调用session_start()。然后它将转到另一个页面:repair_device.php。在repair_device.php中,

isset($_SESSION["admin"])&&$_SESSION["admin"]==true //this can pass

和警报(" testInDR")可以正确显示。但是sql什么也没做。

如果我选择直接在repair_device.php中登录,例如:

$conn = new PDO('mysql:host=localhost;port=3306;dbname=xxx' , 'xxx' , 'xxxx');
$conn->setAttribute(PDO::ATTR_ORACLE_NULLS, true);

sql ="通过datetime desc"从hpc_repairdevice order中选择*工作正常。

以下是login.html的代码

<form class="login" action="index.php" method="post">
<span>account:</span><input type="text" name="username" /><br /><br />
<span>password:</span><input type="password" name="password"/><br /><br />
<span>verificationCode:</span><input type="text" name="code" /><img id="code" src="create_code.php" alt="another" style="cursor: pointer; vertical-align:middle;" onClick="create_code()"/><br /><br /> 
<input type="submit" style="margin-left:35%" value="logon" /><input type="reset" value="" />  </div> 
</form>

这是index.php的代码

<?php
session_start();
if(!isset($_GET['log_out']) && ($_POST['code'] != $_SESSION['code']))
{
    echo "wrong verificationCode!<br />" . "<meta http-equiv='refresh' content='2;url=index.html'>";
}
if(!isset($_GET['log_out']))
{
$user = $_POST['username'];
$pwd = $_POST['password'];
if($user!=null & $pwd!=null)
{
    try
    {
        $conn=new PDO('mysql:host=x.x.x.x;port=3306;dbname=hpc',$user,$pwd);
    }
    catch(PDOException $e)
    {
        echo "faile<br />".$e->getMessage()."<meta http-equiv='refresh' content='1;url=index.html'>";
    }

    if($conn)
    {
     $_SESSION["admin"]=true;
    $stas = $conn->getAttribute(PDO::ATTR_CONNECTION_STATUS);
    .....
    echo "<script language='javascript' type='text/javascript'>";
    echo "window.location.href='http://xx.xx.xx.xx/repair_device.php'"; 
    echo "</script>";  
    .....
     }
 }
}
?>

以下是create_code.php的代码

<?php
session_start();
//create pic
header("Content-type: image/png");
.....
$_SESSION['code'] = $verifyCode;     //stor verification code in session
......   
?>

这是repair_device.php的代码

<!DOCTYPE html>
<html>
<head>
 ......
</head>
<body>
  <?php 
   session_start();
  // $conn = new PDO('mysql:host=localhost;port=3306;dbname=xxx' , 'xxx' , 'xxxx');
   //$conn->setAttribute(PDO::ATTR_ORACLE_NULLS, true);
   $admin=false;
   if(isset($_SESSION["admin"])&&$_SESSION["admin"]==true)
   {    
   alert("testInDR");   
   $sql = "select * from hpc_repairdevice order by datetime desc";
   ......
   $sel=$conn->query($sql);
   ......
   }
 ?>
</body>
</html>

我认为会话ID应该传递给repair_device.php,但我不知道如何。谁能帮帮我?

1 个答案:

答案 0 :(得分:0)

数据库连接未与会话一起传递。一种流行的方法是拥有一个DB引导程序文件,该文件包含在需要访问数据库的任何页面的头部(或自动加载器)。

<?php //index.php, repair_device.php
require_once('db.php');

//rest of page

在数据库页面中,您可以设置连接(并可能启动会话)

<?php // db.php
session_start();
$conn = new PDO('mysql:host=localhost;port=3306;dbname=xxx' , 'xxx' , 'xxxx');
$conn->setAttribute(PDO::ATTR_ORACLE_NULLS, true);

然后由PHP呈现的结果将是

<?php // index.php
session_start();
$conn = new PDO('mysql:host=localhost;port=3306;dbname=xxx' , 'xxx' , 'xxxx');
$conn->setAttribute(PDO::ATTR_ORACLE_NULLS, true);

//rest of page

在任何需要它的页面上包含连接只需要一行代码。