За последние 24 часа нас посетили 18408 программистов и 1605 роботов. Сейчас ищут 947 программистов ...

массив в сессии или как сохранять $_SESSION['arr'] в ajax

Тема в разделе "JavaScript и AJAX", создана пользователем kuzroman, 30 ноя 2010.

  1. kuzroman

    kuzroman Активный пользователь

    С нами с:
    26 ноя 2010
    Сообщения:
    34
    Симпатии:
    0
    Доброго времени суток.

    Сейчас тоже делаю сравнение товаров. На php все готово.
    вопрос в другом, как сделать кнопочку добавить в сравнение да еще чтобы страница не перезагружалась))
    читаю, смотрю как другие делают на jquery в основном.

    у меня пока получается подгружать др. страницу вот таким простым способом:
    Это например файл a.php





    здесь начало сессии и код страницы, затем кнопка:

    HTML:
    1.      <form id="myForm">  
    2.         <input type="hidden" id="iduni" value="<? echo $iduni ?>" >  
    3.         <input type="submit" value="добавить к сравнению">  
    4.     </form>  
    5.     <div id="content"></div>  
    [js] <script>
    $(document).ready(function(){

    $('#myForm').submit(function(){
    $.ajax({
    type: "POST",
    url: "v_sravnenie.php",
    data: "iduni="+$("#iduni").val(),
    success: function(html){
    $("#content").html(html);
    }
    });
    return false;
    });

    });
    </script> [/js]

    далее опять код страницы...






    в файле v_sravnenie.php следующий код:


    PHP:
    1.     $arr_sravnenie = array() ;
    2.     $_SESSION['arr_sravnenie'] = $arr_sravnenie ;
    3.    
    4.     if (array_search($_REQUEST['iduni'], $_SESSION['arr_sravnenie']) === false)
    5.     $_SESSION['arr_sravnenie'][] = $_REQUEST['iduni'];
    6.  
    Но проблема в том что для сравнения товаров я использую сессию, а что получается:
    обрабатывается сначала весь php код на сервере, затем человек нажимает на кнопку добавить в сравнение и на сервере идет обработка файла v_sravnenie.php, а сессия с массивом уже в первоначальный php код не возвращается.


    Это рассуждение вслух)) если я неправ подскажите как все происходит.

    Пробовал вставлять session_start(); во код v_sravnenie.php, но тут выдается ошибка:
    Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /www/pxel/www/htdocs/v_sravnenie.php:2) in /www/pxel/www/htdocs/v_sravnenie.php on line 24

    я так понимаю что это из за того что сессия должна начинаться перед заголовкам страницы a.php

    В общем как быть и что делать???
    И вообще как правильно мне сохранять и передавать массив в сессии,
    с помощью jquery или ajax не важно главное простота и работа???
     
  2. Mat

    Mat Активный пользователь

    С нами с:
    12 дек 2006
    Сообщения:
    391
    Симпатии:
    0
    я бы обратил внимание на LocalStorage, благо поддерживаается уже всеми браузерами и сравнивал непосредственно на клиенте. Ну а если на серваке, то пиши в табличку какую нибудь, что с чем сравниваешь... да сравнивай сколько угодно, кто мешает?
     
  3. kuzroman

    kuzroman Активный пользователь

    С нами с:
    26 ноя 2010
    Сообщения:
    34
    Симпатии:
    0
    Вы имеете в виду чтобы создать в БД табл и заносить в неё значения куки и значения id выбираемых пользователями?

    А на счет LocalStorage может ссылочку дадите на примеры, их что то маловато. как объявлять и как выводить в echo хотя бы.
     
  4. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    1)Нет, это из-за того, что сессия должна начинаться до любого вывода пользователю. У Вас он начинается во второй строчке. Погуглите на тему этой ошибки.
    2)Где Вы ожидаете увидеть результат?
     
  5. kuzroman

    kuzroman Активный пользователь

    С нами с:
    26 ноя 2010
    Сообщения:
    34
    Симпатии:
    0
    Результат мне нужен такой:
    Чтобы при нажатии на кнопку переменная $id (или $_GET['id'] неважно) заносилась в массив и путешествовала в месте с пользователем (по сессии или еще как) по другим страницам, у меня все это реализовано в php (но у меня страница перезагружается, а нужно чтобы все оставалось ровно, вроде как на яндекс маркет: человек нажал на добавить к сравнению и все, полазил еще где, потом нажал кнопку сравнения товаров и вуаля)

    повторюсь все готово кроме реализации с кнопкой.

    я ожидаю увидеть при обработке a.php при нажатии на кнопку надпись: Array ( [0] => 18976 ) я это тоже сделал,
    вопрос как сохранять и передавать этот массив дальше.
     
  6. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    1)a.php уже закончил работу.

    2)Если вы уже сделали, что появляется Array ( [0] => 18976 ) при нажатии на кнопку, то в чем проблема? На сервер сообщение посылается. В сессию/базу пишется. Обратно выводится..
     
  7. kuzroman

    kuzroman Активный пользователь

    С нами с:
    26 ноя 2010
    Сообщения:
    34
    Симпатии:
    0
    Извините я наверное не правильно выразился. Первое ваше утверждение верно.

    А во втором (прикрепляемом с помощью джей квери ) файле у меня сейчас такой код:

    PHP:
    1.  <?
    2.     $arr_sravnenie = array() ;
    3.     $_REQUEST['arr_sravnenie'] = $arr_sravnenie ;
    4.  
    5.    
    6.     if (array_search($_REQUEST['iduni'], $_REQUEST['arr_sravnenie']) === false)
    7.     $_REQUEST['arr_sravnenie'][] = $_REQUEST['iduni'];
    8.    
    9.     echo "2)";
    10.     print_r ( $_REQUEST['arr_sravnenie']) ;
    11.  ?>
    т.е. как видно значение к нам попадает не из сессии.))
    Сессия думаю здесь не будет работать, т.к. ее нельзя объявлять во втором файле.

    Тогда вопрос, как то что я вывел на экран (print_r ( $_REQUEST['arr_sravnenie']) ;) перенести на следующую страницу?
     
  8. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Он не прикрепляется, мы к нему обращаемся.

    Почему нельзя?
     
  9. kuzroman

    kuzroman Активный пользователь

    С нами с:
    26 ноя 2010
    Сообщения:
    34
    Симпатии:
    0
    Ну я так решил потому, что при объявлении во втором файле session_start(); выдавалась ошибка.
    Сразу оговорюсь что я в php не профи а среднячок и многих моментов грамотного объявления сессии не знаю.

    попробовал сделать так:

    PHP:
    1. <?
    2.              session_name('SID'); //  без этого объявления тоже пробовал (все одно)
    3.  
    4.     $arr_sravnenie = array() ;
    5.     //$_REQUEST['arr_sravnenie'] = $arr_sravnenie ;
    6.     $_SESSION['arr_sravnenie'] = $arr_sravnenie ;
    7.    
    8.     if (array_search($_REQUEST['iduni'], $_SESSION['arr_sravnenie']) === false)
    9.     $_SESSION['arr_sravnenie'][] = $_REQUEST['iduni'];
    10.    
    11.     echo "2)";  print_r ( $_SESSION['arr_sravnenie']) ;
    12. ?>
    При открытии новой страницы выводит последнее id.
    такое ощущение что в сессию ничего не попадает.

    Может подскажете как ее тут более грамотно объявить.
     
  10. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Вы же писали что пробовали сделать session_start() и получили ошибку. Я Вам дал информацию чтобы исправить эту ошибку. Вы ее исправили?
     
  11. kuzroman

    kuzroman Активный пользователь

    С нами с:
    26 ноя 2010
    Сообщения:
    34
    Симпатии:
    0
    Да спасибо. Сделал session_start() , ошибка больше не появляется.

    Спасибо вам огромное. У меня все заработало! =)))
     
  12. kuzroman

    kuzroman Активный пользователь

    С нами с:
    26 ноя 2010
    Сообщения:
    34
    Симпатии:
    0
    Ну точнее не все((
    у меня получается что session_start(); на всех страницах передает свой
    PHP:
    1. print_r ( $_SESSION['arr_sravnenie'] ) ;
    а при нажатии на кнопку и выводе print_r ( $_SESSION['arr_sravnenie'] ) ; выводит свой массив.))
    Бред какой то...
     
  13. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Может быть в этом
    Код (Text):
    1. session_name('SID')
    дело?
     
  14. kuzroman

    kuzroman Активный пользователь

    С нами с:
    26 ноя 2010
    Сообщения:
    34
    Симпатии:
    0
    Да вы снова правы. Теперь все правильно работает. Вы не представляете как вы мне помогли!!! Спасибо Вам.
     
  15. Mat

    Mat Активный пользователь

    С нами с:
    12 дек 2006
    Сообщения:
    391
    Симпатии:
    0
  16. kuzroman

    kuzroman Активный пользователь

    С нами с:
    26 ноя 2010
    Сообщения:
    34
    Симпатии:
    0
    Юноша)) не все знают "англицкий" язык. Может быть когда то у меня и на него время хватит, но пока...
    пока ява и php в ближайших перспективах))