从页面传递到另一个页面的变量值保持不变

时间:2014-03-28 21:57:56

标签: javascript php html session variables

我想要做的是使用变量将一个值从一个页面使用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>

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

4 个答案:

答案 0 :(得分:1)

您要为$_SESSION['choice']中的HTML分配值。

使用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>

答案 1 :(得分:1)

实际上,您在这些代码行中设置了两次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'];
}

答案 2 :(得分:0)

抱歉,您似乎错过了关于PHP的基本观点。 (这需要一点时间习惯)。由于PHP是服务器脚本,您需要记住页面中的所有PHP都是在任何生成的客户端代码(HTML / JavaScript等)之前执行的。因此,在将任何HTML发送到客户端之前,您只需在服务器上执行$ _SESSION [&#39; choice&#39;]的分配。您需要专注于在锚标签周围放置一个表单,并让他们使用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>

这更有意义吗?

答案 3 :(得分:0)

为什么你有两个具有相同名称选择的变量?将第二个变量的名称更改为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>