根据字段值从数据库表中获取值

时间:2013-07-13 作者:Adzay

我正在使用一个名为“强大”的插件,它在用途上类似于重力形式。

我有两个感兴趣的领域。第一个字段加载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>

2 个回复
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>

结束