我有一个页面,在加载时,会填充3个下拉菜单供用户选择。在我的localhost上,这很好,但在我的实时服务器上,我在开发人员工具中收到错误“POST(我的站点名称)500(内部服务器错误)jquery.js:8630。
这是jquery:
$(function() {
//after load, populate lists
Update_List_ProcedureAreas_Schedule();
Update_List_Patients_Cancel();
Update_List_Cancel_Reasons();
});
这是其中一个功能,但其他两个几乎完全相同,但所有3个都失败了。我发送一个通用函数php文件我想运行的函数,如果有任何参数的功能也是如此。也许有点奇怪,但它可以帮助我组织我的代码:
function Update_List_Patients_Cancel() {
$.ajax({
url: 'php/functions.php',
type: 'POST',
dataType: 'json',
cache: false,
data: {Function_ID: 'pull_patient_list_cancel'},
success: function(data){
var dropDown = document.getElementById("selectedpatient_cancel");
dropDown.options.length=0;
dropDown[dropDown.length] = new Option('', '')
for (i = 0; i < data.length; i++) {
dropDown[dropDown.length] = new Option(data[i].Patient_Name, data[i].Patient_UID)
}
},
error: function() {
}
});
}
这是'php / functions.php'中的PHP,它接受Function_ID,然后使用开关验证输入,然后使用任何适当的变量调用该函数:
<?php
session_start();
//Make sure a funciton was sent
if(isset($_POST['Function_ID']) == true) {$tempFunction = $_POST['Function_ID'];}
else {echo "No fuction selected";}
//switch to functions
switch($tempFunction) {
case 'pull_patient_list_cancel':
pull_patient_list_cancel();
break;
}
//Pull patient list for cancel drop down
function pull_patient_list_cancel() {
require $_SESSION['db_connect']; //code to connect to the database, which is successful, btw
$returnArray = array();
$sql = "
SELECT Patient_UID, Patient_Name
FROM tbl_patients
WHERE Active = 1
";
if($result = $conn->query($sql)) {
$conn->close();
foreach($result->fetch_all(MYSQLI_ASSOC) as $row) {
$returnArray[] = $row;
}
echo json_encode($returnArray);
} else {
$conn->close();
echo "Failed - pull patient lists cancel";
}
}
看起来由于某种原因,我无法在foreach循环中执行。我已经放入虚假的回声来查看函数停止运行的位置,并且它不会在每个循环内或之后输出任何回声,但它将一直运行直到该循环开始。我已经检查了开发工具中的响应日志,看到伪造的回声一直持续到foreach循环,然后什么都没有。
有什么想法吗?
------------解-----------------
问题是我在localhost xampp设置上安装了mysqlnd,但它没有安装在我今天设置的digitalocean lampp服务器上。这使得fetch_all(MYSQLI)不起作用。但是,我可以坚持使用mysql安装并使用fetch_assoc()并且它工作正常。
但是,我最终使用:
在我的digitalocean Droplet上安装mysqlndapt-get install php5-mysqlnd
然后使用
重新启动服务器service apache2 restart
现在我的所有fetch_all(MYSQLI)函数都能正常工作。谢谢大家的帮助。
答案 0 :(得分:1)
PHP功能页面上存在语法错误....
你不能像这样使用isset
从
更改您的代码 if(isset($_POST['Function_ID']) == true) //which is wrong
到
if(isset($_POST['Function_ID']) && $_POST['Function_ID'])==true)
// this is the right way
连接应在所有程序执行完毕后关闭
else{}
$conn->close();
答案 1 :(得分:1)
在获取foreach的结果之前,无法关闭连接。循环后关闭连接。
更好的是,删除两个连接关闭语句,并在else块之后放一个。
if($result = $conn->query($sql)) {
foreach($result->fetch_all(MYSQLI_ASSOC) as $row) {
$returnArray[] = $row;
}
echo json_encode($returnArray);
} else {
echo "Failed - pull patient lists cancel";
}
$conn->close();