За последние 24 часа нас посетили 20694 программиста и 1012 роботов. Сейчас ищут 365 программистов ...

Как записать переменную переданную методом ajax в сессию?

Тема в разделе "PHP для новичков", создана пользователем RD1824, 27 сен 2019.

Метки:
  1. RD1824

    RD1824 Новичок

    С нами с:
    11 сен 2019
    Сообщения:
    10
    Симпатии:
    0
    Ребята, в ступоре, возник вопрос такой. Как записать переменную переданную методом ajax в сессию?

    Суть:
    Есть скрипт, который отрабатывается при клике на кнопку отправить. Отправляются в файл success.php два параметра имя и телефон. Тут все отлично, они действительно отправляются.
    Код (Javascript):
    1.   <script>
    2.             $(document).ready(function(){
    3.                 $('#btn_one_step').click(function(){
    4.                     // собираем данные с формы
    5.                     $(".loader").removeClass('hidden');
    6.                     var name=$('#name_step').val();
    7.                     var phone=$('#phone_step').val();
    8.                     console.log(name, phone);
    9.                    
    10.                
    11.                     // отправляем данные
    12.                     $.ajax({
    13.                         url: "success.php", // куда отправляем
    14.                         type: "post", // метод передачи
    15.                         dataType: "json", // тип передачи данных
    16.                         data: { // что отправляем
    17.                             "name": name,
    18.                             "phone": phone
    19.                         },
    20.                         // после получения ответа сервера
    21.                     success: function(data) {
    22.                         $('.messages').html(data.result); // выводим ответ сервера
    23.                         setTimeout(function() {
    24.                             $(".loader").addClass('hidden');
    25.                         }, 50000) // 10 секунд
    26.                         }
    27.                     });
    28.                 });
    29.             });
    30.  
    31.  
    32. Вот файл success.php. Далее в файле success.php хочу сохранить в сессию имя и телефон .  
    33.  
    34. include 'header.php'; // в header.php стартует сессия, но выдает ошибку  Warning: session_start(): Cannot start session when headers already sent in /var/www/u0541974/data/www/domen/header.php on line 2
    35. [php]$_SESSION['phone'] = $_POST['phone'];
    36. $_SESSION['name'] = $_POST['name'];
    37.  
    38. $name= "$_POST['name'];
    39. $phone= $_POST['phone'];
    40. //Для проверки запись в БД
    41. $query_count2 = "INSERT INTO CRM_ORDER SET client='".$name."', phone='".$phone."',time='".$date."',status='3',id_delivery='".$id_delivery."',source='0'";
    42.        mysqli_query($mysql,$query_count2) or die('Ошибка добавления в БД Заявки с обратной связи');
    43.        $zakaz_id = mysqli_insert_id($mysql);[/php]
    44.        </script>


    Итог: В БД запись проходит, значит данные пришли успешно, а сессия не сохраняется. Почему не сохраняется сессия???? Что не так делаю??? Почему ошибка при session_start()??? Подскажите пожалуйста
     
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.553
    Симпатии:
    1.754
    Эта ошибка гуглится на раз два. Где-то был вывод до session_start(), вот и всё. Вывод может быть скрытым - в случае BOM
     
    Roman __construct нравится это.
  3. Roman __construct

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

    С нами с:
    27 апр 2019
    Сообщения:
    1.270
    Симпатии:
    112
    Дык оно открытым тестом тебе пишет что не может стартануть сессию, поскольку ты уже отправил заголовки :)

    Недавно где-то прочел что первый язык программирования который следует учить - это английский)) подпишусь)))
     
    mkramer нравится это.
  4. RD1824

    RD1824 Новичок

    С нами с:
    11 сен 2019
    Сообщения:
    10
    Симпатии:
    0
    убрала строку подключения, все равно не сохраняется сессия
    --- Добавлено ---
    Да и без этой строки и с этой строки - суть одна, сессия не сохраняется... Лучше бы по делу написали что-то конечно
     
  5. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.553
    Симпатии:
    1.754
    А кто сказал, что надо убрать какую-то строку? Надо убедиться, что до session_Start() нету вывода. В том числе скрытых символов типа BOM
     
  6. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.748
    Симпатии:
    1.321
    Адрес:
    Лень
    с такими фразами во фриланс го, ибо автоматом послан
     
  7. Roman __construct

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

    С нами с:
    27 апр 2019
    Сообщения:
    1.270
    Симпатии:
    112
    Милая дама, вот тока не надо вот этого ))

    Вам все пишут по делу.

    У вас где-то до старта сессии идет отправка заголовков

    Где именно она у вас идет - знаете только вы и участники битвы экстрасенсов

    Если вы прикрепите файлы к своему сообщению - то может быть кто-то их проанализирует и поможет вам

    Считайте что это подсказка
     
  8. RD1824

    RD1824 Новичок

    С нами с:
    11 сен 2019
    Сообщения:
    10
    Симпатии:
    0
    Сейчас буду читать про скрытые символы, пока тут вообще пробел.
    Но вот еще хотела добавить, что если я задаю сессию вручную
    $_SESSION['test'] = 'Test';
    то сессия сохраняется и выводится, скрин http://prntscr.com/pboz99

    А вот почему-то именно
    PHP:
    1. $_SESSION['name'] = $_POST['name'];
    Не выводится, хотя в бд попадает с этим значением
    --- Добавлено ---
    Да причем тут фриланс, я учусь и задала вопрос. Два дня бьюсь над этим и уже просто запуталась, хочется от знающих людей совет, а не подстебов. Не хотела я обидеть.
     
  9. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    HTML:
    1. <!doctype html>
    2. <html lang="en">
    3.     <meta charset="utf-8">
    4.     <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    5.     <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css">
    6.     <title>session</title>
    7. </head>
    8. <div class="container">
    9.     <div class="row">
    10.         <div class="col-6">
    11.             <form id="form-1" action="success.php" method="post">
    12.                 <div class="form-group">
    13.                     <label for="exampleInputEmail1">Имя</label>
    14.                     <input type="text" class="form-control" name="name">
    15.                 </div>
    16.                 <div class="form-group">
    17.                     <label for="exampleInputPassword1">Телефон</label>
    18.                     <input type="phone" class="form-control" name="phone">
    19.                 </div>
    20.                 <button type="submit" class="btn btn-primary">Отправить</button>
    21.             </form>
    22.         </div>
    23.     </div>
    24. </div>
    25. <script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
    26. $( "#form-1" ).submit(function( e ) {
    27.     e.preventDefault();
    28.  
    29.     let url = $(this).attr('action');
    30.         post = $(this).serialize();
    31.  
    32.     $.post( url, post, function( data )
    33.     {
    34.         if(data.error)
    35.         {
    36.             alert(data.error);
    37.         }
    38.         else
    39.         {
    40.             console.log(data);
    41.         }
    42.     }, "json");
    43. });
    44. </body>
    45. </html>
    session.php

    PHP:
    1. <?php
    2.    $args = [
    3.     'name' => FILTER_SANITIZE_STRING,
    4.     'phone' => FILTER_SANITIZE_NUMBER_INT
    5. ];
    6. $mesg = [
    7.     'name' => 'error name',
    8.     'phone' => 'error phone'
    9. ];
    10.  
    11. $error = [];
    12. $post = filter_input_array(INPUT_POST, $args);
    13. if ( isset($post) )
    14. {
    15.     foreach($post as $key => $value)
    16.     {
    17.         if( empty($value) )
    18.         {
    19.             $error['error'][] = $mesg[$key];
    20.         }
    21.     }
    22. }
    23.  
    24. if ( !empty($post) && empty($error) )
    25. {
    26.     session_start();
    27.  
    28.     $_SESSION['phone'] = $post['phone'];
    29.     $_SESSION['name'] = $post['name'];
    30.  
    31.     //записываем в базу
    32.     echo json_encode($_SESSION);
    33. }
    34. else
    35. {
    36.     echo json_encode($error);
    37. }
    38. ?>
    возможно запись в базу можно сделать такой:
    PHP:
    1. $stmt = mysqli_prepare("INSERT INTO `CRM_ORDER` SET `client`=?, `phone`=?, `time`=?, `status`=?, `id_delivery`=?, `source`=?");
    2.     mysqli_stmt_bind_param('ssssss', $name, $phone, $date, $status, $id_delivery, $source);
    3.  
    4.     $name = $post['name'];
    5.     $phone = $post['phone'];
    6.     $status = '3';
    7.     $source = '0';
    8.  
    9.     mysqli_stmt_execute($stmt);
    10.     $zakaz_id = mysqli_stmt_insert_id($stmt);
    11.  
    12.     echo json_encode($zakaz_id);
     
    #9 Artur_hopf, 27 сен 2019
    Последнее редактирование: 27 сен 2019
  10. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.748
    Симпатии:
    1.321
    Адрес:
    Лень
    Ну ?
    И ? дальше действия по ошибке какие ?
     
  11. Roman __construct

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

    С нами с:
    27 апр 2019
    Сообщения:
    1.270
    Симпатии:
    112
    могу предположить, что PHP выводит какие-то предупреждения на $_POST['name'] - поэтому и заголовки

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

    PHP:
    1. @$_SESSION['name'] = $_POST['name'];
    или В САМОМ НАЧАЛЕ ЭТОГО СКРИПТА

    PHP:
    1. <?php
    2. ini_set('display_errors', 0);
    3. ini_set('display_startup_errors', 0);
     
  12. RD1824

    RD1824 Новичок

    С нами с:
    11 сен 2019
    Сообщения:
    10
    Симпатии:
    0
    Спасибо за Ваш труд)))))

    взяла ваш пример, сделала все точно также, сессия пуста... странно так, а у вас сессия сохранилась, вы пробовали?
    --- Добавлено ---

    Спасибо))) Попробовала сделать, как вы написали, тоже пусто...
     
  13. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.748
    Симпатии:
    1.321
    Адрес:
    Лень
    говнокод
     
  14. Roman __construct

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

    С нами с:
    27 апр 2019
    Сообщения:
    1.270
    Симпатии:
    112
    Вы бы выложили где-то целиком свой код чтобы можно было его запустить у себя, иначе это можно годами искать где вы там запятую пропустили или еще чего)))