2015-03-22 5 views
0

У меня есть HTML-код, который создает шаблон для сбора 5 переменных. Эти переменные отправляются на php, которые обрабатывают информацию и пересылают ее в базу данных mySQL.Почему PHP вставляет несколько строк в MySQL из одной записи?

Ниже приводится шаблон HTML:

<html> 

<head> 
</head> 

<body> 
    <form action="insert.php" method="post"> 
     <p>Value1 <input type="text" name="value1" /></p> 
     <p>Value2 <input type="text" name="value2" /></p> 
     <p>Value3 <input type="text" name="value3" /></p> 
     <p>Value4 <input type="text" name="value4" /></p> 
     <p>Value5 <input type="text" name="value5" /></p> 

     <input type="Submit" /> 

    </form> 
</body> 

</html> 

А вот PHP форма, которая взаимодействует с MySQL (обратите внимание, что # заменяются фактическими значениями в первоначальном виде):

<?php 
$server="#####"; 
$username="#####"; 
$password="######"; 
$database="#####"; 


$val1=$_POST['value1']; 
$val2=$_POST['value2']; 
$val3=$_POST['value3']; 
$val4=$_POST['value4']; 
$val5=$_POST['value5']; 

$con = new mysqli($server,$username,$password,$database); 
//Check connection 
if (mysqli_connect_errno()) 
{ 
echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
} 

$sql= "INSERT INTO test_table (value1, value2, value3, value4, value5)  VALUES ('$val1','$val2','$val3','$val4','$val5')"; 

if (mysqli_query($con, $sql)) { 
echo "New record created successfully"; 
} else { 
echo "Error: " . $sql . "<br>" . mysqli_error($con); 
} 

mysqli_close($con); 

?> 

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

mysql> create table test_table (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, 
          value1 VARCHAR(10), 
          value2 VARCHAR(10), 
          value3 VARCHAR(10), 
          value4 VARCHAR(10), 
          value5 VARCHAR(10)) 
          ; 

Так, например, если я загрузить форму HTML и вставить «а» «б» «С» «D» и «е» в полях вывод должен быть только 1 запись в MySQL. Вместо этого я получаю два. (Я не могу опубликовать изображение вывода, потому что у меня недостаточно опыта). Я пытался это исправить, но я не мог найти, где проблема. Любая помощь очень ценится.

+0

Вы тестируете локальный сервер (localhost) или нет? Можете ли вы обновить свой вопрос с помощью запроса, чтобы узнать, как вы запрашиваете базу данных (подсчет строк) ... Купите путь, нет двух форм ... В вашем примере есть одна форма html и один php-скрипт;) – Whirlwind

+0

I запустил ваш код, и он функционирует так, как предполагается. Даже если вы не можете опубликовать изображение, можете ли вы ввести свой вопрос, что содержат эти несколько записей? – BigScar

+0

Я бы предположил, что ваш PHP работает дважды, может быть, потому, что у вас есть дополнительный 'include'? – EternalHour

ответ

0

В коде нет ничего, что могло бы создать дублирование. Одна форма, если один раз обработать ваш PHP-код, будет генерировать только одну строку на db, как вы знаете, так что либо вы отправляете в файл, а затем импортируете другую, которая обрабатывает форму более одного раза, или у вас происходит какая-то странная переадресация.

Для регистрации букв «b» «c» «d» и «e» дважды (две строки) содержимое формы отправляется дважды на этот PHP. Сначала попробуйте выяснить, отправляете ли вы только один раз: - В firefox установите Live HTTP Headers, запишите POST и посмотрите, идет ли он только один раз; Вы используете jquery для проверки или обработки формы submit? если вы предотвращаете нормальное событие? Если нет, вы можете получить данные, отправленные дважды, один ajax, а другой - обычной почтой браузера.

+0

Спасибо за ваш ответ. Одно дело, что вход не регистрируется дважды. Первая строка пуста. Однажды я запускал код, и при запросе базы данных я нашел фактически 4 строки: первые 2 пустые, а третий и четвертый с a b c d e. Я пытаюсь увидеть проблему jQuery и вернуться к вам. Еще раз спасибо. – Cinghio

0

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

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