gpt4 book ai didi

php - 使用 jQuery ajax 和 PHP 重复条目到 mySQL

转载 作者:太空宇宙 更新时间:2023-11-03 11:05:17 25 4
gpt4 key购买 nike

我正在使用 jQuery(版本 1.8.1)和 PHP(版本 5.3)提交一个表单,将一个条目添加到 mySQL 数据库中,发生的事情是在第一次提交时一切都很好,但是对于没有页面的每个后续提交刷新它会添加一个额外的条目。

此外,我还在 UI 中使用 Bootstrap(版本 2.1.1)和来自 Jasny for Bootstrap(版本 j1a)的上传小部件。我还没有将上传小部件连接到处理或提交,因为我在实现它时检测到重复问题。

请注意,这是一个概念验证系统,因此代码很粗糙,因为在项目得到确认之前我不会投资清理它。因此,您会注意到一些内联 mySQL 查询,我知道这不是最好的方法,但它可以用于演示目的,稍后将被清理。此外,作为 POC 系统,它目前位于内部服务器上,我可以共享代码,但遗憾的是此时无法显示示例站点。

回到问题,例如,“公司1”的第一个帖子为“公司1”添加了1条记录,“公司2”的第二条记录为“公司2”添加了2条记录,第三条“公司 3”的记录为“公司 3”添加 3 条记录,依此类推。如果我以任何方式重新加载表单页面(刷新或新请求),问题会从第一次提交重新开始。

我正在使用 jQuery serializeajax 将数据发布到 PHP 处理器。我已经记录了处理器收到的所有帖子,我看到处理器正在从表单中接收多条记录,我认为这可能是由 PHP 中的 foreach 循环引起的,但这不是案子。

我已经删除了 jQuery 函数,它每次都能完美运行,在正常的 PHP 提交上没有任何重复。我已经通过 jQuery 而不是 serialize 手动处理了条目,但是由于有一个通过 PHP 的动态数组,我仍然对该数组使用了 serialize,这产生了如上所述的重复项。我已经搜索了这个问题好几天了,但找不到任何确定的方法来解决这个问题,博客和论坛上看起来相关的所有建议都没有用,我尝试了大约 10-15 个不同的选项。

所有这些的结合使我相信问题出在 jQuery serialize 和/或 ajax 函数上,但每次我看时我的眼睛都变得呆滞现在在这个代码。

我也在考虑将表单放在外部文件中并通过 ajax 重新加载它,或者通过 jQuery 清理表单,为每个需要的新条目将其设置回默认值,但是我认为这些方法中的任何一种都不能解决问题。

非常感谢任何帮助,在此先感谢您的帮助!

jQUERY代码

<script>
$(document).ready(function() {
$('.fileupload').fileupload('name:logo');
$('.help-inline').hide();
$("#btn_process").click(function() {
$('form').submit(function() {
$('.help-inline').hide();
var company_name = $("#company_name").val();
if (company_name === "") {
$("div#name_group").addClass("error");
$("span#name_error").show();
return false;
}
var dataString = $('form').serialize();
$.ajax({
type: "POST",
url: "inc/addcompany.php",
data: dataString,
success: function(html) {
if(html === 'success')
{
$('#message')
.addClass("label label-success")
.css("margin-bottom","20px")
.html("<h3>Login successful</h3><p>Company added</p>")
.slideDown(1500, function() {});
}
else
{
$('#message')
.addClass("label label-important")
.css("margin-bottom","20px")
.html("<h3>Error</h3><p>There was an error, please check the information and try again</p>")
.slideDown(1500, function() {});
$("div#name_error").addClass("error");
$("span#name_error").show();
$("div#type_error").addClass("error");
$("span#type_error").show();
return false;
}
}
});
return false;
});
});
});
</script>

HTML 标记

