MySQL INSERT автоматически добавляет повторяющиеся строки

119
11

Я пытаюсь обновить базу данных, используя html-форму + jquery + php

Когда я нажимаю кнопку "Отправить" в форме, она работает, но она добавляет две одинаковые записи в базу данных для каждого клика.

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

Вот сценарии, которые я использую

HTML

<div id="result" class="results"></div>
<form id="person-form" class="person-form" method="post">
<fieldset>
<legend><strong>Add a new member</strong></legend>
<table>
<tr><td><label for="Name" >Name</label></td>
<td colspan="2"><input type="text" name="name" value="Enter the Name, 55 char max." /></td></tr>
<tr><td><label for="email">Email</label></td>
<td colspan="2"><input type="text" name="email" value="Enter the email" /></td></tr>
<tr><td><label for="subscribe">Subscribe</label></td>
<td><input type="checkbox" name="subscribe" value="Yes" /></td>
<td><input type="submit" value="Add member" id="add-member" class="add-member"/></td></tr>
</table>
<div style="clear:both;"></div>
</fieldset>
</form>

JQuery

$("#add-url").live("click", function() {
var name = $('input[name=name]').val();
var email = $('input[name=email]').val();
var subs = $('input[name=subscribe]:checkbox:checked').val();
var data = 'name='+name+'&email='+email+'&subs='+subs;

$.post(add_member_script.ajaxurl, data, function(data) {
$('#results').html(data);

});
return false;
});

И PHP

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

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

if (empty($_POST['name']) || empty($_POST['email'])){
echo 'enter some value';
} else {

if($_POST['subs']== 'yes') {
$sql="INSERT INTO $table (name, email, subs) VALUES ('$_POST[name]','$_POST[email]','$_POST[subs]')";
} else {
$sql="INSERT INTO $table (name, email) VALUES ('$_POST[name]','$_POST[email]')";
}

if (!mysql_query($sql,$con)){
mysql_error();
} else {
list_links_table ();
}
mysql_close($con);
die();
}

спросил(а) 2012-07-01T02:45:00+04:00 8 лет, 2 месяца назад
1
Решение
89

Похоже, что форма может быть представлена как через AJAX, так и с "нормальным" способом. Чтобы убедиться, добавьте onsubmit="return false" в тег формы:

<form id="person-form" class="person-form" method="post" onsubmit="return false">

В качестве альтернативы вы можете удалить все свои JS и разрешить отправку формы в обычном режиме и посмотреть, сохраняется ли дублирование.

ответил(а) 2012-07-01T03:03:00+04:00 8 лет, 2 месяца назад
41

Наконец, я нашел его, он не имеет никакой ошибки в сценариях, которые я написал выше. Проблема заключалась в том, что я дважды зарегистрировал крючок WordPress и из-за этого отправлял по 2 запроса с каждым щелчком. Я удалил его, и проблема решена. Спасибо @Erenor Paz, @Mark Eirich и @slugonamission за ваши добрые усилия. С этим я закончил свой первый плагин WordPress :)

ответил(а) 2012-07-01T03:55:00+04:00 8 лет, 2 месяца назад
41

Как сказано в комментариях, я предлагаю вам использовать <input type="button" value="Add member" id="add-member" class="add-member"/> вместо "type = submit", чтобы форма не была загружена через HTML, но только с использованием кода Javascript :)

ответил(а) 2012-07-01T03:11:00+04:00 8 лет, 2 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема