0 / 0 / 2
Регистрация: 09.03.2013
Сообщений: 37
MySQL

Странное поведение скрипта

14.03.2016, 19:33. Показов 602. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Написал элементарный текст добавления данных в бд.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
include "ConnectDB.php";
//Функция очистки метода POST от мусора
function clearTrash ($value) {
return htmlspecialchars(trim(strip_tags($value)));
        
}
$header = clearTrash ($_POST['header']); // Принимаем данные из форм и записываем их в переманные
$text =   clearTrash ($_POST['text']);
$author = clearTrash ($_POST['author']);
$date = date("Y-m-d h-i-s"); // Дата для записи в бд
$sql = "INSERT INTO currentNews (headnews,newstext, 
newsdate,newsauthor) 
VALUES ('$header','$text','$date','$author')"; // Запись в бд
$mysqli->query($sql);
Сама форма:
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?
include 'NewsForm.php';
?>
<html>
<head>
  <meta charset="utf-8">
  <title>Тег META, атрибут charset</title>
 </head>
    <body>
    <form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
 <p>Заголовок статьи: <input type="text" name="header"></p>
 <p>Текст статьи:     <textarea rows="10" cols="45" name="text"></textarea></p>
 <p>Автор статьи:     <input type="text" name="author" /></p>
 <p><input type="submit" /></p>
    </form>
    </body>
</html>
Проблема была в том, что при открытие страницы скрипт самопроизвольно выполнялся и в бд прилетели пустые строки.

Т.к. я только учусь, я подумал, что нужно сделать проверку на заполненность форм.
Написал условие.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
include "ConnectDB.php";
//Функция очистки метода POST от мусора
    function clearTrash ($value) {
        return htmlspecialchars(trim(strip_tags($value)));
        
    } // Костыльные условия на проверку пустых полей
    if($_POST['header']==NULL) {
        echo "Please fill the header field!</br>";
    } 
    if($_POST['text']==NULL) {
        echo "Please fill the text field!</br>";
    }
    if($_POST['author']==NULL) {
        echo "Please fill the author field!</br>";
    } 
        if($_POST['header']!=NULL && $_POST['text']!=NULL && $_POST['author']!=NULL) {
            $header = clearTrash ($_POST['header']); // Принимаем данные из форм и записываем их в переманные
            $text =   clearTrash ($_POST['text']);
            $author = clearTrash ($_POST['author']);
            $date = date("Y-m-d h-i-s"); // Дата для записи в бд
            $sql = "INSERT INTO currentNews (headnews,newstext, 
                    newsdate,newsauthor) 
                    VALUES ('$header','$text','$date','$author')"; // Запись в бд
            $mysqli->query($sql);
        }
Ок вроде заработало, но после добаление следующих двух сток после $mysqli->query($sql);
Я получаю пустую страницу и сообщения, том, что поля формы пустые. Повторюсь форм на странице уже нет.
Что я добавил после $mysqli->query($sql);
PHP
1
2
header("Location: ".$_SERVER['PHP_SELF']);
exit;
Подскажите, как исправить столь досадную вещь?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.03.2016, 19:33
Ответы с готовыми решениями:

Странное поведение
привет всем. Пишу тут одну работку вот код добавления нового товара. Я использую поле Акция, если выбран yes появляется еще поле с новой...

Разъясните странное поведение sql запроса
Здравствуйте. Я по малости учусь делать запросы в базу, и мне непонятен один нюанс. если сделать вот такой запрос SELECT DISTINCT...

Странное поведение сервера при работе скрипта
Всем доброго, проблема такова: Я работаю со сборкой сервера XAMPP, у апача порты стандартные: 80,443 Есть скрипт загружающий файл...

9
 Аватар для Terintenos
0 / 0 / 0
Регистрация: 09.05.2015
Сообщений: 67
14.03.2016, 21:12
Передавай через AJAX, отправляй через PHP, и никаких проблем. Благодаря еще jQuery, можешь сделать много фишек, в том числе очищение полей и т.д без гемора.

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<html>
<head>
  <meta charset="utf-8">
  <title>Тег META, атрибут charset</title>
  function functBefore () {
  $("answer").text(Подождите, новость добавляется...);
}
 
   $(document).ready( function () {
      $("#submit").bind("click", function () {
                $.ajax ({
                    url: "newsform.php",
                    type: "POST",
                    data: ({ header: $("#header").val(), text: $("#text").val(), author: $("#author").val() }),
                    dataType: "html",
                    beforeSend: functBefore
                });
            });
   };);
 </head>
    <body>
 <span class="answer"></span>
 <p>Заголовок статьи: <input type="text" name="header" id="header"></p>
 <p>Текст статьи:     <textarea rows="10" cols="45" name="text" id="text"></textarea></p>
 <p>Автор статьи:     <input type="text" name="author" id="author" /></p>
 <p><input type="submit" id="submit" /></p>
 
    </body>
