Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
2 / 2 / 1
Регистрация: 07.12.2013
Сообщений: 34

Двойная запись данных в БД из формы HTML

07.12.2013, 02:04. Показов 3597. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем спецам!
А кто знает почему при добавлении записи в таблицу БД из формы HTML, записывается две записи. Одна с пустыми данными а вторая с заполненными. И разница внесения этих данных в 2 секунды.
Миниатюры
Двойная запись данных в БД из формы HTML  
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.12.2013, 02:04
Ответы с готовыми решениями:

Запись данных из html формы в БД
Здравствуйте, никогда не имел дел с php, а сейчас понадобилось передать данные из формы в базу. Решил попробовать сделать простейший...

Запись данных из формы с HTML страницы в файл
Подскажите плиз, совсем клинить стало, как можно без использования всяческих скриптов и языков, типа ASP, PHP и т.д. записать данные из...

Новая запись формы-1 на основании данных формы-2
Здравствуйте! В процессе работы наткнулся на очередную трудность - приложил файл.

24
 Аватар для romchiksoad
1957 / 796 / 89
Регистрация: 03.11.2009
Сообщений: 3,066
Записей в блоге: 2
07.12.2013, 07:26
classic1698, потому, что код, который обрабатывает форму, так написан.
0
2 / 2 / 1
Регистрация: 07.12.2013
Сообщений: 34
07.12.2013, 18:18  [ТС]
Цитата Сообщение от romchiksoad Посмотреть сообщение
classic1698, потому, что код, который обрабатывает форму, так написан.
Ну это вряд ли!!!

файл insert_data.php
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
 include ('connect.php')
 
$name = $_POST['name'];
$phone = $_POST['phone'];
$email = $_POST['email'];
// и т. д.
 
 $sql = 'INSERT INTO forms (name, phone, email, ... и т.д.)
 VALUES(
         "'.mysql_real_escape_string($name).'",
         "'.mysql_real_escape_string($phone).'",
         "'.mysql_real_escape_string($email).'"
         и т. д.
      )';
?>
в connect.php обычное подключение.

Ну собственно и всё!!!
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
07.12.2013, 19:30
Цитата Сообщение от classic1698 Посмотреть сообщение
Ну это вряд ли!!!
и правда. С учетом того, что
Цитата Сообщение от classic1698 Посмотреть сообщение
Ну собственно и всё!!!
Не может добавиться ни одной строчки, т.к. никакого запроса к БД не выполняется.
1
2 / 2 / 1
Регистрация: 07.12.2013
Сообщений: 34
07.12.2013, 23:17  [ТС]
Цитата Сообщение от KOPOJI Посмотреть сообщение
и правда. С учетом того, что

Не может добавиться ни одной строчки, т.к. никакого запроса к БД не выполняется.
Ну собственно не понимаю зачем Вы решили написать... Видимо Вам хотелось как-то проявиться. Данные как Вы могли заметить по картинке, добавляются. И если я не написал код до конца, это не значит что его нет.
Вот конец кода:
PHP
1
2
3
4
5
6
 mysql_query("SET NAMES utf8");
 
 if(!mysql_query($sql))
 {echo '<center><p><b>Ошибка при добавлении данных!</b></p></center>';} 
 else 
 {echo '<center><p><b>Данные добавлены!</b></p></center>';}
0
 Аватар для romchiksoad
1957 / 796 / 89
Регистрация: 03.11.2009
Сообщений: 3,066
Записей в блоге: 2
08.12.2013, 00:26
classic1698, ну это только часть полноценного "web-приложения", т.к. есть еще часть, которая передает данные в этот скрипт. В любом случае, стоит проверять есть ли необходимые данные для записи. Понимаете о чем я? Добавьте условие, проверяющее пустой суперглобальный массив $_POST или нет. И только если он не пуст, то проделываете все эти "махинации", которые Вы тут потрудились разместить.

