在不同的php文件之间使用SESSIONS变量

时间:2014-10-31 20:44:34

标签: php session

我是$_SESSIONS的新手,但需要它在不同的php文件之间重用变量。在下面的代码中,我想在另一个php文件中使用变量$word,但我不确定如何执行此操作。

我的 php文件如下所示:

<?php
  if (isset($_POST["search"])) {    

    //include database connection

 $word = mysql_real_escape_string($_POST["search"]);
 $word = htmlentities($word);

 $sql = ("SELECT task_id, task_date FROM customer JOIN task ON customer.id = task.customer_id WHERE mobil = $word ORDER BY task_date DESC LIMIT 0, 10");

$results = mysql_query($sql);
 if (mysql_num_rows($results)==0) {
  echo $word, " text bla";
}else {
  echo $word, " text bla bla";
   while ($row = mysql_fetch_assoc($results)) {
    echo '<pre>', print_r($row), '<pre>';
   }
  } 
}?>

期待您的建议。


--- UPDATE会话仍无法在page2.php上运行? ---

我不明白为什么$_SESSION不起作用。一个page1.php我可以echo($_SESSION['word'])并获得正确的值,但是一个page2.php我得到('$'."_SESSION['word'] isn't set because you had never been at file one");

我测试了以下所有解决方案,但没有一个在page2.php上工作=相同的结果。

我的page1.php文件。

<?php
session_start();

//if we got something through $_POST
    if (isset($_POST["search"])) {  

    // include database connection
        $connect = mysql_connect('localhost', 'root', 'NomiS123') or die(mysql_error());
        mysql_select_db('workcard');

    // sanitize user input
        $word = mysql_real_escape_string($_POST["search"]);
        $word = htmlentities($word);

    // build search query to the database
        $sql = ("SELECT task_id, task_date FROM customer JOIN task ON customer.id = task.customer_id WHERE mobil = $word ORDER BY task_date DESC LIMIT 0, 10");

        // get results
        $_SESSION['word'] = $word;
        $results = mysql_query($sql);
        if (mysql_num_rows($results)==0) {
            $_SESSION['word'] = $word;
            echo($_SESSION['word']. "<br>");
            var_dump($_SESSION);
            echo "<br>";
            echo "link link <br>";
            echo "<a href=\"../page2.php/\">new card</a> <br>";
            echo "<a href=\"//cykelc/\">New Search</a>";
        }   else {
                echo $word, " bla bla text <br> Create card <br>";
                echo "Edit info on: ", $word, "<br>";
                echo "<a href=\"//cykelc/\">New Search</a> <br>";

                while ($row = mysql_fetch_assoc($results)) {
                    echo '<pre>', print_r($row), '<pre>';
                    }
                    //$results->free();
            }   
        }
// mysql_close($connect);
?>

我的PAGE2.php文件。

<?php 
session_start();
if(isset($_SESSION['word'])) {
    $word = $_SESSION['word'];
    echo($word);
} else {
    die('$'."_SESSION['word'] isn't set because you had never been at file one");
}
?>

我对此感到疯狂。


更新 - 已解决
我测试了以下所有建议,但没有一个工作,这很奇怪,因为我可以设置并回显page1.php和page2.php上的sesson_id(),但是在page2.php我有一个不同的sesson_id() 。我开始研究我的MAMP会话设置,但一切都是正确的设置。解决方案是&#34;简单地&#34;将session_start();放在page2.php的最顶层。最重要的是我在一切之前的意思是<!DOCTYPE html>等。所解决的经验教训: - )

6 个答案:

答案 0 :(得分:2)

要使用PHP会话,您可以执行以下操作:

发起会话session_start();

注意: session_start();必须是文件中PHP的第一行。

创建会话$_SESSION['word'] = $word;

要在其他页面上访问它:

发起会话session_start();

访问会话$word = $_SESSION['word'];

答案 1 :(得分:2)

首先,您必须在打开PHP'标记'(session_start();)之后直接通过<?php session_start();... ?>启动视频

然后您必须将变量保存到会话中。 您可以将$_SESSION['word'] = $word;用于此目的。

在另一个文件中,您还必须在session_start();'代码'之后的第一个位置使用<?php

