Моя форма отправляет несколько записей в базе данных, и я не хочу, чтобы

У меня есть простая форма HTML и PHP-файл для выполнения вставки базы данных. Проблема, с которой я сталкиваюсь, заключается в том, что когда я нажимаю кнопку отправки, моя таблица базы данных получает 3 копии одной и той же отправки, а мне нужна только одна. Ниже приведен код.

HTML:

<!DOCTYPE html>
<html>
<form action="demo.php" method="post">
<p>
Input 1: <input type="text" name="input1" />
<input type="submit" value="Submit" />
</p>
</form>
</html>

PHP:

<?php
define('DB_NAME', 'phpmyadminName');
define('DB_USER', 'phpmyadminUser');
define('DB_PASSWORD', '');
define('DB_HOST', 'localhost');

$link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);

if (!$link){
die('Could not connect: ' . mysql_error());
}

$db_selected = mysql_select_db(DB_NAME, $link);

if (!$db_selected){
die('Can\'t use ' . DB_NAME . ': ' . mysql_error());
}

$value = $_POST['input1'];

$sql = "INSERT INTO demo (input1) VALUES ('$values')";

if (!mysql_query($sql)){
die('Error: ' . mysql_error());
}

mysql_close();
?>

DB_NAME, DB_USER и DB_PASSWORD были изменены по очевидным причинам, но код работает.

Он просто отправляет слишком много копий данных формы в таблицу базы данных. Когда я был в школе, у меня была эта проблема, но казалось, что проблема была на стороне сервера, а не в нашем коде. Используемый здесь сервер — мой, и у меня есть полный контроль над ним. Если проблема связана с сервером, мне нужно помочь исправить это (поскольку я делаю это, чтобы научиться администрировать эти инструменты, я не знаю намного больше, чем администрирование базового уровня).

0

Решение

Кеннет, код, который вы здесь предоставили, действительно требует некоторой работы. Прежде всего, пожалуйста, не используйте mysql API больше. Он устарел, больше не будет поддерживаться в будущих версиях PHP и небезопасен. Для всех операций с базой данных используйте mysqli или же PDO API, желательно с подготовленными заявлениями.
Во-вторых, никогда INSERT $_POST или же $_GET Переменные напрямую в базу данных без их предварительной проверки / очистки, так как кто-то может удалить ваши данные или, что еще хуже, всю вашу базу данных. PHP имеет множество функций, чтобы сделать это очень легко, таких как CType в зависимости от типа данных.

Может быть, попробовать что-то вроде этого в вашем коде:

if (!empty($_POST['input1'])) { //checks if data was received//
$value = $_POST['input1'];
mysql_real_escape_string($value);
$sql = "INSERT INTO demo (input1) VALUES ('$value')";
} else {
echo "form was not received";
exit;
}

Я также заметил, что ваши имена переменных были разными, что исправлено выше.

РЕДАКТИРОВАТЬ :
Ошибочно использовал неправильный синтаксис для функции PHP ctype.

2

Другие решения

Вы принимаете входное значение POST в переменной с именем $value и в запросе вы отправляете $values

Я исправил код.

Можете ли вы попробовать приведенный ниже код

<?php
define('DB_NAME', 'phpmyadminName');
define('DB_USER', 'phpmyadminUser');
define('DB_PASSWORD', '');
define('DB_HOST', 'localhost');

$link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);

if (!$link){
die('Could not connect: ' . mysql_error());
}

$db_selected = mysql_select_db(DB_NAME, $link);

if (!$db_selected){
die('Can\'t use ' . DB_NAME . ': ' . mysql_error());
}

$value = $_POST['input1'];
if($value!=''){
$sql = "INSERT INTO demo (input1) VALUES ('".$value."')";
}

if (!mysql_query($sql)){
die('Error: ' . mysql_error());
}

mysql_close();
?>
0

Ниже приведен правильный код проблемы. Я проверил, что когда вы обновляете свою страницу, она создает новую пустую запись в базе данных, а также имя переменной неверно.

Вы должны проверить метод запроса. это

$ _SERVER [‘REQUEST_METHOD’] === ‘POST’

проверит метод формы, и это предотвратит пустые записи в базе данных.

 <?php
define('DB_NAME', 'test');
define('DB_USER', 'root');
define('DB_PASSWORD', 'mysqldba');
define('DB_HOST', 'localhost');

$link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);

if (!$link){
die('Could not connect: ' . mysql_error());
}

$db_selected = mysql_select_db(DB_NAME, $link);

if (!$db_selected){
die('Can\'t use ' . DB_NAME . ': ' . mysql_error());
}
//Test for request method
if($_SERVER['REQUEST_METHOD'] === 'POST') {
$value = $_POST['input1'];

$sql = "INSERT INTO demo (input1) VALUES ('$value')";
//echo $sql;die;
if (!mysql_query($sql)){
die('Error: ' . mysql_error());
}
}
mysql_close();
?>
0
По вопросам рекламы [email protected]