会话变量从while循环发送特定变量

我有这个简单的while循环 ,它从mysql查询中检索数据并在我的主页上显示几个链接。

我想避免使用PHP的get函数,并添加查询字符串到我的网址

我想使用会话变量,但我需要帮助,我很确定这不能完成。

当访问者从while循环显示的几个链接中点击链接时,该特定变量将被设置在会话中。

在我的代码中,会话将始终发送最后一个变量。

这可以做到吗?

    <? session_start(); // Start Session Variables

    $result = mysql_query("my query");

    while($slice = mysql_fetch_assoc($result)){
        $url = $slice['url'];
        $name  = $slice['name']; ?>

        <a href="<? echo $url; ?>"><? echo $name; ?></a>

    <? } 

    $_SESSION['name'] = $name; // Store session data  ?>

你想要做的事情可以通过使用一个javascript函数来完成,这个函数将使AJAX请求向服务器发送点击的名字。 服务器端代码将存储所需的会话变量

 <? 
     session_start(); // Start Session Variables

    $result = mysql_query("my query");
    $name = '';
    while($slice = mysql_fetch_assoc($result)){
        $url = $slice['url'];
        $name  = $slice['name']; ?>

        <a href="<? echo $url; ?>" onclick='setSession(<? echo $url;?>);'><? echo $name; ?></a>

    <? } 

现在,setSession将使得AJAX调用传递所获得的值。 这可以通过简单的服务器端代码保存为会话URL

与您的网页链接显示在同一页面上的JavaScript代码

<script type='text/javascript'>
    function getXMLHTTPRequest() {
    try {
    req = new XMLHttpRequest();
    } catch(err1) {
      try {
      req = new ActiveXObject("Msxml2.XMLHTTP");
      } catch (err2) {
        try {
        req = new ActiveXObject("Microsoft.XMLHTTP");
        } catch (err3) {
          req = false;
        }
      }
    }
    return req;
    }



      var http = getXMLHTTPRequest();
       function setSession(value) {
    var myurl = "session.php";  // to be present in the same folder
     var myurl1 = myurl;
      myRand = parseInt(Math.random()*999999999999999);
      var modurl = myurl1+"?rand="+myRand+"url"+value ; // this will set the url to be sent

      http.open("GET", modurl, true);
      http.onreadystatechange = useHttpResponse;
      http.send(null);
    }


    function useHttpResponse() {
       if (http.readyState == 4) {
        if(http.status == 200) {
          var mytext = http.responseText;
          // I dont think u will like to do any thing with the response
          // u can redirect the user to the req page (link clicked), once the session url has been setted
            }
         }
         else {
             // don't do anything until any result is obtained
            }
        } 
</script>

PHP服务器端代码存在以将所需的url设置为会话值

<?php
session_start();
if($_SESSION['url']!=""){
unset($_SESSION['url']);   
$_SESSION['url'] = $_REQUEST['url'];  
}
else {
$_SESSION['url'] = $_REQUEST['url'];  
}
?>

我不认为你可以用简单的方式来做你正在谈论的内容......传递数据的最佳方式是在URL中,用$ _GET来检索。

您可以使用while循环来回显单个表单,并将每个表单中的隐藏变量设置为您的$ name的值。 然后你必须输出一个叫javascript函数的链接来提交这个特定的表单。 在下一页中,您将能够从前一页表单中隐藏值提交的$ _POST变量中获取$ name的值...

但是这需要javascript来运行,而这只是一种奇怪的方式。

就像是:

echo '<form action="'.$url.'" method="post" name="myform1" id="myform1">';
echo '<input type="hidden" name="value" id="value" value ="'.$name.'">';
echo '</form>';
echo '<a onclick="document.forms['myform1'].submit();">'.$name.'</a>;

然后在下一页($ url)中,您将使用php获得隐藏变量的值,如下所示:

$name = $_POST['value'];

尽管如此,还是有一种奇怪的方式来解决它...


我无法告诉您如何解决您的问题,因为从您的问题中不清楚脚本如何确定是否点击了特定的链接。

但是,我发现代码中存在缺陷。 您将会话变量始终设置为循环后的最后一个条目:

 $_SESSION['name'] = $name; // Store session data

$name包含最后一个mysql结果行的名称。 这显然不是你想要做的。

如果你在你的问题中提供了更多的信息/代码,你可以确定一个特定的链接已被点击,应该可以告诉你如何正确设置会话变量。

链接地址: http://www.djcxy.com/p/10247.html

上一篇: Session variables sending specific variable from a while loop

下一篇: Howto Monitor several web applications (with JMX) on a Tomcat server?