使用$ _SESSION传递值

时间:2015-10-03 11:01:00

标签: php database session

通过$_SESSION

传递元素值时遇到问题
<?php
  session_start();
?>
<?php
  echo "<table>";
  $con = mysql_connect("localhost","root","") or die ("problem");
  mysql_query("SET NAMES 'utf8'", $con);
  mysql_select_db("dedomena");
  $query = mysql_query("SELECT * FROM posts");

  $i = 1;

  while($query_row = mysql_fetch_assoc($query)) {

    echo  "<tr><td onclick='myFunction($i)'><a
           href='page.php'>".$query_row['title']."</a></td><td>$i</td>";
    $i = $i + 1;    
  };

  echo "</table>";
?>
<script>
  function myFunction($i) {
    alert(x);
    <?php
      $_SESSION["id"] = $i;
    ?>
  }
</script>

page2.php 上的代码是

<?php
  session_start();
?>
<?php
  echo $_SESSION["id"];
?>

当我点击第一页上的元素时,我得到了正确的ID 但是当我尝试将值传递到第二页时,它只显示数字10! 注意:数字10显然是因为$i + 1循环 但我该如何解决这个问题?

4 个答案:

答案 0 :(得分:1)

<script>
function myFunction($i) {
alert(x);
<?php
$_SESSION["id"] = $i;
?>
}
</script>

你试图在javascript中包含php代码,以为当发生点击事件时你将在客户端更改php全局变量。这不是正确的方法。

会话用于保存会话变量。您正在使用会话将GET参数传递给服务器。会话变量无法从客户端更新,因为它们未向客户端公开。

PHP中的会话 SESSION超全局的内容无法更改。它存在于服务器上,客户端无法访问它。

但是,会话ID被传递给客户端,以便当客户端联系服务器时,服务器知道要使用哪个会话。可以更改此值,以允许用户使用其他人的会话。

答案 1 :(得分:1)

正如brute_force已经提到的,问题是

<?php
$_SESSION["id"] = $i;
?>

在将页面发送给用户之前,此代码在服务器端执行。这是PHP和javascript之间的区别:javascript是在运行时执行的,而页面是加载的,但页面中的PHP是为了加载页面而执行的,所以SESSION["id"]在你的同时设置为10循环,然后,在上面提到的代码中,放入SESSION变量。 为了在运行时获取会话中的变量,您必须在服务器上创建对PHP脚本的请求,然后将其放在SESSION中。看看(jQuery)ajax,这是这种情况下最简单的解决方案。

答案 2 :(得分:0)

但是你想要做什么? php是服务器端语言,javascript是客户端。你必须做一个ajax调用来传递值ID。

答案 3 :(得分:0)

您无法通过JS在客户端上执行服务器端代码。来你的问题,你可以通过字符串查询发送到PHP

**这个问题的最佳解决方案是查询**

while($query_row = mysql_fetch_assoc($query)) {

    echo  "<tr><td><a
    href='page.php?id='.$i>".$query_row['title']."</a></td><td>$i</td>";
    $i = $i + 1;    
    }

<强>使page2.php

<?php
id=$_REQUEST['id'];
echo $id;
?>

或者如果刚性会话使用ajax。 iframe(没有ajax)的作弊解决方案如下:

<?php
echo "<table>";
$con = mysql_connect("localhost","root","") or die ("problem");
mysql_query("SET NAMES 'utf8'", $con);
mysql_select_db("dedomena");
$query = mysql_query("SELECT * FROM posts");

$i = 1;

while($query_row = mysql_fetch_assoc($query)) {

echo  "<tr><td onclick='myFunction(i)'><a
href='page.php'>".$query_row['title']."</a></td><td>$i</td>";
$i = $i + 1;    
}

echo "</table>";
?> 
function myFunction(i) {
alert(i);
var html='';
    html +='<div id="fakeDiv">';
    html +='<form action="setSession.php" method="post"  id="fakefrm" target="ifk">';
    html +='<input type="hidden" name="jsvar" id="jsvar" value="'+val+'"/>';
    html +='</form>';
    html +='</div>';
    html +='<iframe name='ifk'style='display:none;></iframe>';
    var c=document.createElement('div');
    document.body.innerHTML += html;
    document.getElementById('fakefrm').submit();
    document.body.removeChild(document.getElementById('fakeDiv'));
}

<强> setSession.php

<?php
session_start();
$_SESSION['id']=$_POST['jsvar'];
?>

在项目中添加setSession.php ..

注意 - 事实上,如果我快速看到这个答案,我就会对这个问题进行讨论,但对于一个不知道名字“ajax”的人来说,这个答案立即得到解决。