<form class="form-horizontal" id="add_company" method="POST" action="">  
<fieldset>
<div id="message"></div>
<div id="name_group" class="control-group">
<label class="control-label" for="company_name">Company name </label>
<div class="controls">
<input type="text" id="company_name" name="company_name" />
<span id="name_error" class="help-inline">This needs to be more than 3 characters</span>
</div>
</div>
<div id="type_group" class="control-group">
<label class="control-label">Company type </label>
<div class="controls">
<?
$sql = "SELECT description,id FROM types ORDER BY description";
$qry = mysql_query($sql) or die("ERROR: could not get company types => ".mysql_error());
while($company_type = mysql_fetch_array($qry)) {
echo '
<label class="checkbox inline"><input type="checkbox" name="type[]" value="'.$company_type['id'].'" /> '.$company_type['description'].' </label>';
}
?>
<span id="type_error" class="help-inline">Please select a minimum of 1 type</span>
</div>
</div>
<div id="website_group" class="control-group">
<label class="control-label" for="website">Website </label>
<div class="controls">
<input type="text" id="website" name="website" placeholder="www.something.com" />
</div>
</div>
<div id="logo_group" class="control-group">
<label class="control-label">Logo </label>
<div class="controls">
<div class="fileupload fileupload-new" data-provides="fileupload">
<div class="fileupload-new thumbnail" style="width: 50px; height: 50px;"><img src="/img/50x50.png" /></div>
<div class="fileupload-preview fileupload-exists thumbnail" style="width: 50px; height: 50px;"></div>
<span class="btn btn-file"><span class="fileupload-new">Select image</span>
<span class="fileupload-exists">Change</span>
<input type="file" /></span>
<a href="#" class="btn fileupload-exists" data-dismiss="fileupload">Remove</a>
</div>
</div>
</fieldset>
<input type="hidden" name="action" value="add_company" />
<button class="btn" data-dismiss="modal" aria-hidden="true">Close</button>
<button class="btn btn-primary" name="btn_process" id="btn_process">Save changes</button>
</form>

PHP 处理器

$error = false;
$error_company_name = false;
$error_type = false;
$error_website = false;
$company_name = $_REQUEST['company_name'];
$type = $_REQUEST['type'];
$website = $_REQUEST['website'];
$logo = $_REQUEST['logo'];

if(empty($company_name)) {
$error = true;
$error_company_name = true;
}
include_once('db.php');
$sql = "SELECT description,id FROM company_types";
$qry = mysql_query($sql) or die("ERROR: could not get company types => ".mysql_error());
$type_count = 0;
while($array = mysql_fetch_array($qry)) {
$type_count = $type_count+1;
}
if($type_count == 0) {
$error = true;
$error_type = true;
}
$ic = 0;
foreach($_REQUEST['type'] as $item) {
$ic = $ic+1;
}
if($ic == 0) {
$error = true;
$error_type = true;
}
if(isset($website) && $website != ' ') {
$url = 'http://'.$website;
if(!filter_var($url, FILTER_VALIDATE_URL)) {
$error = true;
$error_website = true;
}
}
if($error == false) {
$sql = "INSERT INTO company_list (name,website,logo) VALUES('$company_name','$website','$logo')";
$qry = mysql_query($sql) or die ("ERROR: could not add company => ".mysql_error());
$company_id = mysql_insert_id($link);
if($company_id == '' || $company_id == null || empty($company_id)) {
echo 'fail';
exit;
}
foreach($_REQUEST['type'] as $company_type) {
$sql = "INSERT INTO companies_types (companies_id,type_id) VALUES('$company_id','$company_type')";
$qry = mysql_query($sql) or die("ERROR: could not link company type: => ".mysql_error());
}
echo 'success';
}

最佳答案

在紧靠这一行的上方添加 $('form').unbind('submit');:$('form').submit(function()

我在这里找到了这个解决方案:https://stackoverflow.com/a/668354/300575

注意:我通过复制您的代码并在我的服务器上进行测试来验证它是否有效。

关于php - 使用 jQuery ajax 和 PHP 重复条目到 mySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12340484/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com