2012-01-28 29 views
0

我試圖爲我的網站創建一個小的「書籤」功能。用戶可以點擊 「.bookmarkButton」 將執行以下腳本:Array_Push未添加到陣列末尾,它正在替換整個陣列

<!--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); 
      }); 
     }); 

這裏是 「addBookmark.php」 的代碼:)

<?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個。

我一直在尋找這一點,現在我似乎無法看到我做錯了什麼。

+0

請問您會自動啓動?我沒有看到session_start();這裏。 – Cheery 2012-01-28 08:01:21

+0

會話開始位於頁面的開始處。我沒有把它列入這裏。 – tushar747 2012-01-28 08:05:30

+0

試試我的答案中的代碼。 – Cheery 2012-01-28 08:21:15

回答

0

腳本只響應產品名稱,如果您發佈「擺脫」。 ()第一

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

檢查isset:

你也可以寫,如果是這樣的。你也可以額外檢查

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

我的問題是,如果用戶多次點擊「.bookmarkButton」類,它只會回顯一個產品名稱,而不是多個。 – tushar747 2012-01-28 07:24:30

+0

因此,檢查$ _SESSION ['ridArray']是否真的被設置,並在完整的if塊之前包含一些ID。 – djot 2012-01-28 07:27:47

+0

好的,所以我做的是,在我添加它之前的那個塊。它打印一個空白數組。那麼我該怎麼做?因爲我認爲它干擾了前面的$ _SESSION ['ridArray'] = array();這會重置陣列。如果我不包括那個,我得到一個未定義的索引errror – tushar747 2012-01-28 07:37:40

0

我不認爲你會自動啓動(是可以設置它在php.ini自動啓動,但它在默認情況下沒有),所以

<?php 
session_start(); 

其他的想法:

SELECT * FROM示例,其中ID = $ X

你有沒有聽說過SQL注入?

PS:在次要檢查不需要(它們之前進行檢查),並從所述第一條件如下所述第二個

is_array($ _ SESSION [ 'ridArray'])& & 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']; 
    } 
} 
?>