我尝试在执行简单搜索后使用值填充表单但是当我运行脚本时,我得到" undefined"当我发出警报(数据)时,或者是空白的响应;。
的search.php
<?php
include_once 'config/config.php';
include_once 'config/connect.php';
$conn = dbconn();
if(isset($_POST['btn-search']))
{
$sub_id = mysqli_real_escape_string($conn, $_POST['user_id']);
$sql = "SELECT * FROM users WHERE user_id = '".$sub_id."'";
$res = mysqli_query($conn, $sql);
$row = mysqli_fetch_array($res);
$found = array();
while ($row = mysqli_fetch_array($res))
{
$found[] = array(
'name' => $row['full_name'],
'init_date' => $row['init_date'],
'position' => $row['position'],
'email' => $row['email'],
);
echo json_encode($found);
}
}
mysqli_close($conn);
?>
脚本
<script>
/*
simple validation script
*/
$('document').ready(function()
{
$('#register-submit-btn').attr('disabled', 'disabled');
/* validation */
$("#register-form").validate({
rules:
{
user_id: {
required: true,
minlength: 5,
},
},
messages:
{
cedulaid:{
required: "The user ID is required",
minlength: "The user ID should be no less than 5 characeters long.",
},
},
submitHandler: submitForm
});
/* validation */
/* get data */
function submitForm()
{
var data = $("#details-form").serialize();
$.ajax({
type : 'POST',
url : 'search.php',
data : data,
beforeSend: function()
{
$("#detailsmsg").fadeOut();
$("#btn-search").html('<img src="include/btn-ajax-loader.gif" /> Looking...');
$('#btn-search').attr('disabled', 'disabled');
},
success : function(data)
{
alert(data);
$("#detailsmsg").fadeIn(1000, function(){
$("#detailsmsg").removeClass("alert-danger").addClass("alert-success");
$('#btn-search').removeAttr('disabled');
$("#btn-search").html('Search again?');
$('#register-submit-btn').removeAttr('disabled');
$("#detailsmsg").html("<span>Data Found</span>");
});
$("#name").val(data.name); // not sure how to do this part. this is probably very wrong but still not getting anything on the alert.
$("#init_date").val(data.init_date);
$("#position").val(data.position);
$("#email").val(data.email);
}
});
return false;
}
/* get data */
});
</script>
我在成功函数的顶部有警报(数据),因为我想看看我会得到什么,但它又回来了。如果我做警报(数据[0])我得到&#34;未定义&#34;消息。
控制台POST返回:
name=&init_date=&position=&email=
脚本中可能存在许多错误,我可以获得任何反馈和帮助。如果需要任何其他细节,请告诉我。
提前致谢,
答案 0 :(得分:3)
获取单个输出,你只需要$ row = mysqli_fetch_array($ res); not loop..it将返回单个参数输出..
Search.php
<?php
include_once 'config/config.php';
include_once 'config/connect.php';
$conn = dbconn();
if(isset($_POST['btn-search']))
{
$sub_id = mysqli_real_escape_string($conn, $_POST['user_id']);
$sql = "SELECT * FROM users WHERE user_id = '".$sub_id."'";
$res = mysqli_query($conn, $sql);
$row = mysqli_fetch_array($res);
$found = array();
$found[] = array(
'name' => $row['full_name'],
'init_date' => $row['init_date'],
'position' => $row['position'],
'email' => $row['email'],
);
echo json_encode($found);
}
mysqli_close($conn);
?>
尝试一次..可能它会帮助你。
答案 1 :(得分:1)
通过快速查看PHP代码,它返回嵌套数组:
[
[
'name' => 'whatever',
'init_date' => 'date',
...
]
]
这是因为您首先定义$found = array();
,然后使用$found[] = array(...)
向其附加更多数组。
然而,javascript部分尝试仅访问不存在的data.name
。假设数据库中至少有一条记录,可能存在data[0].name
。
您是否想要将data
作为数组进行迭代?
但问题可能在于PHP部分,您在其中调用mysqli_fetch_array()
两次,因此覆盖$row
变量并跳过找到的第一个结果:
$row = mysqli_fetch_array($res);
$found = array();
while ($row = mysqli_fetch_array($res))
{
...
我看到的最后一件事是,当您收集了所有搜索结果后,您可能希望在echo json_encode($found);
循环后拨打while
。顺便说一下,这也会产生无效的JSON。