Добавлено через 4 минуты
classic1698, на всякий случай скажу, что можно еще проверить есть ли необходимые элементы в нем ($_POST) путем полного их перечисления либо проверяя какое-то одно (к примеру, $_POST['name'] или $_POST['submit'] (если есть в форме элемент с таким именем)). Обычно присваивают имя для кнопки submit и проверяют его на наличие в $_POST.
1
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
08.12.2013, 00:59
Цитата Сообщение от classic1698 Посмотреть сообщение
Ну собственно не понимаю зачем Вы решили написать... Видимо Вам хотелось как-то проявиться
Если мне захочется как-то "проявиться", то я найду другой способ. Зачем решил написать? Да затем, что никто не знает, какой у вас код выполнения запроса. Вы выложили код, где нет никакого выполнения никаких запросов. Что еще можно написать в ответ? И даже сейчас вы написали в ответ язвительные комментарии и конец кода. Неясно, что внутри. Неясно, какой запрос. Как можно помочь вам, если информацию из вас необходимо выуживать?
1
2 / 2 / 1
Регистрация: 07.12.2013
Сообщений: 34
08.12.2013, 18:49  [ТС]
Цитата Сообщение от KOPOJI Посмотреть сообщение
Зачем решил написать? Да затем, что никто не знает, какой у вас код выполнения запроса. Вы выложили код, где нет никакого выполнения никаких запросов.
Извините но я в силу своего возраста не занимаюсь такими глупостями как "язвительные заявления". Привык к чётко поставленным задачам и обычно от других требую того же. Если Вам не достаточно информации для понимания данного условия, достаточно просто попросить конкретно, что Вы хотели бы посмотреть.
Даже Сноуден бы Вам предоставил любую секретную информацию.
Давайте действительно по существу.
Форма большая по этому нет смысла выкладывать всю.
PHP
1
2
3
4
5
6
7
<form name="zkz" action="insert_data.php" method="post" enctype="multipart/form-data" onreset="return confirm('Очистить форму?')" onSubmit="PutToHidden()" target="_blank" />
//далее сама форма с <input> <label> <select> <option> <textarea>
....
....
//и отправляем форму так 
<button class="reset" type="reset" onclick="hide_all()">Сброс</button>
<button class="submit" type="submit" value="Отправить">Отправить</button>
файл config.php
PHP
1
2
3
4
5
6
7
<?php
 $domain='http://site.ru/'; //это переменная в которую помещается адрес сайта на котором создана БД.
 $db_name = 'имя БД'; //это переменная в которую записывается имя БД.
 $db_user = 'Имя пользователя'; //переменная в которую заноситься имя пользователя БД.
 $db_pass = 'пароль пользователя'; //переменная для хранения пароля пользователя БД.
 $db_loc = 'localhost'; //переменная с полным адресом сервера на котором находится БД. Полный адрес используется вместо выражения "localhost", которое допускается на многих хостингах. 
 ?>
Файл connect.php:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 <?php
 // Выполняем все команды файла config.php
 include ('config.php');
 // Пытаемся соединиться с сервером базы данных MySQL
 $db = @mysql_connect($db_loc,$db_user,$db_pass);
 
 //Проверяем, удачно ли прошло подключение
 if(!$db) 
 {
 echo( '<center><p><b>Невозможно подключиться к серверу базы данных !</b></p></center>');
 exit();
 }
 
 //Проверяем доступность нужной БД
 if(!@mysql_select_db($db_name,$db)) 
 {
 echo( '<center><p><b>База данных '.$db_name.' недоступна!</b></p></center>');
 exit();
 }
 //Вывод сообщения об удачном выполнении подключения
 //Строку расположенную ниже после отладки - удалить
 echo( '<center><p><b>Подключение к базе данных '.$db_name.' выполнено.</b></p></center>');
 ?>
и собственно файл insert_data.php
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
 include ('connect.php')
 
$name = $_POST['name'];
$phone = $_POST['phone'];
$email = $_POST['email'];
// и т. д.
 
 $sql = 'INSERT INTO forms (name, phone, email, ... и т.д.)
 VALUES(
         "'.mysql_real_escape_string($name).'",
         "'.mysql_real_escape_string($phone).'",
         "'.mysql_real_escape_string($email).'"
         и т. д.
      )';
 mysql_query("SET NAMES utf8");
 
 if(!mysql_query($sql))
 {echo '<center><p><b>Ошибка при добавлении данных!</b></p></center>';} 
 else 
 {echo '<center><p><b>Данные добавлены!</b></p></center>';} 