</html>
в newsform.php

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    require_once 'connectDB.php';
 
 
    $title = $_POST['header'];
    $text = $_POST['text'];
    $data = date("Y-m-d");
 
connectDB(); //подключили базу данных
    $result = $mysqli->query("INSERT INTO `article` (`id`, `title`,  `text`,`data`) VALUES (NULL, '$title', '', '$text',  '$data');");
closeDB(); // закрыли базу данных
 
    echo "Новость добавилась! Вы можете добавить еще раз новость";
 
 
?>
Добавлено через 6 минут
Внесу поправку:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function functBefore () {
  $("answer").text(Подождите, новость добавляется...);
}
        function functSucc (data) {
            $("answer").text (data);
        }
   $(document).ready( function () {
      $("#submit").bind("click", function () {
                $.ajax ({
                    url: "newsform.php",
                    type: "POST",
                    data: ({ header: $("#header").val(), text: $("#text").val(), author: $("#author").val() }),
                    dataType: "html",
                    beforeSend: functBefore,
                  success: functSucc
                });
            });
   };);
0
0 / 0 / 2
Регистрация: 09.03.2013
Сообщений: 37
14.03.2016, 21:36  [ТС]
Я еще нормально php не освоил, а вы мне ajax предлагаете
А по существу можете указать на причину проблемы?
0
 Аватар для Terintenos
0 / 0 / 0
Регистрация: 09.05.2015
Сообщений: 67
14.03.2016, 21:52
Таки ajax и js для таких случаях сейчас эффективен, поэтому рекомендую подучить основы js, ajax , а потом идти в пхп, синтаксис будет схож и будет легче
Ну а по существ:

HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?
include 'NewsForm.php';
?>
<html>
<head>
  <meta charset="utf-8">
  <title>Тег META, атрибут charset</title>
 </head>
    <body>
    <form action="NewsForm.php" method="post">
 <p>Заголовок статьи: <input type="text" name="header" required></p>
 <p>Текст статьи:     <textarea rows="10" cols="45" name="text" required></textarea></p>
 <p>Автор статьи:     <input type="text" name="author" / required></p>
 <p><input type="submit" /></p>
    </form>
    </body>
</html>
Просто вставляешь required (обязательные поля) и тогда проверка на пустоту не нужна, максимум можешь проверить на символы всякие и прочее, но в любом случае, просто делай следующим образом:

в newsForm просто принимаем и отправляем, наиболее просто:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
require_once 'connectDB.php';
 
 
    $title = htmlspecialchars $_POST['header'];
    $text = htmlspecialchars $_POST['text'];
    $author = htmlspecialchars $_POST['author'];
    $data = date("Y-m-d");
 
connectDB(); //подключили базу данных
    $result = $mysqli->query("INSERT INTO `article` (`id`, `title`,  `text`, `author`, `data`) VALUES (NULL, '$title', '', '$text',  '$author', '$data');");
closeDB(); // закрыли базу данных
    
 
?>
htmlspecialchars даст возможность принять все как html, и никакие скрипты не пройдут, если не ошибся).

Добавлено через 8 минут
Ну и на всякий случай добавь проверки, если запрос не удался, выдает ошибку, если удался, перекидывает обратно. Честно говоря, в пхп это действительно все геморно, поэтому я прежде чем стал углубляться в web, прочел уйму статей, с чего начать
0
Эксперт PHP
3897 / 3235 / 1353
Регистрация: 01.08.2012
Сообщений: 10,900
14.03.2016, 23:01
Цитата Сообщение от Baac Посмотреть сообщение
Я получаю пустую страницу и сообщения, том, что поля формы пустые.
Логично, ведь вы сами написали условие - показывать ошибку, если не существует заполненное поле. А его не существует, поскольку после отправки формы вы делаете редирект на эту же страницу, и POST-данные от предыдущего запроса пропадают.

Исправить примерно так:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
// Если пришла форма
if(!empty($_POST))
{
    if(!isset($_POST['header'], $_POST['text'], $_POST['author']))
        $error = 'Заполнены не все поля.';
 
    if(empty($error))
    {
        // Здесь код добавления данных в БД.
    }
 
    // Здесь не забудем вывод ошибки, если она есть
}
Цитата Сообщение от Baac Посмотреть сообщение
PHP
1
2
3
function clearTrash ($value) {
return htmlspecialchars(trim(strip_tags($value)));
}
Зачем htmlspecialchars на входе?
Используйте mysql_real_escape_string для защиты от SQL-инъекций.

