我正在使用一个名为“强大”的插件,它在用途上类似于重力形式。
我有两个感兴趣的领域。第一个字段加载Town
“我的”列wp_locations
桌子使用下面的代码。
function frm_populate_posts_town($values, $field){
if($field->id == 800){ //change 125 to the ID of the field to populate
global $wpdb;
$towns =$wpdb->get_results("SELECT Town FROM wp_locations");
$values[\'options\'] = array();
foreach ($towns as $town) {
$values[\'options\'][$town->Town] = $town->Town;
}
}
return $values;
}
第二个字段是一个隐藏字段,根据第一个字段的值自动选择“County”列中的值。(顺便说一句
$_POST[\'item_meta\'][802]
表示隐藏字段
add_filter(\'frm_validate_field_entry\', \'my_custom_validation_town\', 8, 3);
function my_custom_validation_town($errors, $posted_field, $posted_value){
if($posted_field->id == 802){ //change 25 to the ID of the hidden field
$town_b = $_POST[\'item_meta\'][800];//Gets the value from the first field
global $wpdb;
$query = "SELECT County FROM wp_locations WHERE Town = $town_b";
$the_county = $wpdb->get_var($query);
$_POST[\'item_meta\'][802] = $the_county;
}
return $errors;
}
第二种方法不起作用。
编辑我发现我需要使用动作挂钩frm_after_create_entry 然后添加一个Javascript以进行“文本计算”,这是插件的功能之一。
不幸的是,我不知道如何使用#field_800
e、 g:
"SELECT County FROM wp_locations WHERE Town =`#field_800`"
<script type="text/javascript">
jQuery(document).ready(function($){
$(\'#field_800\').change(function(){
var val1 = $("#field_800").val();//How can I add mySQL here
$("#field_802").val(val1);
});
});
</script>
SO网友:s_ha_dum
我的猜测是,这是一个错误的钩子,你正在尝试做什么,或者你使用它不正确。
注意事项:
您正在将未验证的数据传递到查询中。请不要那样做。这
$town_b = $_POST[\'item_meta\'][800];//Gets the value from the first field
global $wpdb;
$query = "SELECT County FROM wp_locations WHERE Town = $town_b";
。。。正在乞求被黑客攻击。中的任何数据
$_POST[\'item_meta\'][800]
点击未过滤的DB。非常危险。使用
prepare
, 至少是这样。
$query = $wpdb->prepare("SELECT County FROM wp_locations WHERE Town = %s",$town_b);
第二,您已经连接到一个非常明显的现场验证系统,但您正在尝试设置一个
$_POST
价值
That is clearly not what it is meant for. 所以你要么太晚了,要么太早了,要么就是什么。很难断章取义地说出你的两个功能是什么样子的。我几乎可以保证你需要使用另一个钩子。添加更多详细信息,我将了解如何使用更具体的答案进行编辑。
SO网友:Adzay
嗨,我通过使用第一个函数和Jquery解决了这个问题。我在第一个函数中调用了Town和County作为下拉列表中的值Town-County
然后,我使用Jquery字符串拆分来拆分字符串,使用“-”作为分隔符,然后将值放入两个单独的字段中。
function frm_populate_posts_town($values, $field){
if($field->id == 800){ //change 125 to the ID of the field to populate
global $wpdb;
$towns =$wpdb->get_results("SELECT Town,County FROM wp_locations");
$values[\'options\'] = array();
foreach ($towns as $town) {
$values[\'options\'][$town->Town] = $town->Town.\'-\'.$town->County;
}
}
return $values;
}
我使用它将下拉列表值拆分为两个单独的字段。
<script type="text/javascript">
jQuery(document).ready(function($){
$(\'#field_hmm\').change(function(){
var str = $("#field_hmm").val();
var substr = str.split(\'-\');
var val1 = substr[0];
var val2 = substr[1];
$("#field_xhoxo1").val(val1);
$("#field_xhoxo2").val(val2);
});
});
</script>