?>
В самой форме только 3 поля обязательные для заполнения (required) это ФИО ($name) Телефон ($phone) и E-mail ($email)
Вот как то так.

Добавлено через 9 минут
Цитата Сообщение от romchiksoad Посмотреть сообщение
classic1698, ну это только часть полноценного "web-приложения", т.к. есть еще часть, которая передает данные в этот скрипт. В любом случае, стоит проверять есть ли необходимые данные для записи. Понимаете о чем я? Добавьте условие, проверяющее пустой суперглобальный массив $_POST или нет. И только если он не пуст, то проделываете все эти "махинации", которые Вы тут потрудились разместить.

Добавлено через 4 минуты
classic1698, на всякий случай скажу, что можно еще проверить есть ли необходимые элементы в нем ($_POST) путем полного их перечисления либо проверяя какое-то одно (к примеру, $_POST['name'] или $_POST['submit'] (если есть в форме элемент с таким именем)). Обычно присваивают имя для кнопки submit и проверяют его на наличие в $_POST.
Ну это я конечно сделаю, но сейчас проблема вряд ли в этом, т. к. этот вывод происходит не постоянно а только периодически, то есть когда ему захочется видимо. А то что Вы предлагаете наверно следует сделать только на поля которые required, вряд ли есть смысл отпугивать пользователей.
0
 Аватар для Andruhin
142 / 142 / 27
Регистрация: 19.12.2011
Сообщений: 250
08.12.2013, 19:53
Цитата Сообщение от classic1698 Посмотреть сообщение
Привык к чётко поставленным задачам и обычно от других требую того же
не вижу четко поставленной задачи. Уж извините.
Цитата Сообщение от classic1698 Посмотреть сообщение
А кто знает почему при добавлении записи в таблицу БД из формы HTML, записывается две записи. Одна с пустыми данными а вторая с заполненными. И разница внесения этих данных в 2 секунды.
А теперь по существу:
Цитата Сообщение от romchiksoad Посмотреть сообщение
В любом случае, стоит проверять есть ли необходимые данные для записи. Понимаете о чем я? Добавьте условие, проверяющее пустой суперглобальный массив $_POST или нет. И только если он не пуст, то проделываете все эти "махинации", которые Вы тут потрудились разместить.
Это и есть решение вашей проблемы. Нужно проверить: А есть ли входящий массив с пост данными?
HTML5
1
2
3
4
5
6
7
<form name="zkz" action="insert_data.php" method="post" enctype="multipart/form-data" onreset="return confirm('Очистить форму?')" onSubmit="PutToHidden()" target="_blank" />
//далее сама форма с <input> <label> <select> <option> <textarea>
....
....
//и отправляем форму так 
<button class="reset" type="reset" onclick="hide_all()">Сброс</button>
<button class="submit" type="submit" name="submit_order" value="Отправить">Отправить</button>
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
<?php
 include ('connect.php')
 if(isset($_POST['submit_order'])){
    $name = $_POST['name'];
    $phone = $_POST['phone'];
    $email = $_POST['email'];
    // и т. д.
 
    $sql = 'INSERT INTO forms (name, phone, email, ... и т.д.)
     VALUES(
         "'.mysql_real_escape_string($name).'",
         "'.mysql_real_escape_string($phone).'",
         "'.mysql_real_escape_string($email).'"
         и т. д.
      )';
    mysql_query("SET NAMES utf8");
 
   if(!mysql_query($sql))
   {echo '<center><p><b>Ошибка при добавлении данных!</b></p></center>';} 
   else 
   {echo '<center><p><b>Данные добавлены!</b></p></center>';} 
}else{
   echo "Не стоит обновлять эту страницу, добавится пустая запись)";
}
?>
Вот собственно и секрет, почему в некоторых случаях добаляются пустые записи
1
2 / 2 / 1
Регистрация: 07.12.2013
Сообщений: 34
08.12.2013, 21:30  [ТС]
Цитата Сообщение от Andruhin Посмотреть сообщение
PHP
1
2
3
4
5
6
7
8
9
10
    mysql_query("SET NAMES utf8");
 
   if(!mysql_query($sql))
   {echo '<center><p><b>Ошибка при добавлении данных!</b></p></center>';} 
   else 
   {echo '<center><p><b>Данные добавлены!</b></p></center>';} 
}else{
   echo "Не стоит обновлять эту страницу, добавится пустая запись)";
}
?>
Вот собственно и секрет, почему в некоторых случаях добаляются пустые записи
Спасибо!
Вы именно правы в том, что обновляться страница не должна, а у меня видимо обновлялась.
А проверку, т.к. форма большая, лучше сделать следующей:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
foreach ($_POST as $field => $value) { 
     if (!$value) { 
         $err .= "Необходимо ввести $field<br>";
     } 
 } 
 if ($err) { 
     echo $err;
     echo "Пожалуйста вернитесь назад и внесите изменения"; 
 } 
 else {  
 
 include ('insert_data.php');
       }
