Array_Push没有添加到数组的末尾,它正在替换整个数组

时间:2012-01-28 07:16:31

标签: php array-push

我试图创建一个小型的书签'我网站的功能。用户可以点击" .bookmarkButton"这将执行以下脚本:

<!--Add To Bookmarks--> 
        $(".bookmarkButton").click(function() {
            var pid=$(this).closest('div').attr('id');
            $('#noBookmark').hide(); 
            $.post('bookmarks/addBookmark.php', 'rid=' + pid, function (addBookmark) {
              $("#bookmarkResults").add(addBookmark);
           });  
       });

以下是&#34; addBookmark.php&#34;:

的代码
    <?php

在session_start();

if (isset($_SESSION['ridArray']) && count($_SESSION['ridArray'] > 0)){
    addBookmark();

} else if (isset($_POST['rid']) && !isset($_SESSION['ridArray'])) { 
    $_SESSION['ridArray'] = array(); 
    addBookmark(); 
}


function addBookmark() {  
    if (is_array($_SESSION['ridArray']) && isset($_SESSION['ridArray']) && isset( $_POST['rid']) ) { 
            array_push($_SESSION['ridArray'], $_POST['rid']); //push the id value from post to the session array
            //$_SESSION['ridArrayClean'] = array_unique($_SESSION['ridArray']); //remove duplicates
            print_r($_SESSION['ridArray']); 

            foreach($_SESSION['ridArray'] as $x) {
                // Get all the data from the "example" table
                $result = mysql_query("SELECT * FROM example WHERE id = $x") 
                or die(mysql_error()); 
                $row = mysql_fetch_array( $result );
                echo $row['productname'];
    }}}

    ?>

变量$_SESSION['ridArray']保存数组,其中包含已累积的所有ID。

我的问题是,只有当一个项目被加入书签时,此脚本才有效。当有多个书签产品时,我只会获得上次加入书签的产品名称,而不是我收藏的所有内容。

例如,在点击如下的bookmarkButton类之后,而不是获取多个产品ID:数组中的0,1,2,3。我只得到最后点击的那个,即6.

我现在已经研究了一段时间了,我似乎无法看清我做错了什么。

2 个答案:

答案 0 :(得分:0)

如果您发布了“rid”,脚本只会回显产品名称。

你也可以像这样写:

if (isset($_SESSION['ridArray'], $_POST['rid']) && is_array($_SESSION['ridArray'])) { 

首先检查isset()。您还可以另外检查

... && count($_SESSION['ridArray'] > 0)

答案 1 :(得分:0)

我认为您的会话不会自动启动(是否可以在php.ini中设置自动启动,但默认情况下不会启动),所以

<?php
session_start();

其他想法:

  

SELECT * FROM示例WHERE id = $ x

你听说过SQL注入吗?

ps:不需要二次检查(之前已经检查过),第一个条件是第二个

  

is_array($ _ SESSION ['ridArray'])&amp;&amp; isset($ _ SESSION [ 'ridArray'])

我会把它写成

<?php
session_start();
if (isset($_POST['rid'])) { 
    addBookmark(intval($_POST['rid'])); 
}


function addBookmark($rid) {  
     $_SESSION['ridArray'][] = $rid; 
     $_SESSION['ridArray'] = array_unique($_SESSION['ridArray']);

     foreach($_SESSION['ridArray'] as $x) {
         $result = mysql_query("SELECT * FROM example WHERE id = '$x'") 
                   or die(mysql_error()); 
         $row = mysql_fetch_array( $result );
         echo $row['productname'];
     }
}
?>