Не по теме:

Цитата Сообщение от Terintenos Посмотреть сообщение
рекомендую подучить основы js, ajax , а потом идти в пхп
Имхо плохой совет. Гораздо более сложный язык, да и не вижу смысла использовать ajax без необходимости, в данном случае можно обойтись обычной формой.



Цитата Сообщение от Terintenos Посмотреть сообщение
Просто вставляешь required (обязательные поля) и тогда проверка на пустоту не нужна
Wat? Проверки на сервере нужны всегда.
0
 Аватар для Terintenos
0 / 0 / 0
Регистрация: 09.05.2015
Сообщений: 67
14.03.2016, 23:09
Цитата Сообщение от Jodah Посмотреть сообщение
Имхо плохой совет. Гораздо более сложный язык, да и не вижу смысла использовать ajax без необходимости, в данном случае можно обойтись обычной формой.

Не по теме:

Не сказал бы, мне JS легче учить, чем PHP. Да и JS применяется на данный момент чаще, чем PHP (я про получении данных). Использование AJAX упрощает намного работу.


Цитата Сообщение от Jodah Посмотреть сообщение
Wat? Проверки на сервере нужны всегда.
Ну Вы учитывайте, что у него простая форма. Да и, собственно, я написал потом, что можно добавить всякие проверки. А required просто уменьшит еще одну проверку.
0
Эксперт PHP
3897 / 3235 / 1353
Регистрация: 01.08.2012
Сообщений: 10,900
14.03.2016, 23:20

Не по теме:

Цитата Сообщение от Terintenos Посмотреть сообщение
Не сказал бы, мне JS легче учить, чем PHP.
Возможно, но я говорю про среднюю температуру по больнице. В целом PHP новичкам даётся легче, хотя не для всех это так.
Цитата Сообщение от Terintenos Посмотреть сообщение
Да и JS применяется на данный момент чаще, чем PHP (в аналогичных ситуациях).
Откуда взята статистика?
Цитата Сообщение от Terintenos Посмотреть сообщение
Использование AJAX упрощает намного работу.
Я бы сказал, усложняет. Вместо стандартного HTML - ещё один язык, ещё одна технология, ещё одна точка отказа, не говоря уже о том, что её надо в общую архитектуру приложения вписывать (если только приложение изначально не написано, скажем, на той же ноде). Тем более, слабые ПК "очень любят" продвинутые сайты на JS, аж виснут от радости. :)


Цитата Сообщение от Terintenos Посмотреть сообщение
Ну ты учитывай, что у него простая форма.
Не понимаю, как простота формы влияет на необходимость проверки пришедших данных.
Цитата Сообщение от Terintenos Посмотреть сообщение
А required просто уменьшит еще одну проверку.
Не уменьшит. Любые проверки на JS - для удобства юзера, потенциальный взломщик может удалить этот атрибут из HTML-кода и отправить пустое поле.
0
 Аватар для Terintenos
0 / 0 / 0
Регистрация: 09.05.2015
Сообщений: 67
15.03.2016, 09:38
Цитата Сообщение от Jodah Посмотреть сообщение
Откуда взята статистика?
С опыта. С кем бы я не работал, за какой-бы прожект не брался (что-то отредактировать), везде в большинство
случаях был JS+AJAX, PHP играл только роль с базой, в остальных случаях всё JS. Давно пора привыкнуть, что JS заменяет в большинство случаях PHP. Да бы не оффтопить, закончим на том, что это мое имхо. Удачи
Цитата Сообщение от Jodah Посмотреть сообщение
Любые проверки на JS - для удобства юзера
В этом и суть, JS дает возможность делать данные операции без обновление странички. Конечно же на больших проектах с JS не ограничиться, но на простеньких блогах и т.п оно самый раз.
0
15.03.2016, 10:23

Не по теме:

Цитата Сообщение от Terintenos Посмотреть сообщение
Давно пора привыкнуть, что JS заменяет в большинство случаях PHP.
Ну только не заменяет, а может заменить, что не всегда оправданно. Но это всё таки не наш случай. Мы же говорим об отправке формы, и здесь 2 варианта - HTML форма или AJAX. И я говорю, что в данном случае AJAX избыточен. А PHP в любом случае принимает данные.

Цитата Сообщение от Terintenos Посмотреть сообщение
В этом и суть, JS дает возможность делать данные операции без обновление странички.
Причём здесь обновление странички? Разговор ведь о другом - любые проверки через JS легко обходятся злоумышленником, поэтому хоть одна проверка в JS, хоть миллион, сервер всегда должен относиться к данным как потенциально опасным. А про полезность проверок в JS я не спорю, они действительно и трафик экономят, и юзеру удобней.

