通过$_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
循环
但我该如何解决这个问题?
答案 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”的人来说,这个答案立即得到解决。