?>
И убрать все name, оставив только id, кроме тех полей которые нужно проверять.
Но это уже другая работа.
0
2 / 2 / 1
Регистрация: 07.12.2013
Сообщений: 34
10.12.2013, 18:49  [ТС]
А самое смешное и не понятное в том, что пустые записи в БД, и далее добавляются сами собой. При написании кучи условий на проверку... Причём в таблицу БД специально добавил ip_user и это поле тоже пустое, что говорит о том что никто не пытался отправить форму и не обращался к файлу insert_data.php.
А есть только время когда созданы записи. Так что задачка для меня оказалась сложнее.
Миниатюры
Двойная запись данных в БД из формы HTML  
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
10.12.2013, 18:52
classic1698, пока вы не захотите показать весь код, а не кусок из начала и конца кода, эту задачу, скорее всего, вам придется решать в одиночку. Впрочем, ваше право.
0
2 / 2 / 1
Регистрация: 07.12.2013
Сообщений: 34
10.12.2013, 19:13  [ТС]
Цитата Сообщение от KOPOJI Посмотреть сообщение
classic1698, пока вы не захотите показать весь код, а не кусок из начала и конца кода, эту задачу, скорее всего, вам придется решать в одиночку. Впрочем, ваше право.
Вы меня извините, но Вы конкретно хотите увидеть кокой весь код? я выкладывал выше содержание всех файлов. Вы нужен весь код формы? Или чего? Все производные в файле insert_date.php. Вы пожалуйста уточняйте Ваши пожелания. Мне ведь не трудно и не жалко, только здесь ведь тоже не совсем новички, и понятно, что дело вряд ли написании кода HTML формы или записях файла insert_date.php. И я всегда понимаю, что решать свои проблемы, всем и всегда, приходиться самим и своими руками.
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
10.12.2013, 19:29
classic1698, какая вообще разница, новичок вы или нет? Еще раз сцитирую вам фразу
Цитата Сообщение от KOPOJI Посмотреть сообщение
Вы выложили код, где нет никакого выполнения никаких запросов. Что еще можно написать в ответ? И даже сейчас вы написали в ответ язвительные комментарии и конец кода. Неясно, что внутри. Неясно, какой запрос. Как можно помочь вам, если информацию из вас необходимо выуживать?
Если вы этого не понимаете - хорошо.
У меня есть код, в котором не выводится текст из БД.
Вот его начало
PHP
1
2
3
<?php
include './db.php';
$res = mysql_query('SELECT * FROM `table`');
Вот его конец
PHP
1
2
mysql_close($res);
?>
Скажите, почему у меня не выводится информация из БД?
0
2 / 2 / 1
Регистрация: 07.12.2013
Сообщений: 34
10.12.2013, 21:29  [ТС]
А ни чего, что было выложено ранее:
Цитата Сообщение от classic1698 Посмотреть сообщение
Давайте действительно по существу.
Форма большая по этому нет смысла выкладывать всю.
PHP
1
2
3
4
5
6
7
<form name="zkz" action="insert_data.php" method="post" enctype="multipart/form-data" onreset="return confirm('Очистить форму?')" onSubmit="PutToHidden()" target="_blank" />
//далее сама форма с <input> <label> <select> <option> <textarea>
....
....
//и отправляем форму так 
<button class="reset" type="reset" onclick="hide_all()">Сброс</button>
<button class="submit" type="submit" value="Отправить">Отправить</button>
файл config.php
PHP
1
2
3
4
5
6
7
<?php
 $domain='http://site.ru/'; //это переменная в которую помещается адрес сайта на котором создана БД.
 $db_name = 'имя БД'; //это переменная в которую записывается имя БД.
 $db_user = 'Имя пользователя'; //переменная в которую заноситься имя пользователя БД.
 $db_pass = 'пароль пользователя'; //переменная для хранения пароля пользователя БД.
 $db_loc = 'localhost'; //переменная с полным адресом сервера на котором находится БД. Полный адрес используется вместо выражения "localhost", которое допускается на многих хостингах. 
 ?>
Файл connect.php:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 <?php
 // Выполняем все команды файла config.php
 include ('config.php');
 // Пытаемся соединиться с сервером базы данных MySQL
 $db = @mysql_connect($db_loc,$db_user,$db_pass);
 
 //Проверяем, удачно ли прошло подключение
 if(!$db) 
 {
 echo( '<center><p><b>Невозможно подключиться к серверу базы данных !</b></p></center>');
 exit();
 }
 
 //Проверяем доступность нужной БД
 if(!@mysql_select_db($db_name,$db)) 
 {
 echo( '<center><p><b>База данных '.$db_name.' недоступна!</b></p></center>');
 exit();
 }
 //Вывод сообщения об удачном выполнении подключения
 //Строку расположенную ниже после отладки - удалить
 echo( '<center><p><b>Подключение к базе данных '.$db_name.' выполнено.</b></p></center>');
 ?>
и собственно файл insert_data.php
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
 include ('connect.php')
 
$name = $_POST['name'];
$phone = $_POST['phone'];
$email = $_POST['email'];
// и т. д.
 
 $sql = 'INSERT INTO forms (name, phone, email, ... и т.д.)
 VALUES(
         "'.mysql_real_escape_string($name).'",
         "'.mysql_real_escape_string($phone).'",
         "'.mysql_real_escape_string($email).'"
         и т. д.
      )';
 mysql_query("SET NAMES utf8");
 
 if(!mysql_query($sql))
 {echo '<center><p><b>Ошибка при добавлении данных!</b></p></center>';} 
 else 
 {echo '<center><p><b>Данные добавлены!</b></p></center>';} 
?>
В самой форме только 3 поля обязательные для заполнения (required) это ФИО ($name) Телефон ($phone) и E-mail ($email)
Вот как то так.
А то что в этих файлах нет ни записей в тегах form input select то могу сказать что там реально много записей в обычной стандартной форме
PHP
1
2
         <label for="name"><strong>Контактное лицо:</strong> <sup>(ФИО)</sup></label>
         <input id="name" name="name" type="text" required placeholder="Например: Семёнов Иван Львович" />
и т. д. а они в свою очередь они передаются по типичной записи в БД записями:
$name = $_POST['name']; и "'.mysql_real_escape_string($name).' ".

пробовал даже менять отправку через:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
<?
foreach ($_POST as $field => $value) { 
     if (!$value) {
         $err .= "<b>Невыбрано обязательное поле</b> $field<br>";
     }
 }
 if ($err) { 
     echo $err;
     echo "<font color='red'><b>Пожалуйста вернитесь назад и внесите изменения</b></font><br />";
     echo "<input type='button' value='Назад' onclick='history.back()'>";
 }
 else {include ('insert_data.php');}
?>
но в этом варианте все поля с тегами texarea и <input type="text"...> требуют тоже ввода данных.
по этому сделал следующим образом т. к. у меня всего 3 обязательных поля:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?
$required = array("name" => "<i>Контактное лицо: (ФИО)</i>",
               "email" => "<i>Почтовый ящик: (E-mail)</i>", 
               "phone" => "<i>Номер телефона:</i>",
               "subj1" => "<i>Тема обращения:</i>");
foreach ($required as $field => $label) {
     if (!$_POST[$field]) { 
         $err .= "<b>Необходимо ввести:</b> $label<br>";
     } 
 }
 
 if ($err) { 
     echo $err;
     echo "<font color='red'><b>Пожалуйста вернитесь назад и внесите изменения</b></font><br />";
     echo "<input type='button' value='Назад' onclick='history.back()'>";
 }
 else {include ('insert_data.php');}
?>
Но проблема по поводу которой я сюда и обратился не исчезла...

И вот был Ваш ответ, по которому и были сделаны изменения, и это не работает. По моему это Вы не хотите понять, и пытаетесь не слушать, что я Вам говорю:

Цитата Сообщение от Andruhin Посмотреть сообщение
не вижу четко поставленной задачи. Уж извините.


А теперь по существу:

Это и есть решение вашей проблемы. Нужно проверить: А есть ли входящий массив с пост данными?
HTML5
1
2
3
4
5
6
7
<form name="zkz" action="insert_data.php" method="post" enctype="multipart/form-data" onreset="return confirm('Очистить форму?')" onSubmit="PutToHidden()" target="_blank" />
//далее сама форма с <input> <label> <select> <option> <textarea>
....
....
//и отправляем форму так 
<button class="reset" type="reset" onclick="hide_all()">Сброс</button>
<button class="submit" type="submit" name="submit_order" value="Отправить">Отправить</button>
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
<?php
 include ('connect.php')
 if(isset($_POST['submit_order'])){
    $name = $_POST['name'];
    $phone = $_POST['phone'];
    $email = $_POST['email'];
    // и т. д.
 
    $sql = 'INSERT INTO forms (name, phone, email, ... и т.д.)
     VALUES(
         "'.mysql_real_escape_string($name).'",
         "'.mysql_real_escape_string($phone).'",
         "'.mysql_real_escape_string($email).'"
         и т. д.
      )';
    mysql_query("SET NAMES utf8");
 
   if(!mysql_query($sql))
   {echo '<center><p><b>Ошибка при добавлении данных!</b></p></center>';} 
   else 
   {echo '<center><p><b>Данные добавлены!</b></p></center>';} 
}else{
   echo "Не стоит обновлять эту страницу, добавится пустая запись)";
}
?>
Вот собственно и секрет, почему в некоторых случаях добавляются пустые записи
Давайте действительно конструктивней подойдём проблеме с которой мне пришлось столкнуться. Я для чего пишу здесь, чтобы попробовать с Вашей помощью и с помощью других пользователей попробовать разобраться с непонятной причиной. И выкладываю скрины в которых конкретно видно, что записи возникают двойными ровно через временной отрезок - равный 3 минутам. Стопроцентно никто в данный отрезок времени не обращается к данным моим страницам т. к. они в разработке и доступны только мне. А Вы почему то пытаетесь со мной играть в "учителя" и "ученика". Извините пожалуйста за возможно за некорректное выражение.
0
 Аватар для Andruhin
142 / 142 / 27
Регистрация: 19.12.2011
Сообщений: 250
10.12.2013, 21:50
classic1698, что произойдет, если к файлу insert_data.php обратится напрямую, минуя форму оформления заказа?
Во время выполнения других файлов проекта используется в них?
PHP
1
2
3
<?php
include('insert_data.php');
?>
Может есть задания по крону обращающиеся косвенно к данному файлу?

В любом случае, мистического появления записей в БД, без совершения пользователем/кроном каких-либо действий не может быть.
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
10.12.2013, 22:08

Не по теме:

Приношу извинения, ошибся, думал, есть код еще. Но язвить не стоило все равно, изначально этого не было, было дано только два куска кода, которые мало чего говорят о происходящем в коде


