Ребята, в ступоре, возник вопрос такой. Как записать переменную переданную методом ajax в сессию? Суть: Есть скрипт, который отрабатывается при клике на кнопку отправить. Отправляются в файл success.php два параметра имя и телефон. Тут все отлично, они действительно отправляются. Код (Javascript): <script> $(document).ready(function(){ $('#btn_one_step').click(function(){ // собираем данные с формы $(".loader").removeClass('hidden'); var name=$('#name_step').val(); var phone=$('#phone_step').val(); console.log(name, phone); // отправляем данные $.ajax({ url: "success.php", // куда отправляем type: "post", // метод передачи dataType: "json", // тип передачи данных data: { // что отправляем "name": name, "phone": phone }, // после получения ответа сервера success: function(data) { $('.messages').html(data.result); // выводим ответ сервера setTimeout(function() { $(".loader").addClass('hidden'); }, 50000) // 10 секунд } }); }); }); Вот файл success.php. Далее в файле success.php хочу сохранить в сессию имя и телефон . 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 [php]$_SESSION['phone'] = $_POST['phone']; $_SESSION['name'] = $_POST['name']; $name= "$_POST['name']; $phone= $_POST['phone']; //Для проверки запись в БД $query_count2 = "INSERT INTO CRM_ORDER SET client='".$name."', phone='".$phone."',time='".$date."',status='3',id_delivery='".$id_delivery."',source='0'"; mysqli_query($mysql,$query_count2) or die('Ошибка добавления в БД Заявки с обратной связи'); $zakaz_id = mysqli_insert_id($mysql);[/php] </script> Итог: В БД запись проходит, значит данные пришли успешно, а сессия не сохраняется. Почему не сохраняется сессия???? Что не так делаю??? Почему ошибка при session_start()??? Подскажите пожалуйста
Эта ошибка гуглится на раз два. Где-то был вывод до session_start(), вот и всё. Вывод может быть скрытым - в случае BOM
Дык оно открытым тестом тебе пишет что не может стартануть сессию, поскольку ты уже отправил заголовки Недавно где-то прочел что первый язык программирования который следует учить - это английский)) подпишусь)))
убрала строку подключения, все равно не сохраняется сессия --- Добавлено --- Да и без этой строки и с этой строки - суть одна, сессия не сохраняется... Лучше бы по делу написали что-то конечно
А кто сказал, что надо убрать какую-то строку? Надо убедиться, что до session_Start() нету вывода. В том числе скрытых символов типа BOM
Милая дама, вот тока не надо вот этого )) Вам все пишут по делу. У вас где-то до старта сессии идет отправка заголовков Где именно она у вас идет - знаете только вы и участники битвы экстрасенсов Если вы прикрепите файлы к своему сообщению - то может быть кто-то их проанализирует и поможет вам Считайте что это подсказка
Сейчас буду читать про скрытые символы, пока тут вообще пробел. Но вот еще хотела добавить, что если я задаю сессию вручную $_SESSION['test'] = 'Test'; то сессия сохраняется и выводится, скрин http://prntscr.com/pboz99 А вот почему-то именно PHP: $_SESSION['name'] = $_POST['name']; Не выводится, хотя в бд попадает с этим значением --- Добавлено --- Да причем тут фриланс, я учусь и задала вопрос. Два дня бьюсь над этим и уже просто запуталась, хочется от знающих людей совет, а не подстебов. Не хотела я обидеть.
HTML: <!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css"> <title>session</title> </head> <body> <div class="container"> <div class="row"> <div class="col-6"> <form id="form-1" action="success.php" method="post"> <div class="form-group"> <label for="exampleInputEmail1">Имя</label> <input type="text" class="form-control" name="name"> </div> <div class="form-group"> <label for="exampleInputPassword1">Телефон</label> <input type="phone" class="form-control" name="phone"> </div> <button type="submit" class="btn btn-primary">Отправить</button> </form> </div> </div> </div> <script src="https://code.jquery.com/jquery-3.4.1.min.js"></script> <script> $( "#form-1" ).submit(function( e ) { e.preventDefault(); let url = $(this).attr('action'); post = $(this).serialize(); $.post( url, post, function( data ) { if(data.error) { alert(data.error); } else { console.log(data); } }, "json"); }); </script> </body> </html> session.php PHP: <?php $args = [ 'name' => FILTER_SANITIZE_STRING, 'phone' => FILTER_SANITIZE_NUMBER_INT ]; $mesg = [ 'name' => 'error name', 'phone' => 'error phone' ]; $error = []; $post = filter_input_array(INPUT_POST, $args); if ( isset($post) ) { foreach($post as $key => $value) { if( empty($value) ) { $error['error'][] = $mesg[$key]; } } } if ( !empty($post) && empty($error) ) { session_start(); $_SESSION['phone'] = $post['phone']; $_SESSION['name'] = $post['name']; //записываем в базу echo json_encode($_SESSION); } else { echo json_encode($error); } ?> возможно запись в базу можно сделать такой: PHP: $stmt = mysqli_prepare("INSERT INTO `CRM_ORDER` SET `client`=?, `phone`=?, `time`=?, `status`=?, `id_delivery`=?, `source`=?"); mysqli_stmt_bind_param('ssssss', $name, $phone, $date, $status, $id_delivery, $source); $name = $post['name']; $phone = $post['phone']; $status = '3'; $source = '0'; mysqli_stmt_execute($stmt); $zakaz_id = mysqli_stmt_insert_id($stmt); echo json_encode($zakaz_id);
могу предположить, что PHP выводит какие-то предупреждения на $_POST['name'] - поэтому и заголовки попробуйте сделать так: PHP: @$_SESSION['name'] = $_POST['name']; или В САМОМ НАЧАЛЕ ЭТОГО СКРИПТА PHP: <?php ini_set('display_errors', 0); ini_set('display_startup_errors', 0); error_reporting(0);
Спасибо за Ваш труд))))) взяла ваш пример, сделала все точно также, сессия пуста... странно так, а у вас сессия сохранилась, вы пробовали? --- Добавлено --- Спасибо))) Попробовала сделать, как вы написали, тоже пусто...
Вы бы выложили где-то целиком свой код чтобы можно было его запустить у себя, иначе это можно годами искать где вы там запятую пропустили или еще чего)))