将变量传递到下一页PHP

将变量传递到下一页PHP,php,html,database,session-variables,Php,Html,Database,Session Variables,我正在尝试使用PHP通过会话将变量传递到下一页。下面的代码保存最后一个值。我想在用户单击“更多信息”链接时传递“名称”,在那里我将显示有关单击名称的更多信息 <?php while ($r = $q->fetch()): $city=$r['city']; $phone=$r['phone']; $name=$r['name']; if (session_status() == PHP_SESSION_NONE) { session_start(); } $_SE

我正在尝试使用PHP通过会话将变量传递到下一页。下面的代码保存最后一个值。我想在用户单击“更多信息”链接时传递“名称”,在那里我将显示有关单击名称的更多信息

<?php while ($r = $q->fetch()):
 $city=$r['city'];
 $phone=$r['phone'];
 $name=$r['name'];
 if (session_status() == PHP_SESSION_NONE) {
   session_start();
  }
 $_SESSION['name'] = $name;
 $_SESSION['phone'] = $phone;
  $_SESSION['city'] = $city;

 ?>
        <tr>
       <td><?php echo (++$i); ?></td>
            <td><?php echo htmlspecialchars($name) ?></td>
            <td><?php echo htmlspecialchars($phone); ?></td>
            <td><?php echo htmlspecialchars($city); ?></td>
      <td> <a href="more_info.php" >More Info</a></td>
        </tr>
    <?php endwhile; ?> 

首先,您需要将
会话_start()
放在脚本顶部。请始终记住
$\u会话
是超级全局变量。无需通过此处访问会话变量。您只需像这样访问即可

echo $_SESSION['name'];
<td> <a href="more_info.php?name=<?php echo $name; ?>" >More Info</a></td> 
注意:确保
session\u start()
应位于脚本顶部

如果确实要将变量从一页传递到另一页,请执行以下操作

<td> <a href="more_info.php?name=<?php echo $_SESSION['name']; ?>" >More Info</a></td> 
给出的答案可以解决OP问题,但这不是在while循环中使用会话的好习惯。因为您试图在会话中插入名称,但名称可能不同。我建议您尝试类似的方法

echo $_SESSION['name'];
<td> <a href="more_info.php?name=<?php echo $name; ?>" >More Info</a></td> 
删除:

if (session_status() == PHP_SESSION_NONE) {
   session_start();
  }
 $_SESSION['name'] = $name;
 $_SESSION['phone'] = $phone;
  $_SESSION['city'] = $city;
然后像这样传递变量

echo $_SESSION['name'];
<td> <a href="more_info.php?name=<?php echo $name; ?>" >More Info</a></td> 

首先,您需要将
会话_start()
放在脚本顶部。请始终记住
$\u会话
是超级全局变量。无需通过此处访问会话变量。您只需像这样访问即可

echo $_SESSION['name'];
<td> <a href="more_info.php?name=<?php echo $name; ?>" >More Info</a></td> 
注意:确保
session\u start()
应位于脚本顶部

如果确实要将变量从一页传递到另一页,请执行以下操作

<td> <a href="more_info.php?name=<?php echo $_SESSION['name']; ?>" >More Info</a></td> 
给出的答案可以解决OP问题,但这不是在while循环中使用会话的好习惯。因为您试图在会话中插入名称,但名称可能不同。我建议您尝试类似的方法

echo $_SESSION['name'];
<td> <a href="more_info.php?name=<?php echo $name; ?>" >More Info</a></td> 
删除:

if (session_status() == PHP_SESSION_NONE) {
   session_start();
  }
 $_SESSION['name'] = $name;
 $_SESSION['phone'] = $phone;
  $_SESSION['city'] = $city;
然后像这样传递变量

echo $_SESSION['name'];
<td> <a href="more_info.php?name=<?php echo $name; ?>" >More Info</a></td> 


没有很好的理由在循环中声明会话开始——即使条件使它只声明一次。这是一种可以避免的低效。您的
$\u会话
变量在每次迭代中都会被覆盖。除非我误解了您的任务,否则使用
$\u会话
似乎是一个糟糕的选择。是否要通过
$\u GET
传递所有值?也许您可以更简单地通过
?id=$id
id
(假定列名)传递到
more_info.php
页面,然后只需调用
SELECT
查询即可从数据库中找到所需的更多信息。如果这是您想要的,请编辑您的问题。为什么使用会话?只要
$name
在数据库中是唯一的,就可以简单地执行@Javed操作,这可能没问题。Rahul已经提出了您的建议。可能的重复没有很好的理由在循环中声明会话开始——即使条件使它只声明一次。这是一种可以避免的低效。您的
$\u会话
变量在每次迭代中都会被覆盖。除非我误解了您的任务,否则使用
$\u会话
似乎是一个糟糕的选择。是否要通过
$\u GET
传递所有值?也许您可以更简单地通过
?id=$id
id
(假定列名)传递到
more_info.php
页面,然后只需调用
SELECT
查询即可从数据库中找到所需的更多信息。如果这是您想要的,请编辑您的问题。为什么使用会话?只要
$name
在数据库中是唯一的,就可以简单地执行@Javed操作,这可能没问题。Rahul已经提出了你的建议。可能是@mickmackusa的复制品是的,你是对的,但我已经建议这么做了……我不是Javed@mickmackusa读一下我的帖子,告诉我错误在哪里。会话的使用是有缺陷的<代码>名称
可能是唯一的,也可能不是唯一的。@mickmackusa是的,你是对的,但我已经建议你这么做了……我不是Javed@mickmackusa读一下我的帖子,告诉我错误在哪里。会话的使用是有缺陷的<代码>名称
可能是唯一的,也可能不是唯一的。