Array_Push не добавляет в конец массива, он заменяет весь массив - PullRequest
0 голосов
/ 28 января 2012

Я попытался создать небольшую функцию закладок для моего сайта. Пользователи могут нажать на «.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);
           });  
       });

Вот код для "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.

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

Ответы [ 2 ]

0 голосов
/ 28 января 2012

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

<?php
session_start();

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

ВЫБРАТЬ * ОТ примера ГДЕ 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'];
     }
}
?>
0 голосов
/ 28 января 2012

Сценарий повторяет названия продуктов, только если вы опубликовали "избавиться"

Также вы можете написать, если это так:

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

Сначала проверяется isset (). Также вы можете дополнительно проверить на

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