0
15.03.2016, 13:29

Не по теме:

Цитата Сообщение от Jodah Посмотреть сообщение
Причём здесь обновление странички? Разговор ведь о другом - любые проверки через JS легко обходятся злоумышленником, поэтому хоть одна проверка в JS, хоть миллион, сервер всегда должен относиться к данным как потенциально опасным. А про полезность проверок в JS я не спорю, они действительно и трафик экономят, и юзеру удобней.
Значит я не так высказался. Ты сам ответил за меня, JS действительно удобней в таких моментах. Просто мое имхо, в больших проектах или вообще для себя, как опыт, стоит привыкать использование JS и т.д, конечно же с проверками и на стороне PHP. Я сужу по моему опыту, поэтому не могу не соглашаться, ибо у нас позиции в целом разные, и исходят опять же из-за опыта, а некоторые вовсе "по дефолту".

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.03.2016, 13:29
Помогаю со студенческими работами здесь

Странное поведение mail
Привет, кто может подсказать, что вообще происходит. Пытаюсь отправить почту с аттачем. Взял кучу найденых скриптов в интернете для...

Странное поведение скрипта
Есть система оценок отделов компании. Оценки ставятся ежемесячно. Это обычная html-форма + php-обработчик. В этом обработчике есть...

Странное поведение vb скрипта
Доброго времени суток! Пишу на vbscript следующий код (не для браузера): Set WShShell=create object(&quot;WScript.Shell&quot;) Выдаёт...

Странное поведение скрипта
Использовала скрипт по увеличению картинки с таким кодом: &lt;html&gt; &lt;head&gt; &lt;title&gt;Изменение размера...

Странное поведение переменной при подключении скрипта.
Привет. Есть файл скрипта: test.js var cool = {id:5}; Теперь самое интересное! Подключаем этот файл из *.html методом раз: ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

Новые блоги и статьи
Тестирование Pull Request в Kubernetes с vCluster
Mr. Docker 19.07.2025
Часто сталкиваюсь с серьезной дилемой при настройке тестовых окружений для проверки Pull Request в Kubernetes. С одной стороны, каждый PR требует изолированной среды — только так можно гарантировать,. . .
Мой 7 минутный ролик с крамольным предложением про шахматы, предлагаю заценить
_Ivana 18.07.2025
p2UhJNMGY94
Десять Middleware Node.js для эффективного кодинга
Reangularity 18.07.2025
Когда я только начинал работать с Node. js, количество пакетов в npm меня буквально парализовало. Сегодня их больше 1,3 миллиона — попробуй разберись, что стоит твоего внимания, а что нет. Я потратил. . .
Context и глубины Android
mobDevWorks 18.07.2025
В Android разработки Context напоминает воздух - он везде, жизненно необходим, но мало кто может детально объяснить его природу. Мы привыкли получать его как параметр, передавать дальше и. . .
Результаты исследования от команды MCM (июль 2025 г.)
Programma_Boinc 18.07.2025
Результаты исследования от команды MCM (июль 2025 г. ) Как сообщалось в наших предыдущих публикациях, мы изучаем гены, которые имеют наибольший рейтинг и ассоциируются с различными видами рака, в. . .
ИИ-чатбот на React с OpenAI и LangChain.js
Reangularity 17.07.2025
React давно стал для меня золотым стандартом фронтенд-разработки. Его компонентная структура, виртуальный DOM и однонаправленный поток данных идеально подходят для создания динамичных интерфейсов. . .
Пишем адаптер для локального хранилища S3 на C#
stackOverflow 16.07.2025
Разработка современных приложений часто требует интеграции с объектными хранилищами, и Amazon S3 стал де-факто стандартом в этой области. Однако работа с облачными сервисами в процессе разработки. . .
Старые замки
kumehtar 16.07.2025
Смотрел тут фото, попались пара старых замков. И сразу бросилось в глаза из отличие. Например: Замок Бистон, в англии. Разрушенное сооружение. Но - не испорченное людьми, по крайней мере - на. . .
Java и Eclipse Store: Сверхбыстрые приложения с In-Memory DB
Javaican 15.07.2025
Eclipse Store — это микро-движок персистентности для Java, который позволяет хранить и извлекать нативные Java-объекты без необходимости преобразования данных или использования объектно-реляционного. . .
EmBitz, создание проекта, отладка, прошивка
locm 15.07.2025
Создание проекта для Blue Pill (STM32F103C8T6) в EmBitz 2. 30, написания кода blink, запуск отладки в ОЗУ, заливка релизной прошивки во flash используя ST-Link и др. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru