0 / 0 / 0
Регистрация: 27.06.2020
Сообщений: 8

Отправка пустых данных в БД при обновлении страницы

13.05.2021, 13:29. Показов 1364. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
При таком коде отправляются пустые данные в БД при обновлении страницы.
Если $name не приравнивать к $_POST, то данные не отправляются совсем, даже если вписывать их в формы.
Что требуется дописать, чтобы пустые данные не отправлялись?
Code
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
<html>
<head>
 <title>Запись в БД через форму на php</title>
</head>
<body>
 <form method="POST" action="">
  <p>Наименование видеокарты: <input name="name" type="text" required/></p>
  <p>GPU видеокарты: <input name="gpu" type="text" required/></p>
  <p>Частота GPU: <input name="clockfrequency" type="text" required/></p>
  <p>Частота памяти: <input name="memoryclockspeed" type="text" required/></p>
  <p>Количество ядер GPU<input name="cores" type="text" required/></p>
  <p>Объем памяти: <input name="memory" type="text" required/></p>
  <p>Дата производства: <input name="dat" type="text" required/></p>
  <p>Цена производства: <input name="price" type="text" required/></p>
  <input type="submit" value="Отправить"required/><br>
 </form>
</body>
</html>
<?php 
 
 
    if (isset($_POST['name'])) {$name = $_POST['name'];}
    if (isset($_POST['gpu'])) {$gpu = $_POST['gpu'];}
    if (isset($_POST['clockfrequency'])) {$clockfrequency = $_POST['clockfrequency'];}
    if (isset($_POST['memoryclockspeed'])) {$memoryclockspeed = $_POST['memoryclockspeed'];}
    if (isset($_POST['cores'])) {$cores = $_POST['cores'];}
    if (isset($_POST['memory'])) {$memory = $_POST['memory'];}
    if (isset($_POST['dat'])) {$dat = $_POST['dat'];}
    if (isset($_POST['price'])) {$price = $_POST['price'];}
 
 
$db_host = "localhost"; 
$db_user = "root"; // Логин БД
$db_password = "root"; // Пароль БД
$db_base = "productlist"; // Имя БД
$db_table = "products"; // Имя Таблицы БД
 
try {
 
    $db = new PDO("mysql:host=$db_host;dbname=$db_base", $db_user, $db_password);
 
    $db->exec("set names utf8");
    echo "Соединение успешно <br>";
} catch (PDOException $e) {
 
    print "Ошибка!: " . $e->getMessage() . "<br/>";
} 
 
$data = array('name' => $name, 'gpu' => $gpu, 'clockfrequency' => $clockfrequency, 'memoryclockspeed' => $memoryclockspeed, 'cores' => $cores, 'memory' => $memory, 'dat' => $dat, 'price' => $price); 
 
$query = $db->prepare("INSERT INTO $db_table (name, gpu, clockfrequency, memoryclockspeed, cores, memory, dat, price) 
    values (:name, :gpu, :clockfrequency, :memoryclockspeed, :cores, :memory, :dat, :price)");
 
$query->execute($data);
?>
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.05.2021, 13:29
Ответы с готовыми решениями:

Повторная отправка данных формы при обновлении страницы
Я так понимаю, что это стандартный механизм браузера? Только у меня с ним нарушается логика работы скрипта. Следует ли это считать...

Отправка данных из формы при обновлении страницы
Данные из формы отправляются при обновлении страницы, как сделать так, чтобы данные отправлялись только при нажатии кнопки?

Как сделать, чтоб отправка данных на сервер не прерывалась при смене/обновлении страницы?
Добрый вечер. Пишу движок для для блога. Node.js+React+MySQL. Есть страница для создания поста. Допустим, юзер желает отправить...

3
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
13.05.2021, 14:36
Заверните весь ваш код (тот, что между <?php и ?>) в условие:
PHP
1
2
3
if ('POST' === $_SERVER['REQUEST_METHOD']) {
    // Ваш код
}
0
0 / 0 / 0
Регистрация: 27.06.2020
Сообщений: 8
13.05.2021, 15:08  [ТС]
Происходит тоже самое, даже если обернул
0
Невнимательный
 Аватар для ft4l
3119 / 1303 / 359
Регистрация: 08.02.2013
Сообщений: 7,629
Записей в блоге: 2
13.05.2021, 18:37
Лучший ответ Сообщение было отмечено JaguarXF как решение

Решение

Цитата Сообщение от JaguarXF Посмотреть сообщение
даже если обернул
браузер-же спрашивает ,) отправлять-ли данные POST-запроса снова... если обёрнуто

Вообще это странно на уровне db
... что в таблицы могут записываться любые строки ... даже все одинаково пустые
И как-бы нужны проверки чего можно или нельзя добавлять ...
даже если к этому коду например добавить такую кучу всего
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
<?php
header('Content-Type: text/html; charset=utf-8');
// debug
error_reporting(-1);
ini_set('display_errors', '1');
 
$stat = 0;// 1 если 'POST' 1+2 если 'POST' и добаавлено
$ERR_MSGS = $MSGS = array();
if ($_SERVER['REQUEST_METHOD'] == 'POST') do {
    if (!isset($_POST['name'],$_POST['gpu'],$_POST['clockfrequency'],
     $_POST['memoryclockspeed'],$_POST['cores'],$_POST['memory'],
     $_POST['dat'],$_POST['price'])) {
        $ERR_MSGS[] = 'Заполните и отправьте форму';
        break;
    }
    $stat |= 1;
    $data = array();
    foreach(array('name','gpu','clockfrequency','memoryclockspeed',
     'cores','memory','dat','price') AS $n) {
        $$n =  trim($_POST[$n]);
        $data[":$n"] = $$n;
        if (empty($$n)) $ERR_MSGS[] = 'Не заполнено '. $n;
    }
    if ($ERR_MSGS) break;
 
    try {
        $db_host = "localhost"; 
        $db_user = "xxx"; // Логин БД
        $db_password = "xxx"; // Пароль БД
        $db_base = "xxx"; // Имя БД
        $db_table = "produs"; // Имя Таблицы БД
        
        $db = new PDO("mysql:host=$db_host;dbname=$db_base", $db_user, $db_password);
        $db->exec("set names utf8");
        $MSGS[] = 'Соединение успешно';
        $query = $db->prepare("INSERT INTO
         $db_table (name, gpu, clockfrequency, memoryclockspeed, cores, memory, dat, price) 
         values (:name, :gpu, :clockfrequency, :memoryclockspeed, :cores, :memory, :dat, :price)");
        if(!$query->execute($data)) {
            $ERR_MSGS[] = 'Ошибка запроса: <pre>'. var_export($query->errorInfo(), 1).'</pre>';
            break;
        }
        
    } catch (PDOException $e) {
        $ERR_MSGS[] = 'Ошибка!: ' . $e->getMessage() ;
        break;
    }
    if ($query->rowCount()) {
        $stat |= 2;
        $MSGS[] = 'Добавлено.';
        ## REDIRECT
        header('refresh: 5;url='. $_SERVER['PHP_SELF'] );
    }
    else $ERR_MSGS[] = 'Не добавлено';
 
} while(0);
 
?><html>
<head>
 <title>Запись в БД через форму на php</title>
</head>
<body>
<?php
if ($MSGS)
    echo '<ul><li>', implode("</li>\n<li>",$MSGS), "</li>\n</ul>\n";
if ($ERR_MSGS)
    echo '<ul style="color:red"><li>', implode("</li>\n<li>",$ERR_MSGS), "</li>\n</ul>\n";
if ($stat == 3) {
    ## REDIRECT
    echo '<h4>Перенаправление 5 сek ...</h4> <a href="', $_SERVER['PHP_SELF'],
        '">Перейти сейчас</a>';
}
else {
?>
 
 <form method="POST" action="">
  <p>Наименование видеокарты: <input name="name" type="text" required/></p>
  <p>GPU видеокарты: <input name="gpu" type="text" required/></p>
  <p>Частота GPU: <input name="clockfrequency" type="text" required/></p>
  <p>Частота памяти: <input name="memoryclockspeed" type="text" required/></p>
  <p>Количество ядер GPU<input name="cores" type="text" required/></p>
  <p>Объем памяти: <input name="memory" type="text" required/></p>
  <p>Дата производства: <input name="dat" type="text" required/></p>
  <p>Цена производства: <input name="price" type="text" required/></p>
  <input type="submit" value="Отправить"/><br>
 </form>
<?php
}
?>
</body>
</html>
То ничто не помешает юзеру за 5 секунд жмякнуть несколько раз снова по кнопке "Обновить"

Не по теме:

И все данные как строки.... а бывает поля в таблице могут принимать только числа
... и как-бы одним ->execute() уже не вариант... ->bindParam() наверно надо какие-нибудь тогда...

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

Отправка письма при обновлении страницы
Доброго времени суток. Нашел такую форму отправки номера телефона на почту, добавил маску ввода. Проблема в том что письмо отправляется...

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

Отправка формы при каждом обновлении страницы
Помогите пожалуйста разобраться. пишу простенький модуль для joomla обратной связи, вроде работает и сообщения выводит - но...

Повторная отправка формы при обновлении страницы
Всем привет. Недавно начал изучать php, столкнулся с проблемой: есть простая форма, по нажатию кнопки выводится текст из текстбокса: ...

Повторная отправка формы при обновлении страницы
Имеется код отправки формы, но при обновлении она отправляется заново. Предполагаю проблему решить можно прописав header location ... Но...


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

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

Новые блоги и статьи
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru