【问题标题】:Variable value passed from page to another page stays the same从页面传递到另一个页面的变量值保持不变
【发布时间】:2014-03-28 21:57:56
【问题描述】:

我想要做的是使用变量将一个值从一个使用 php 的页面传递到另一个使用 php 的页面,然后在第二个页面中将该值从 php 传递到 javascript。

我根据单击的图像在 HTML 中初始化变量。 问题是每次我传递一个不同的值(不同的值在下面的代码中是 12 和 7),这意味着我点击了不同的图像,并且在重新加载我的页面后,我仍然得到第一个值。

我尝试取消设置变量和/或 session_destroy() 但没有运气。为了更清楚:

首页:

    <?php
    session_start();
    ?>

    <!DOCTYPE HTML>
    <html>
    <head>
    <title>Title</title>
    </head>
    <body>
    <a href="secondpage.php"><img src="images/first_image.png" alt="image" <?php $_SESSION['choice'] = 12; ?>></a>
    <a href="secondpage.php"><img src="images/second_image.png" alt="image" <?php $_SESSION['choice'] = 7; ?>></a>
    </body>

</html>

第二页:

<?php
session_start();
$option = $_SESSION['choice'];
//unset($_SESSION['choice']); //failed
echo $option;                 //option is always 12
//session_destroy();         //failed

?>
<!doctype html>
<html>
<head>
<title>Monuments</title>

<script>
var option = <?php echo json_encode($option); ?>;
//var option = "<?php echo $option; ?>";      // i tried also this way 
alert("option is : " + option);  //option is always 12
</script>

</head>

<body>

</body>
</html>

你能告诉我是什么问题吗? 或者为我想做的事情推荐任何更好的解决方案?

【问题讨论】:

  • 选择总是 7 或 12?,你纯粹为选择赋值......你需要使用 js/ajax 来实现你想要的,因为你希望在某些链接上改变选择......使用 $改为获取

标签: javascript php html session variables


【解决方案1】:

您正在为HTML 中的$_SESSION['choice'] 赋值。

使用sessions 并不是真正实现您想要实现的目标的正确方法。

在您的第一页上,使用$_GET 参数来标识选定的纪念碑。

<a href="secondpage.php?choice=12"><img src="images/first_image.png" alt="image"></a>

在你的第二页,你可以通过$_GET['choice']获取这个参数

修改后的代码:

<!DOCTYPE HTML>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <a href="secondpage.php?choice=12"><img src="images/first_image.png" alt="image"></a>
    <a href="secondpage.php?choice=7"><img src="images/second_image.png" alt="image"></a>
</body>

</html>

还有第二页:

<?php
$option = $_GET['choice'];
echo $option;
?>

<html>
<head>

    <title>Monuments</title>

    <script>
    var option = <?php echo $option; ?>;
    alert("option is: " + option);
    </script>

</head>

<body>

</body>
</html>

【讨论】:

  • 是的,我知道。这意味着我不需要使用变量 $option?我不确定我是否完全理解我的错误
【解决方案2】:

您实际上在这些代码行中设置了 SESSION 变量的值两次。首先,将其设置为 12,然后将其设置为 7。$_SESSION['choice'] 不能同时具有两个值。当您说“我根据单击的图像在 HTML 中初始化变量”时。这是不正确的。无论用户做什么,这两行代码都会运行,因为 PHP 在输出页面之前会运行所有代码。

<a href="secondpage.php"><img src="images/first_image.png" alt="image" <?php $_SESSION['choice'] = 12; ?>></a>
<a href="secondpage.php"><img src="images/second_image.png" alt="image" <?php $_SESSION['choice'] = 7; ?>></a>

另一种方法是有两个不同的超链接,并在第二页设置变量。

首页:

<a href="secondpage.php?choice=12"><img src="images/first_image.png" alt="image"></a>
<a href="secondpage.php?choice=7"><img src="images/second_image.png" alt="image"></a>

第二页:

if (isset($_GET['choice'])){
    $option = $_GET['choice'];
}

【讨论】:

  • 感谢您的回答。我没有选择你的正确,因为 if(isset.. 对我不起作用..
  • 这很奇怪......不过感谢您的评论。
  • 也许我又做错了,但我不得不在你的答案和我选择的另一个答案之间做出选择
【解决方案3】:

抱歉,您似乎遗漏了有关 PHP 的基本要点。 (这需要一点时间来适应)。由于 PHP 是服务器脚本,您需要记住页面中的所有 PHP 在任何生成的客户端代码(HTML/JavaScript 等)之前执行。因此,您对 $_SESSION['choice'] 的分配只会在任何 HTML 发送到客户端之前在服务器上执行。您需要专注于在您的锚标记周围放置一个表单,并让他们使用 javascript 将值 12 或 7 分配给隐藏字段,然后再使用提交发布表单数据。 要么到当前页面(在导航到另一个页面之前将其分配给 SESSION 值是有意义的) - 要么 - 到您的目标页面,避免需要分配给 SESSION 变量。 希望这能为您指明正确的方向。 .. 仅作为示例...

<?php
session_start();

if (array_key_exists('choice',$_POST))
{
  $_SESSION['choice']=$_POST['choice'];
  header('Location: secondpage.php');
}
// Assuming you have an array of images with corresponding choice values...
$images=array('12'=>'images/first_image.png','7'=>'images/second_image.png');     
?>

<!DOCTYPE HTML>
<html>
<head>
 <title>Title</title>
 </head>
 <body>
   <form name="myform" action="<?php echo $_SERVER['PHP_SELF']?>" method="POST">
<?php
  foreach ($images as $choice=>$imagefile)
  {
?>
   <a href="#"><img src="<?php echo $imagefile?>" alt="image" onclick="document.myform.choice='<?php echo $choice?>';document.myform.submit();"></a>
<?php
  }
?>
      <input type="hidden" name="choice" value="">
    </form>
    </body>

</html>

这样更有意义吗?

【讨论】:

  • 是的,我是 php 新手,我忘记了。我会习惯的
【解决方案4】:

为什么你有两个具有相同名称的变量choice?将第二个变量的名称更改为choice2并检查输出,我相信你的代码是正确的。

代码有效

<html>
<head>
  <title>Test1</title>
</head>
<body>
<?php
 session_start();
 $_SESSION['choice'] = 2;
 $_SESSION['choice2'] = 20;
 ?>
 <a href="sessionTest2.php">Click me</a>
 </body>
</html>

Test2 会话

<html>
<head>
</head>
<body>
    <?php 
    session_start();
    echo $_SESSION['choice'];
    echo $_SESSION['choice2'];
     ?>
</body>
</html>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多