Bazil
Доброго дня! Только начинаю осваивать PHP. Задача создать простую форму которая будет отдавать данные в mysql базу. Перед отправкой данных они должны вывестись на экран, для проверки. Далее после нажатия кнопки подтверждения должен выполниться sql запрос.
Есть два файла. Собственно сама форма.HTML:И скрипт предпросмотра и отправки данных
PHP:
<?php require_once ‘connect.php’; echo $_SESSION[‘title’]; echo $_SESSION[‘content’]; $query = «INSERT INTO articles (title, content) VALUES (‘».$title.«‘, ‘».$content.«‘)»; if (!$mysqli->query($query)) { } } else { $_SESSION[‘title’] = $_POST[‘title’]; $_SESSION[‘content’] = $_POST[‘content’]; echo ‘<h1>’ . $_POST[‘title’] . «</h1>» . «rn«; echo ‘<p>’ . $_POST[‘content’] . ‘</p>’; } ?> <!DOCTYPE html> <html> <head> <title>Проверка заполненной формы</title> <link href =»style/style.css» rel=»stylesheet»> </head> <body> <form action=»create_article.php» method=»post»> <p><input type=»submit» name=»submit_to_db» value=»Все нормально?»></p> </form> </body> </body> </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, может, но можно же сказать, что ТЗ – отстой и нужно делать так-то. Или ТС – раб, боящийся потерять заказ? Вообще по коду не скажешь, что это оплачиваемая работа. Заказчик – вдвойне дурак? Хотя вполне может быть
— Добавлено —
Сельский банк пилит ЛК доморощенными кадрами?
— Добавлено —
Вообще, если речь реально об articles, можно использовать флажок «черновик/опубликовано» прямо в таблице. Дефолтом – черновик, после подтверждения менять состояние на «опубликовано»
— Добавлено —
P.S. При создании можно даже черновик публиковать по обычному адресу, но не показывать его в списках статей.
— Добавлено —
P.P.S. У нас во всех статейниках это именно так устроено, только вместо флажка обычно используется спец. категория «Черновик».