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

7

我刚接触$_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>';
   }
  } 
}?>

期待收到您的建议。


---更新:页面2.php上仍然无法使用会话?---

我不明白为什么 $_SESSION 无法正常工作。在页面1.php上,我可以使用 echo($_SESSION['word']) 并获得正确的值,但是在页面2.php上,我得到了 ('$'."_SESSION['word'] isn't set because you had never been at file one");

我尝试了下面所有的解决方法,但它们都没有起作用,在页面2.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会话设置,但一切都正确设置。解决方案是“简单地”将session_start();放置在page2.php的顶部。而且我指的是在所有内容之前,甚至是<!DOCTYPE html>等。
已解决+吸取了教训 :-)


1
你在谷歌被封禁了吗?http://php.net/manual/zh/session.examples.basic.php http://www.tizag.com/phpT/phpsessions.php - Cheery
1
请不要使用mysql_*函数,它们已经不再维护并且已被官方弃用。请学习使用预处理语句,并使用PDOMySQLi这篇文章将帮助您做出决定。 - Jay Blanchard
1
@JayBlanchard 我知道这个问题并且会在发布前进行更改。但是现在我只需要看一下我的上面的代码中关于 $_SESSIONS 的建议。 - Nomis
2
@ Cherry,正如我所写的,我总是阅读PHP手册。我也尝试/测试了基于Google搜索的不同解决方案-但无法使其工作。请记住我是编程新手。 - Nomis
1
@Cherry 我尽量让我的问题简短明了。但是我会记住这一点的,以后不再犯。 - Nomis
显示剩余2条评论
6个回答

5

首先,在 PHP 的开头标签(<?php session_start();... ?>)之后直接使用session_start();来启动会话。

然后,您必须将变量保存到会话中。您可以使用 $_SESSION['word'] = $word; 来实现这个目的。

在另一个文件中,您也必须在<?php 标签之后立即使用 session_start();

然后,您可以通过 $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;
?>

希望这可以帮到你;)

1
我测试了你的建议,但一开始它没有起作用。后来发现我只需要在PAGE2.php文件中首先放置<?php session_start();?>。所谓的“首先”是指在<!DOCTYPE html> <meta http-equiv="Content-Type" content="text/html; charset=utf-8">等之前。 - Nomis

3
为了使用PHP会话,您需要执行以下操作:
启动会话:session_start(); 注意:在文件中,session_start();必须是PHP的第一行。
创建会话:$_SESSION['word'] = $word; 访问另一个页面时:
启动会话:session_start(); 访问会话:$word = $_SESSION['word'];

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 */;
    }
?>

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()”函数或创建自己的会话处理程序来更改会话保存路径。

0
在 PHP 文件的开头调用 session_start();,如果在 $_SESSION 超全局数组中设置了任何内容,则可以重新访问它。
如果没有设置,您可以使用以下方式进行设置:
$_SESSION['a name']= 'some thing'; 因此,对于您的示例:
PHP FILE1
<?php
session_start();
$_SESSION['word'] = $_POST['word']
?>

PHP文件2

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

0

有很多种方法可以实现这个,这取决于你想如何使用它。你可以在文件中包含你的文件,你可以使用 require 或 require_once,或者你可以使用 session 超级全局变量。

$_SESSION 超级全局变量将可被应用程序中的所有文件访问。唯一需要确保做的事情是在页面上作为第一件事使用 session_start()。如果在任何输出已经发送到浏览器之后使用 session_start(),它将不起作用。通常,你会希望在 index.php 文件的第一行运行 session_start()。然后你就可以使用...

<?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'];

希望这有所帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接