然后您可以通过$word = $_SESSION['word'];访问旧变量。

您现在也可以在第二个文件中使用$word。但是你只能在它被设置的情况下使用它(而你之前在第一个文件的位置)。

文件一:

<?php
session_start();
    if (isset($_POST["search"])) {    

    //include database connection

 $word = mysql_real_escape_string($_POST["search"]);
 $word = htmlentities($word);
 $_SESSION['word'] = $word;

 $sql = ("SELECT task_id, task_date FROM customer JOIN task ON customer.id = task.customer_id WHERE mobil = $word ORDER BY task_date DESC LIMIT 0, 10");

$results = mysql_query($sql);
 if (mysql_num_rows($results)==0) {
  echo $word, " text bla";
}else {
  echo $word, " text bla bla";
   while ($row = mysql_fetch_assoc($results)) {
    echo '<pre>', print_r($row), '<pre>';
   }
  } 
}?>

文件二:

<?php
session_start();
if(isset($_SESSION['word'])) {
    $word = $_SESSION['word'];
} else {
    die('$'."_SESSION['word'] isn't set because you had never been at file one");
}
echo $word;
?>

希望这会有所帮助;)

答案 2 :(得分:0)

session_start()表示您正在使用会话变量,请确保它位于页面顶部。要进行会话,请执行以下操作:$_SESSION['word'] = [some value]。只要您在顶部有session_start(),就可以在页面之间使用它。如果没有设置初始化,请务必先确定它是否已设置。

<?php session_start(); ?>

...

<?php 
    if ( isset($_SESSION['word']) ) {
      $_SESSION['word'] = /* change existing session value */;
    } else {
      $_SESSION['word'] = /* new session value */;
    }
?>

答案 3 :(得分:0)

首先,您应该使用函数'session_start()'启动会话。 将它放在index.php / bootstrap.php(加载网站时始终加载的文件)中。

之后,您可以使用'$ _SESSION'全局来设置数据。

//In your index.php/boostrap.php
session_start();

在要保存$ word的文件中:

$_SESSION['myword'] = $word;

从那时起,您可以在另一个页面上使用此变量。

//On another page, after the variable is being set
echo $_SESSION['myword']; 

请注意,在使用共享虚拟主机时,会话数据通常存储在Web服务器上的全局文件夹中,并且可供该服务器上的每个网站使用。要防止这种情况,您应该使用'session_save_path()'函数或创建自己的会话处理程序来更改会话保存路径。

答案 4 :(得分:0)

在PHP文件的开头调用session_start();,如果在$_SESSION超级全局数组中设置了任何内容,则可以重新访问它。

如果没有设置,您可以设置:
$_SESSION['a name']= 'some thing';

所以你的例子:
PHP FILE1

<?php
session_start();
$_SESSION['word'] = $_POST['word']
?>

PHP FILE2

<?php
session_start();
echo $_SESSION['word'];
?>

答案 5 :(得分:0)

有许多方法可以实现这一切,这取决于你想如何使用它。您可以将文件包含在该文件中,可以使用require或require_once,或者可以使用会话超级全局。

应用程序中的所有文件都可以访问$ _SESSION超级全局。您需要确保执行的唯一操作是在页面上使用session_start()作为该页面上的第一件事。如果在任何输出到浏览器后使用session_start()它将无法工作。通常,您需要将session_start()作为index.php文件的第一行运行。然后你可以使用......

<?php
if (isset($_POST["search"])) {    

//include database connection

 $word = mysql_real_escape_string($_POST["search"]);
 $word = htmlentities($word);
 $_SESSION['word'] = $word;

 $sql = ("SELECT task_id, task_date FROM customer JOIN task ON customer.id = task.customer_id WHERE mobil = $word ORDER BY task_date DESC LIMIT 0, 10");

$results = mysql_query($sql);
 if (mysql_num_rows($results)==0) {
  echo $word, " text bla";
}else {
  echo $word, " text bla bla";
   while ($row = mysql_fetch_assoc($results)) {
    echo '<pre>', print_r($row), '<pre>';
   }
  } 
}?>

然后在你想要访问它的任何页面中只需将其调高...

<?php
    echo $_SESSION['word'];

希望有所帮助