[英]PHP Multidimensional Array Key Values
我正在尝试为我的项目构建一个查询构建器,我可以在其中传递任何数组、执行 SELECT 语句、返回结果并将它们格式化回 JavaScript。
我已经尝试了几天来让它工作,但我在 PHP 方面有点新手,坦率地说,手册似乎没有帮助。
首先,我构建以下数组:
for(var i = 0; i < FormSelect.length; i++){
if(FormSelect[i].selectedIndex != 0){
if(WhereClause.length == 0){
var WhereObject = {
ColumnName: FormSelect[i].id,
ColumnValue: FormSelect[i].value
}
}
else{
var WhereObject = {
Operator: " AND ",
ColumnName: FormSelect[i].id,
ColumnValue: FormSelect[i].value
}
}
}
WhereClause.push(WhereObject);
}
然后我将请求发送到服务器,如下所示,一切正常:
var FormSearchData =
"ColumnNames=" + ColumnNames
+ "&"
+ "ViewName=" + ViewName
+ "&"
+ "WhereClause=" + WhereClause
+ "&"
+ "FormSearchExecuted=1"
var FormSearchXMLHTTPRequest = new XMLHttpRequest();
FormSearchXMLHTTPRequest.onload = function(){
console.log(FormSearchXMLHTTPRequest.responseText);
}
FormSearchXMLHTTPRequest.open("POST", RootData + "global/search/search.php", false);
FormSearchXMLHTTPRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
FormSearchXMLHTTPRequest.send(FormSearchData);
PHP 中的服务器端是问题开始的地方。
if(isset($_POST["FormSearchExecuted"]) && !empty($_POST["FormSearchExecuted"])){
if(empty($_POST["ColumnNames"])){
$column_names = "*";
}
else{
$column_names = $_POST["ColumnNames"];
}
if(!empty($_POST["WhereClause"])){
if(count($_POST['WhereClause']) == 1){
$form_search_sql = "DECLARE @ColumnNames VARCHAR SET @ColumnNames = ? DECLARE @ViewName VARCHAR(255) SET @ViewName = ? DECLARE @WhereColumn VARCHAR SET @WhereColumn = ? DECLARE @WhereValue VARCHAR SET @WhereValue = ? EXEC('SELECT ' + @ColumnNames + ' FROM ' + @ViewName + ' WHERE ' + @WhereColumn + ' = ' + @WhereValue)";
}
foreach($_POST['WhereClause'] as $where){
echo $where['ColumnName'];
}
$form_search_parameters = array($column_names, array(&$_POST["ViewName"]), array(&$_POST["WhereClause"]));
}
我正在努力在 PHP 中返回 ColumnName、ColumnValue 和 Operator Key,因为我想将它们作为变量传递到参数化查询中。 任何帮助将不胜感激,让我走上正轨。
你的整个方式是引导你使用 GET 方法,但你使用 POST。
尝试将 POST 更改为 GET,看看它是否有帮助,然后回到这里。
在你的 js 中试试这个:
FormSearchXMLHTTPRequest.open("GET", RootData + "global/search/search.php&" + FormSearchData , false);
FormSearchXMLHTTPRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
FormSearchXMLHTTPRequest.send();
并且在 php 中肯定将所有$_POST
更改为$_GET
在设置var FormSearchData = ... ;
后,也尝试放置一个分号var FormSearchData = ... ;
要使用 POST,您最好将 FormSearchData 作为对象发送:
var FormSearchData = {
"ColumnNames": ColumnNames,
"ViewName": ViewName,
"WhereClause": WhereClause,
"FormSearchExecuted": 1
};
另外,使用var_dump($_POST)
查看缺少的内容
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.