【问题标题】:Array value is replaced when second one stores in php当第二个存储在 php 中时,数组值被替换
【发布时间】:2015-11-25 10:20:46
【问题描述】:

我将会话值存储到从 URL 获取的数组中并尝试显示它(获取购物车中产品的大小)。 但是第一个值被第二个替换。

我的代码:

if(isset($_POST['radio'])){
    $_SESSION['sz']=$_POST['radio'];
    $si=$_SESSION['sz'];
}

<a href="product_detail.php?pdt_id='.$pdid.'&add=' .$pdid .'&size='.$si.'" 
 class="cartBtn" onclick="return fun1()">Add to cart</a>';

?>

显示页面:

$rt=$_GET['size'];
$_SESSION['wer']=$rt;
$array = $_SESSION['wer'];  //Assigns session var to $array
//print_r($array);  
echo $array[$x];
}

【问题讨论】:

标签: javascript php arrays session


【解决方案1】:

关于第一部分错误:

<?php
    if(isset($_POST['radio'])){
        $_SESSION['sz']=$_POST['radio'];
        $si=$_SESSION['sz'];
    }
    <a href="product_detail.php?pdt_id='.$pdid.'&add=' .$pdid .'&size='.$si.'"      class="cartBtn" onclick="return fun1()">Add to cart</a>';
?>
  1. 正如@Hearner 所说,您的 a 标签完全错误。它应该在 php 标记之外或内部带有这样的“回声”:

    echo "<a href='product_detail.php?pdt_id=".$pdid."&add=".$pdid."&size=".$si."' class='cartBtn' onclick='return fun1()'>Add to cart</a>";
    
  2. 您无法从 if 语句中访问 $si 变量。如这里所写,如果您的 $si 之前未声明(因为您说它不是您的完整代码......),那么 $si (在链接href中)不存在。因此,您应该在 if 语句之前声明它,或者将链接(标签)也放在 if 语句中!

  3. 如果您的“$_POST['radio']”未设置怎么办?发生什么了?代码丢失... !!是否仍然声明了 $si?

关于第二部分

<?php
    for( $x = 0, $max = count($array); $x < $max; ++$x ) {
        $rt=$_GET['size'];
        $_SESSION['wer']=$rt;
        $array = $_SESSION['wer'];
        echo $array[$x];
    }
?>

我不明白您在这里要做什么...需要更多代码/信息...如果没有您的完整代码,将无法提供更多帮助...

编辑:

这是一个非常简单的示例,向您展示如何将 get var 保存到会话数组中。

第一页(pageOne.php):

<?php
    session_start();
    if(!(isset($_SESSION['myTest']))){
        $_SESSION['myTest'] = "AWESOME";
        $_SESSION['varToKeep'] = [];
    }else{
        echo "A session is already started. This is : ".$_SESSION['myTest']."<br/>";
        if(count($_SESSION['varToKeep']>0)){
            echo "There are ".count($_SESSION['varToKeep'])." vars in the array!<br/>";
            for($i=0;$i<count($_SESSION['varToKeep']);$i++){
                echo "Item ".$i." : ".$_SESSION['varToKeep'][$i]."<br/>";
            }
        }
    }
    echo "<br/>Click below to add a value in array<br/>";
    $random = rand(1,100);
    echo "<a href='pageTwo.php?mygetvar=STACKTEST".$random."'>Click here</a>";

?>

第二页(pageTwo.php):

<?php
    session_start();
    echo "myTest value is : ".$_SESSION['myTest']."<br/><br/>";

    $value = $_GET['mygetvar'];
    $_SESSION['varToKeep'][] = $value;
    echo "<a href='pageOne.php'>CLICK HERE TO RETURN ON PAGE ONE!</a>";
?>

【讨论】:

  • 我所有的数组值都被最后一个值替换:结果是这样的数组([0] => 3 [1] => 3 [2] => 3)
  • 您到处都有打开/关闭 php 标签...您的代码一团糟...您真的应该注意语法并保持代码可读...我在这里评论了您的 productdetailpage pastebin.com/RD1zZ5Kg并尝试“订购”您的购物车文件,但没有真正检查这里的逻辑pastebin.com/YtpFSvWR 尝试“隔离”问题。搞清楚有什么问题。并尝试在不使用其余代码的情况下仅解决问题...然后,检查您的代码有什么区别并一一检查...
  • 嗨 juloOsS..非常感谢您的帮助...我会调查并让您回来。
  • 确切的问题是,在单击单选按钮时的产品详细信息页面中,该值存储在会话变量中。并且在购物车乐趣页面中存储如下。 $sif=$_SESSION['sz']; $sdp[]=$sif; print_r($sdp) ;页面尝试将其存储在数组中。第一项没问题...当尝试添加第二项时,整个值被最后一个值替换..就像添加更多项时...问题仅适用于大小...
  • 如果您切换页面,您会丢失页面变量...尝试使用会话数组而不是会话变量,例如 $_SESSION['sz'][] 而不是 var[] ;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-07
  • 1970-01-01
  • 2021-02-03
  • 1970-01-01
  • 2016-04-20
  • 2014-03-14
  • 1970-01-01
相关资源
最近更新 更多