【问题标题】:Can not save id in session properly using PHP无法使用 PHP 在会话中正确保存 id
【发布时间】:2017-03-27 15:44:23
【问题描述】:

我遇到了问题。我试图在每次单击会话时保存不同的 id,但是当我从会话中获取它时,总是显示一个 id(i.e-the first saved one.)。我在下面解释我的代码。

<?php
foreach ($catdata as $v) {
?>
<div class="col-sm-3">
<a href="javascript:void(0)" class="<?php echo $classarr[$counter];?>" onClick="keepSection('<?php echo $v['id']; ?>');"><?php echo $v['name'] ?></a><!-- activemap1 -->
</div>
<?php
$counter++;
if($counter==4){
    $counter=0;
 }
}

点击锚标记时,相应的 id 将通过下面给出的 ajax 调用保存到会话中。

function keepSection(id){
        var url="common.php?action=savecid";
        $.post(url,{"cat_data":id},function(data){  
            var obj=JSON.parse(data);
            console.log('data',obj);
            if(obj.isData==1){
                var v = jQuery("#fyndspaceownsec").validate({
                });
                if (v.form()) {
                    $(".frm").hide("fast");
                    $("#sf2").show("slow");
                }
            }
        })

      }

Common.php:

$action = $_REQUEST['action'];
$result=array();
if($action=='savecid'){
    $id=$_POST['cat_data'];
    session_start();
    if(isset($_SESSION['cid']) && !empty($_SESSION['cid'])){
        unset($_SESSION['cid']);
        $_SESSION['cid']=$id;
        $flag="true";

    }else{
        $_SESSION['cid']=$id;
        $flag="false";
    }
    $result=array("isData"=>1,"cid"=>$_SESSION['cid'],"flag"=>$flag);
    echo json_encode($result);
}

在这里,我将 id 存储到会话中。每次单击时,我都会清除会话并存储新 id。当我尝试获取它时,它只显示一个在每次单击后首先保存的 id。

<div class="fyndspacecategory fyndsheightsubc nano">
<div class="nano-content">
  <?php
    echo $_SESSION['cid'];

?>

我的完整代码如下。

<div class="fynd-space-itms">
<?php
$classarr = array("item-exhibitation maploc", "item-parking maploc", "item-offices maploc", "item-storage maploc");
$sql="select * from category order by id desc";
                                                        $catdata=$dbobj->db_get_data($sql);
$counter=0;
foreach ($catdata as $v) {
?>
<div class="col-sm-3">
<a href="javascript:void(0)" class="<?php echo $classarr[$counter];?>" onClick="keepSection('<?php echo $v['id']; ?>');"><?php echo $v['name'] ?></a><!-- activemap1 -->
</div>
<?php
    $counter++;
if($counter==4){
    $counter=0;
}
}
<button class="btn nextbtnbgdiv open2" type="button">Next <span class="fa fa-arrow-right"></span></button>
<div class="fyndspacecategory fyndsheightsubc nano">
    <div class="nano-content">
      <?php
        echo $_SESSION['cid'];

    ?>
</div>
</div>

在这里,当用户点击next 按钮时,第二部分 div 部分将显示并从会话中获取 id。

假设第一次单击存储到会话中的id=16,echo 将打印值16,第二次单击存储到会话中的id=17,但这次echo 值即将到来@987654334 @这是我的问题。我需要在每次单击时删除旧 id 并存储新 id 并且每次单击后echo 应该打印新值。请帮助我。

【问题讨论】:

标签: php jquery session


【解决方案1】:

你会使用 isset 和 empty:

session_start();
if(isset($_SESSION['blah']) && !empty($_SESSION['blah'])) {
   echo 'Set and not empty, and no undefined index error!');
}

array_key_exists 是使用 isset 检查键的一个很好的替代方法:

session_start();
if(array_key_exists('blah',$_SESSION) && !empty($_SESSION['blah'])) {
    echo 'Set and not empty, and no undefined index error!');
}
else 
{
 echo "session is not set";
 } 

确保在读取或写入会话数组之前调用 session_start。

【讨论】:

  • 让我检查并告诉你。
  • 同样的问题先生。它没有清除以前的 id (unset($_SESSION['cid']);)。
  • 你必须检查它是否进入 if 条件我更新答案来检查
  • 是的,每次它进入 if 语句。`$result=array("isData"=&gt;1,"cid"=&gt;$_SESSION['cid'],"flag"=&gt;$flag); 也返回完美的值,但在获取时它不存在于会话中。
  • 您从该会话价值中获得了什么?你打印了吗
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-31
  • 2016-09-06
  • 1970-01-01
  • 1970-01-01
  • 2019-03-30
相关资源
最近更新 更多