【发布时间】:2018-10-09 21:08:12
【问题描述】:
我添加了一个 ajax 按钮来将一些数据发送到 wordpress 数据库中的自定义表。
这就是我所拥有的。
jQuery(document).ready(function(){
jQuery("#holiday-submit").click(function(event){
event.preventDefault();
//var name = jQuery("#dname").val();
var date = jQuery("#holiday").val();
var reason =jQuery("#holiday-reason").val();
jQuery.ajax({
type: 'POST',
url: MyAjax.ajaxurl,
data: {"action": "add_holiday", "holiday":date, "reason" :reason},
success:function(data){
jQuery("#holiday-status").addClass("success");
jQuery("#holiday-status").html( "New Holiday added " + date +" " + reason);
}
});
});
});
然后在函数文件中,我有以下内容
function add_holiday(){
$holiday = $_POST['holiday'];
$reason = $_POST['reason'];
global $wpdb;
$table1= $wpdb->prefix.'holidays';
$results = $wpdb->get_results("select * from $table1 where holiday=$holiday");
if($wpdb->num_rows == 0 ){
$wpdb->insert(
$table1,
array(
'holiday' => $holiday,
'reason' => $reason
),
array(
'%s'
)
);
die();
return true;
}
else{
die();
return false;
}
}
add_action('wp_ajax_add_holiday', 'add_holiday');
add_action('wp_ajax_nopriv_add_holiday', 'add_holiday');
ajax调用和相关回调函数都工作正常,一旦使用以下表单提交数据,它就会发送到数据库并保存。
但是,我不想将重复的日期添加到数据库中。
这就是为什么我添加了一个条件来检查数据库表中是否已经存在日期。理想情况下,如果日期已添加到数据库中,我需要显示错误。然而,ajax 调用在不考虑上述条件的情况下运行。
解决此问题的最佳方法是什么。
这是我的表单和输出区域。
<form action="" method="post">
<input type="date" id="holiday" name="holiday">
<input type="text" id="holiday-reason" placeholder="Holiday reason">
<!--<input type="submit" id="holiday-submit">-->
<input type="button" id="holiday-submit" value="submit" class="btn btn-primary">
</form>
<div id="holiday-status">
</div>
<div id="current-holidays">
<table id="declared-holidays" class="table table-success">
<thead>
<tr>
<th>Date</th>
<th>Reason</th>
</tr>
</thead>
<tbody>
<?php
$table = $wpdb->prefix.'hr_holidays';
$result = $wpdb->get_results("select * from $table");
foreach ($result as $holiday_item){?>
<tr>
<td><?php echo $holiday_item->holiday ;?></td>
<td><?php echo $holiday_item->reason ;?></td>
</tr>
<?php
}
?>
</tbody>
</table>
【问题讨论】:
-
尝试返回选择查询的响应,看看它包含什么
-
你可能需要使用:where holiday='$holiday'
-
@Gerard 是正确的,但这仍然会使您的代码容易受到 sql 注入的影响
-
@Gerard 我已经尝试过了,但是,ajax 仍然显示成功消息。我的意思是,它仍然显示添加成功消息的消息。我应该怎么做才能显示错误?会寻求帮助
-
var_dump($results)然后在浏览器中按 f12,查看网络选项卡,看看 ajax 请求中显示了什么问题
标签: jquery mysql ajax wordpress