У меня есть простая форма 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 были изменены по очевидным причинам, но код работает.
Он просто отправляет слишком много копий данных формы в таблицу базы данных. Когда я был в школе, у меня была эта проблема, но казалось, что проблема была на стороне сервера, а не в нашем коде. Используемый здесь сервер — мой, и у меня есть полный контроль над ним. Если проблема связана с сервером, мне нужно помочь исправить это (поскольку я делаю это, чтобы научиться администрировать эти инструменты, я не знаю намного больше, чем администрирование базового уровня).
Кеннет, код, который вы здесь предоставили, действительно требует некоторой работы. Прежде всего, пожалуйста, не используйте 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.
Вы принимаете входное значение 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();
?>
Ниже приведен правильный код проблемы. Я проверил, что когда вы обновляете свою страницу, она создает новую пустую запись в базе данных, а также имя переменной неверно.
Вы должны проверить метод запроса. это
$ _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();
?>