2012-01-28 3 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'] содержит массив со всеми идентификаторами, которые были накоплены.

Моя проблема заключается в том, что этот скрипт работает только в том случае, если один элемент отмечен закладкой. Когда добавлено более одного продукта, я получаю только имя продукта, которое было последним, а не все, что я закладовал.

Так, например, вместо того, чтобы получать несколько идентификаторов продукта после щелчка по классу bookmarkButton следующим образом: 0,1,2,3 в массиве. Я получаю только тот, который был нажат последним, то есть 6.

Я изучаю это какое-то время, и я не могу видеть, что я делаю неправильно.

+0

начать ли сеанс автоматически? Я не вижу session_start(); Вот. – Cheery

+0

Начало сеанса находится в начале страницы. Я не включил его здесь. – tushar747

+0

Попробуйте код в моем ответе. – Cheery

ответ

0

Сценарий только эхо продукта, если вы разместили «rid».

Кроме того, вы могли бы написать, если так: Проверка IsSet

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

() первый. Также Вы можете дополнительно проверить

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

Моя проблема заключается в том, что она повторяется только одно имя продукта, а не несколько, если пользователь несколько раз нажал на класс «.bookmarkButton». – tushar747

+0

Итак, проверьте, действительно ли $ _SESSION ['ridArray'] задан и содержит некоторые идентификаторы до полного блока if. – djot

+0

Хорошо, так что я сделал, до этого блока я добавил его. Он печатает пустой массив. Так что же мне тогда делать? Потому что я думаю, что это мешает предыдущей $ _SESSION ['ridArray'] = array(); который сбрасывает массив. Если я не включаю это, я получаю неопределенный индексный errror – tushar747

0

Я не думаю, что сеанс начинается автоматически (можно ли установить его автозапуск в php.ini, но это не по умолчанию), так

<?php 
session_start(); 

Другие мысли:

SELECT * FROM например WHERE ID = $ х

Вы когда-нибудь слышали о SQL Injection?

пс: нет необходимости во вторичной проверке (они проверяются раньше) и из первого условия следует второе

is_array ($ _ SESSION [ 'ridArray']) & & Исеть ($ _ 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']; 
    } 
} 
?> 
Смежные вопросы