Gravity Forms post/get 从 mysql 数据库获取数据
Gravity Forms post/get to get data from mysql database
遗憾的是,我无法通过 mysql 数据库中的简单 ajax 请求成功检索数据。
我在启用短代码的 ajax 中设置了引力。当我更改第一个字段的选择时,我希望完成 ajax 请求以从数据库中检索数据并将其加载到另一个字段,具体取决于第一个字段的选择。
警报有效,所以我猜 jquery 请求有问题。
编辑:下面的解决方案!
关于您的代码有很多要说的,但正如您所说的您是代码新手,所以让我们从小处着手。
为 Web 开发时,一件好事是使用大多数最新浏览器都具有的开发人员工具。
尤其是 Ajax,因为它可以帮助您找出问题所在。
在 Firefox 或 Chrome 上,您可以按 F12 显示它。
它应该会显示一个新的 windows(或在底部或当前打开的 window 的一侧显示一个面板)。
在此面板中,您会发现几个选项卡,但我们在这里感兴趣的是 "Network" 。
网络选项卡显示加载页面时发出的所有请求(甚至之后):尝试重新加载它,你会看到它。
在网络面板内,你会发现几个 "buttons": ALL, XHR JS, CSS, ... 允许你过滤要显示的请求类型。
例如 AJAX 请求是 "XHR".
现在,如果您操作 select 元素(您使用 jQuery 在 "change" 上创建操作的元素),您应该会看到您的 AJAX 请求出现在面板。
点击它,您将看到有关已发送和已收到回复的详细信息:
Headers符合您的要求
预览和响应显示服务器的 return(在您的情况下:getrcedepot.php)(预览只是显示原始响应的响应的最漂亮(和可导航)版本)
您可能会发现问题所在的一些线索(或至少是一些迹象)。
此外,我的 JavaScript 代码有一些错误,您可以在开发者工具箱的 "Console" 选项卡中找到一些信息。
更新:这是我目前使用的解决方案,我认为这是最好的。我没有在 php 文件中创建单独的连接,而是访问 wordpress 功能。
这是重力形式的代码 ajax 在 select 框上完成更改后从 mysql 数据库获取数据的请求。
add_filter("gform_pre_render_2", "getdbdata");
function getdbdata($form){
?>
<script type="text/javascript">
jQuery(document).ready(function(){
jQuery('#input_2_1').bind('change', function()
{
var vdepot_id = jQuery("#input_2_1").val();
jQuery.ajax({
async: 'false',
type: 'post',
global: 'false',
dataType: 'json',
url: 'yoursite.com/yourscript.php',
data: {
virtuellesdepot_id:vdepot_id,
},
success: function (response) {
jQuery("#input_2_28").val(response.status);
}
});
});
});
</script>
<?php
return $form;
}
这就是您在服务器上需要的 php 代码:
<?php
if( isset( $_POST['virtuellesdepot_id'] ) )
{
$vdepot_id = $_POST['virtuellesdepot_id'];
define( 'WP_USE_THEMES', false ); // Don't load theme support functionality
require_once("../wp-load.php"); //now you can use wp functions
$user_id = get_current_user_id();
//make a security check if user has access to the entry
$user_check = $wpdb->get_var($wpdb->prepare("SELECT user_id FROM usertable WHERE vdepot_id= %d ", $vdepot_id));
if($user_check != $user_id){
header("Location: https://yoursite/no-access/");
exit();
}
//use any sql query you want
$status = $wpdb->get_var($wpdb->prepare("SELECT status_id FROM table WHERE user_id= %d ", $user_id));
$arr = array ('status'=>$status);
echo json_encode($arr);
}else{
echo "Fehler bei if isset";
}
?>
遗憾的是,我无法通过 mysql 数据库中的简单 ajax 请求成功检索数据。
我在启用短代码的 ajax 中设置了引力。当我更改第一个字段的选择时,我希望完成 ajax 请求以从数据库中检索数据并将其加载到另一个字段,具体取决于第一个字段的选择。
警报有效,所以我猜 jquery 请求有问题。
编辑:下面的解决方案!
关于您的代码有很多要说的,但正如您所说的您是代码新手,所以让我们从小处着手。
为 Web 开发时,一件好事是使用大多数最新浏览器都具有的开发人员工具。 尤其是 Ajax,因为它可以帮助您找出问题所在。
在 Firefox 或 Chrome 上,您可以按 F12 显示它。 它应该会显示一个新的 windows(或在底部或当前打开的 window 的一侧显示一个面板)。 在此面板中,您会发现几个选项卡,但我们在这里感兴趣的是 "Network" 。 网络选项卡显示加载页面时发出的所有请求(甚至之后):尝试重新加载它,你会看到它。 在网络面板内,你会发现几个 "buttons": ALL, XHR JS, CSS, ... 允许你过滤要显示的请求类型。 例如 AJAX 请求是 "XHR".
现在,如果您操作 select 元素(您使用 jQuery 在 "change" 上创建操作的元素),您应该会看到您的 AJAX 请求出现在面板。
点击它,您将看到有关已发送和已收到回复的详细信息: Headers符合您的要求 预览和响应显示服务器的 return(在您的情况下:getrcedepot.php)(预览只是显示原始响应的响应的最漂亮(和可导航)版本)
您可能会发现问题所在的一些线索(或至少是一些迹象)。
此外,我的 JavaScript 代码有一些错误,您可以在开发者工具箱的 "Console" 选项卡中找到一些信息。
更新:这是我目前使用的解决方案,我认为这是最好的。我没有在 php 文件中创建单独的连接,而是访问 wordpress 功能。
这是重力形式的代码 ajax 在 select 框上完成更改后从 mysql 数据库获取数据的请求。
add_filter("gform_pre_render_2", "getdbdata");
function getdbdata($form){
?>
<script type="text/javascript">
jQuery(document).ready(function(){
jQuery('#input_2_1').bind('change', function()
{
var vdepot_id = jQuery("#input_2_1").val();
jQuery.ajax({
async: 'false',
type: 'post',
global: 'false',
dataType: 'json',
url: 'yoursite.com/yourscript.php',
data: {
virtuellesdepot_id:vdepot_id,
},
success: function (response) {
jQuery("#input_2_28").val(response.status);
}
});
});
});
</script>
<?php
return $form;
}
这就是您在服务器上需要的 php 代码:
<?php
if( isset( $_POST['virtuellesdepot_id'] ) )
{
$vdepot_id = $_POST['virtuellesdepot_id'];
define( 'WP_USE_THEMES', false ); // Don't load theme support functionality
require_once("../wp-load.php"); //now you can use wp functions
$user_id = get_current_user_id();
//make a security check if user has access to the entry
$user_check = $wpdb->get_var($wpdb->prepare("SELECT user_id FROM usertable WHERE vdepot_id= %d ", $vdepot_id));
if($user_check != $user_id){
header("Location: https://yoursite/no-access/");
exit();
}
//use any sql query you want
$status = $wpdb->get_var($wpdb->prepare("SELECT status_id FROM table WHERE user_id= %d ", $user_id));
$arr = array ('status'=>$status);
echo json_encode($arr);
}else{
echo "Fehler bei if isset";
}
?>