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


Use SESSIONS variables between different php files

我是$_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>';
   }
  } 
}?>

期待您的建议。


---更新会话仍然不能在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会话设置,但一切都设置正确。解决方案是"简单地"将session_start();放在page2.php的最顶部。我所说的最顶部是指在之前的所有东西甚至是<!DOCTYPE html>等等。
已解决+经验教训:-)

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

然后必须将变量保存到会话中。您可以将$_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;
?>

希望这能有所帮助;)

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

启动会话,session_start();

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

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

要在另一个页面上访问它:

启动会话,session_start();

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

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

首先应该使用函数"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']; 

请注意,当您使用共享网络托管时,您的会话数据通常存储在网络服务器上的全局文件夹中,该服务器上的每个网站都可以使用。为了防止这种情况,您应该使用"session_save_path()"函数或创建自己的会话处理程序来更改会话保存路径。

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

有很多方法可以实现这一点,这完全取决于你想如何使用它。你可以在该文件中包括你的文件,你可以使用require或require_sonce,或者是的,你可以用会话超全局。

应用程序中的所有文件都可以访问$_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'];

希望对有所帮助