Не передается переменная через $_SESSION

Bazil

Доброго дня! Только начинаю осваивать PHP. Задача создать простую форму которая будет отдавать данные в mysql базу. Перед отправкой данных они должны вывестись на экран, для проверки. Далее после нажатия кнопки подтверждения должен выполниться sql запрос.
Есть два файла. Собственно сама форма.

HTML:
  1. <!DOCTYPE html>
  2.   <head>
  3.     <title>Добавление статьи</title>
  4.     <link href =«style/style.css» rel=«stylesheet»>
  5.   </head>
  6.   <body>
  7.   <form action=«scripts/create_article.php» method=«post»>
  8.   <p>Заголовок статьи (не больше 200 символов)<br/><input name=«title» size=«70» type=«text» reuired></p>  
  9.   <p>Основной текст статьи <br/><textarea cols=«170» rows=«40» name=«content» required></textarea></p>
  10.   <p><input type=«submit» value=«Отправить»></p>
  11.   </form>
  12.  
  13. </body>
  14.   </body>
  15. </html>

И скрипт предпросмотра и отправки данных

PHP:
  1. <?php
  2. require_once ‘connect.php’;
  3.  
  4.  
  5. if (isset($_POST[«submit_to_db»])) {
  6.  
  7.   echo $_SESSION[‘title’];
  8.   echo $_SESSION[‘content’];
  9.     $query = «INSERT INTO articles (title, content) VALUES (‘».$title.«‘, ‘».$content.«‘)»;
  10.     if (!$mysqli->query($query)) {
  11.     printf(«Сообщение ошибки: %sn«, $mysqli->error);
  12. }
  13. }
  14. else {
  15. $_SESSION[‘title’] = $_POST[‘title’];
  16. $_SESSION[‘content’] = $_POST[‘content’];
  17.  
  18. echo ‘<h1>’ . $_POST[‘title’] .  «</h1>» . «rn«;
  19. echo ‘<p>’ . $_POST[‘content’] . ‘</p>’;
  20.  
  21. }
  22.  
  23. ?>
  24.  
  25. <!DOCTYPE html>
  26. <html>
  27.   <head>
  28.     <title>Проверка заполненной формы</title>
  29.     <link href =»style/style.css» rel=»stylesheet»>
  30.   </head>
  31.   <body>
  32.   <form action=»create_article.php» method=»post»>
  33.   <p><input type=»submit» name=»submit_to_db» value=»Все нормально?»></p>
  34.   </form>
  35.  
  36. </body>
  37.   </body>
  38. </html>

При отправке данных из первой формы все хорошо. Но при нажатии кнопки «все нормально?» для отправки данных в базу, $_SESSION[‘title’] и $_SESSION[‘content’] оказываются пустыми. Новая строчка в базе данных создается, но с пустыми значениями в столбцах title и content. Видимо я плохо представляю что детально происходит при нажатии кнопки отправки данных при условии, что код обработки формы находится в том же файле где и форма. Слышал, что так лучше не делать, но все же решил не плодить множество файлов для обработки, по сути, одной формы.
Подскажите как быть?

 

ADSoft

нда.. собрано все самое неправильное что можно было )))
1. session_start() должны быть самой первой строкой, мало ли какие у вас символы и вывод в connect.php
2. логика — второй кусок формы с «подтверждением» у вас будет выводиться всегда, и при отправке первой формы и при отправке второй, и даже когда никто ничего не отправляет а зайти на страницу по адресу просто
3. SQL иньекция возможна
4. обычно перед записью в БД проверку данным делают…. а не пишут все что попало, в том числе и пустые строки
5. Так как запись в сессию идет всегда, когда это не вторая форма, то например заход по адресу скрипта хоть и будет по протоколу get — точно так же запишет в сессию что? пустые значения

 

Bazil

Да действительно connect.php выводил одну строку на экран, в этом все дело. Остальные замечания учту.
Спасибо!

 

don.bidon

Очень полезно

PHP:

хотя бы на dev-сервере.

 

miketomlin

Что пользователь в форме не может что ли проверить? Для пущей важности можно разместить сброшенный или установленный флажок «Я подтверждаю, что данные корректны».

 

don.bidon

Может там такое хитросношенное ТЗ ))

 

miketomlin

@don.bidon, может, но можно же сказать, что ТЗ – отстой и нужно делать так-то. Или ТС – раб, боящийся потерять заказ? Вообще по коду не скажешь, что это оплачиваемая работа. Заказчик – вдвойне дурак? :) Хотя вполне может быть :D
— Добавлено —
Сельский банк пилит ЛК доморощенными кадрами? :D
— Добавлено —
Вообще, если речь реально об articles, можно использовать флажок «черновик/опубликовано» прямо в таблице. Дефолтом – черновик, после подтверждения менять состояние на «опубликовано» ;)
— Добавлено —
P.S. При создании можно даже черновик публиковать по обычному адресу, но не показывать его в списках статей.
— Добавлено —
P.P.S. У нас во всех статейниках это именно так устроено, только вместо флажка обычно используется спец. категория «Черновик».

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *