2012-01-28 31 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']; 
    } 
} 
?>