Цитата Сообщение от classic1698 Посмотреть сообщение
И вот был Ваш ответ, по которому и были сделаны изменения
не мой
Если "конструктивно", то данный код должен был помочь. Можете попробовать прописать "жесткую" проверку:
Цитата Сообщение от classic1698 Посмотреть сообщение
PHP
1
2
3
4
5
if(isset($_POST['submit_order'])){
    $name = $_POST['name'];
    $phone = $_POST['phone'];
    $email = $_POST['email'];
    // и т. д.
заменить на
PHP
1
2
3
4
5
if(isset($_POST['name'], $_POST['phone'], $_POST['email'] /*, .... и т.д. */)){
    $name = $_POST['name'];
    $phone = $_POST['phone'];
    $email = $_POST['email'];
    // и т. д.
Альтернатива, что обычно и делают - это проверка непосредственно самих переменных на заполненность (это, к тому же, защищает от ввода пустых значений (пробелов) или простого нажатия кнопки без заполнения данных). Нечто подобное у вас и используется в цикле.
Вообще, всю работу скрипта можно автоматизировать, если несколько переделать имена инпутов в форме на массивы. Помимо прочего, это избавит и от проблем пустых значений.

HTML5
1
2
3
4
5
6
7
<form method="post"...>
<input type="text" name="order[name]">
<input type="text" name="order[email]">
<input type="text" name="order[phone]">
............
<input type="submit" value="Заказать">
</form>
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
26
27
28
29
30
31
if( isset($_POST['order']) && is_array($_POST['order']) )
{
    $allowedValues = array('name'=>'Ваше имя', 'email'=>'Ваш e-mail', 'phone'=>'Ваш телефон');
    $values = $errors = array();
    foreach($_POST['order'] as $field=>$value)
    {
        if(!isset($allowedValues[$field]))
        {
            $errors[$field] = 'Неизвестное поле "'. $field. '" ('. $value. ')';
            continue;
        }
 
        if(!is_scalar($value))
            $errors[$field] = 'Неверный формат поля "' . $allowedValues[$field] . '" (' . $value . ')';
        else if(trim($value) === '')
            $errors[$field] = 'Заполните поле "' . $allowedValues[$field] . '"';
        else
            $values[$field] = mysql_real_escape_string(trim($value));
    }
    foreach(array_diff(array_keys($allowedValues), array_keys($_POST['order'])) as $field)
        $errors[$field] = 'Заполните поле "' . $allowedValues[$field] . '"';
        
    if(!empty($errors))
        echo join('<br>', $errors);
    else
    {
        //составление запроса
        $sql = 'INSERT INTO `order` (`' . join('`, `', array_keys($values)) . '`) VALUES ("' . join('", "', $values) . '")';
        //выполняем запрос
    }
}
0
2 / 2 / 1
Регистрация: 07.12.2013
Сообщений: 34
10.12.2013, 22:11  [ТС]
Цитата Сообщение от Andruhin Посмотреть сообщение
classic1698, что произойдет, если к файлу insert_data.php обратится напрямую, минуя форму оформления заказа?
Во время выполнения других файлов проекта используется в них?
PHP
1
2
3
<?php
include('insert_data.php');
?>
Может есть задания по крону обращающиеся косвенно к данному файлу?

В любом случае, мистического появления записей в БД, без совершения пользователем/кроном каких-либо действий не может быть.
В том то и дело что без обращения не может быть. Может быть конечно но как? Крона нет на сайте точно... При обращении к файлу выдаёт "Ошибка при добавлении данных!" и запись не появляется в БД. И фишка то в том, что специально добавил поле БД ip_user правда добавляется она только из файла insert_data.php $ip_user = $_SERVER['REMOTE_ADDR']; вотя и не понимаю как это может конечно это как то в рабочем моменте происходит, если бы добавлялась c ip можно конечно было бы добавить условия на запрет с одного ip. Но в БД то нет этой записи.
Буду для начала поиском искать все записи include('insert_data.php');.
0
 Аватар для Andruhin
142 / 142 / 27
Регистрация: 19.12.2011
Сообщений: 250
10.12.2013, 22:40
Цитата Сообщение от classic1698 Посмотреть сообщение
Буду для начала поиском искать все записи include('insert_data.php');.
include('insert_data.php') может и не присутствовать явно в целевом файле, в который приходит обращение. Вполне возможно интерпретатор доходит до него по стеку обращений из нескольких файлов.
Например, пользователь заходит в каталог catalogue.php, в котором инклюдится basket.php, а собственно уже в basket.php происходит инклюд insert_data.php
Путей, по которым интерпретатор дойдет до этого файла великое множество, определенное рамками вашего проекта. И даже если и происходит косвенное выполнение кода из insert_data.php, то нужно в первую очередь обезопаситься в этом файле от получения пустых данных.
0
2 / 2 / 1
Регистрация: 07.12.2013
Сообщений: 34
10.12.2013, 23:12  [ТС]
Цитата Сообщение от Andruhin Посмотреть сообщение
include('insert_data.php') может и не присутствовать явно в целевом файле, в который приходит обращение. Вполне возможно интерпретатор доходит до него по стеку обращений из нескольких файлов.
Например, пользователь заходит в каталог catalogue.php, в котором инклюдится basket.php, а собственно уже в basket.php происходит инклюд insert_data.php
Путей, по которым интерпретатор дойдет до этого файла великое множество, определенное рамками вашего проекта. И даже если и происходит косвенное выполнение кода из insert_data.php, то нужно в первую очередь обезопаситься в этом файле от получения пустых данных.
первоначально из формы было action="insert_data.php" но потом я и решил делать через отдельный файл assay_data.php и именно в нем и есть проверка

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?
$required = array("name" => "<i>Контактное лицо: (ФИО)</i>",
               "email" => "<i>Почтовый ящик: (E-mail)</i>", 
               "phone" => "<i>Номер телефона:</i>",
               "subj1" => "<i>Тема обращения:</i>");
foreach ($required as $field => $label) {
     if (!$_POST[$field]) { 
         $err .= "<b>Необходимо ввести:</b> $label<br>";
     } 
 }
 
 if ($err) { 
     echo $err;
     echo "<font color='red'><b>Пожалуйста вернитесь назад и внесите изменения</b></font><br />";
     echo "<input type='button' value='Назад' onclick='history.back()'>";
 }
 else {include ('insert_data.php');}
?>
если в форме не заполнено одно из обязательных полей то выводится:

Необходимо ввести: Тема обращения:
Пожалуйста вернитесь назад и внесите изменения


Если попробовать обратиться на прямую к файлу assay_data.php, то получаем:

Необходимо ввести: Контактное лицо: (ФИО)
Необходимо ввести: Почтовый ящик: (E-mail)
Необходимо ввести: Номер телефона:
Необходимо ввести: Тема обращения:
Пожалуйста вернитесь назад и внесите изменения


Проверил поиском больше ни где обращение к файлу insert_data.php нет только в файле assay_data.php.
Думал что может при прохождении всех условий происходит автоматическое обновление в браузере.
Пробовал добавить в файл insert_data.php, <meta http-equiv='Cash-Content' content='public'>, ну на всякий так сказать случай , не помогло...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.12.2013, 23:12
Помогаю со студенческими работами здесь

Двойная запись в бд
Здравствуйте. У меня имеется код записи посещения пользователя по страницам записывая в базу данных. База состоит из ip адреса, страницы...

Запись данных в HTML
Здравствуйте, можно ли ввести данные в input не используя value? С изменением value на Awesomium'e у меня реализовано таким образом. ...

Двойная запись в ячейку DBGrid
Привет, этот код: R:=Rect; InflateRect(R, -2, -2); res:=DBGrid1.DataSource.DataSet.FieldByName('Цена').Index; if...

Извлечение данных из HTML - формы
Всем здравствуйте! Помогите пожалуйста разобраться с лабораторной работой) Разработать HTML-код, который при вызове в окно...

вывод данных из html-формы
Привет! Как вывести данные из html-формы: form.html &lt;form action=&quot;HandleForm.php&quot; method=post&gt; First Name &lt;input...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru