2015-02-02 3 views
0

У меня есть простая форма 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 все были изменены по понятным причинам, но код работает.

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

ответ

2

Кеннета, код, который вы предоставили здесь честно нуждается в некоторой работы. Прежде всего, не используйте API mysql. Он устарел, больше не будет поддерживаться в будущих версиях PHP и небезопасен. Для всех операций с базой данных используйте API mysqli или PDO, предпочтительно с подготовленными операторами.
Во-вторых, ни в коем случае 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; 
} 

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

EDIT:
Ошибочно используемый неправильный синтаксис для функции PHP ctype.

+0

Взгляд в ctype. Пробуем код как есть, и я получаю ошибку «неожиданных значений». Я опубликую обновление, когда я сделаю хеш-версию. Благодарим вас за ценное понимание. – Kenneth

+0

Хорошо, отправил это на неправильный ответ секунду назад, но я выяснил свою ошибку. Оказывается, строка, которую я набрал, вызвала ошибку. Я набрал фразу «тест 1», и пространство бросило ошибку на меня, как кувшин воды на костре. этот код работает по назначению. – Kenneth

+0

Я вижу, приведенная выше информация была общей рекомендацией, так как я не знал, какие типы данных вы обрабатываете. Похоже, что просто проверить, пуст ли он, тогда использование подготовленного оператора должно быть прекрасным, так как все входные данные будут экранированы. В этом случае 'mysql_real_escape_string' - это то, что вы хотели бы использовать перед вставкой в ​​базу данных. Я уточню свой ответ. – EternalHour

0

Вы принимаете входное значение 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

Да, это устранило проблему. Спасибо. – Kenneth

+0

@ Kenneth Спасибо за ответ, который рад помочь вам Если проблема исправлена, пожалуйста, примите ответ, чтобы вопрос не был отнесен к категории без ответа :) – Veerendra

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

Благодарим вас за помощь. Это работало по назначению. – Kenneth

Смежные вопросы