当第二个存储在 php 中时,数组值被替换

Posted

技术标签:

【中文标题】当第二个存储在 php 中时,数组值被替换【英文标题】:Array value is replaced when second one stores in 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];

【问题讨论】:

嘿...什么是 "$x" ? oO 抱歉行不见了... for( $x = 0, $max = count($array); $x 您的&lt;a 有很多错误。你不存储它也不回显它,所以我不知道它是什么。而且您不会正确使用点。将您的 替换为 &lt;a href= "product_detail.php?pdt_id=$pdid&amp;add=$pdid&amp;size=$si" class="cartBtn" onclick="return fun1()"&gt;Add to cart&lt;/a&gt;; 因为你写它的方式你的网址看起来像product_detail.php?pdt_id='.$pdid.'&amp;add=' .$pdid,它看起来根本不像一个网址...... 【参考方案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>';
?>

    正如@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>";
    

    您无法从 if 语句中访问 $si 变量。如这里所写,如果您的 $si 之前未声明(因为您说它不是您的完整代码......),那么 $si (在链接href中)不存在。因此,您应该在 if 语句之前声明它,或者将链接(标签)也放在 if 语句中!

    如果您的“$_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[] ;

以上是关于当第二个存储在 php 中时,数组值被替换的主要内容,如果未能解决你的问题,请参考以下文章

php中怎样从一个数组中随机取一个元素出来呢?

根据第一个下拉列表更改第二个下拉列表,并使用 php 和数组更改第二个下拉列表的第三个下拉列表 [关闭]

如何在循环中使用 curl PHP 100 次? [关闭]

调整数组中的顺序使奇数位于偶数前边

PHP数组(正则表达式数组预定义数组)

PHP数组——数组正则表达式数组预定义数组