我有一个php函数,它应该循环包含记录ID的$ _POST数据数组,但对于我的生活,我无法弄清楚为什么它不起作用。我在我的网站的其他地方有类似的功能,但这个特别的想要很难:
if (isset($_POST['classNumberAdd']) && isset($_POST['classNameAdd'])) {
$classNumber = $_POST['classNumberAdd'];
$className = $_POST['classNameAdd'];
$sqlAddClass = "INSERT INTO classes (className, classNumber) VALUES ('" . $className . "', '" . $classNumber . "')";
include('../includes/dbConnect.php');
$addClassResult = @mysqli_query($dbc, $sqlAddClass);
// Get the id of the class just inserted
$sqlGetClassID = "SELECT classID FROM classes WHERE className = '" . $className . "' AND classNumber = '" . $classNumber . "'";
$getClassIdResult = @mysqli_query($dbc, $sqlGetClassID);
$classID = 0;
while ($row = mysqli_fetch_row($getClassIdResult)) {$classID = $row[0];}
$log->lwrite('Before check if array set: docsToAddToClass array: ' . $_POST['docsToAddToClass']);
// Add any checked docs to the new class
if (isset($_POST['docsToAddToClass'])) {
$log->lwrite('After check if array set and before addDocs function call: docsToAddToClass array: ' . $_POST['docsToAddToClass']);
foreach($_POST['docsToAddToClass'] as $docID) {
$log->lwrite('Doc id being added to new class: ' . $docID);
// Add each class to the document
$sqlAddClassToDoc = "INSERT INTO classDocs (classDocsClassID, classDocsDocID) VALUES ('" . $classID . "', '" . $docID . "')";
$resultAddDocToClass = @mysqli_query($dbc, $sqlAddClassToDoc);
}
}
mysqli_close($dbc);
echo $classID;
}
正如你所看到的,我有几行记录我所在的位置。我从来没有到过“$log->lwrite('Doc id being added to new class: ' . $docID);
”这一行,所以出于某种原因我没有进入阵列。在任何运行中写入日志的最后一行是“After check if array set ...”行。
最初,我将POST和类ID传递给一个函数(定义为function addDocsToClass($docsArray, $classID)
,而不是foreach循环,但是这不起作用,所以我将整个事情移动到上面的代码中排除故障。
我已经尝试将$ _POST数组首先设置为变量(例如$docsArray = $_POST['docsToAddToClass'])
),但到目前为止我还没有尝试过。
我错过了什么/做错了什么?
[编辑] 基于仔细查看我的代码的新信息:
我在$ .ajax()调用中调用上面的php脚本,该调用将docsToAddToClass作为以逗号分隔的id列表传递,这些ID由以下行检索和构建:
$.each($('#docsTable input[name="docsToAddToClass[]"]:checked'), function() {
docsToAddToClass.push($(this).val());
});
如下面的回复中所述,$ _POST ['docsToAddToClass']在我的日志中打印出35,36,37等.javascript alert()也显示相同的输出。所以我决定使用php explode构建一个迭代的数组:
$docsArray = explode(',', $_POST['docsToAddToClass']);
但是,只有列表中的第一个id被放入变量中,最终不是数组,从而破坏了脚本。
所以,即使在发现了所有这些之后,我也回到了原点!
当格式化为35,36,37时,如何遍历$ _POST ['docsToAddToClass']中的id列表,并获取每个id,就像$ _POST是常规php数组一样?
答案 0 :(得分:0)
您确认已设置$ _POST ['docsToAddToClass'],并且它是一个数组吗?如果它不是数组,则foreach()不起作用。
答案 1 :(得分:0)
好的,经过更多的试验和错误,我得到了它的工作。问题是,从我最初发布的内容和我现在的工作代码来看,我不知道我做对了什么!
所以,我将发布有效的相关代码: 使用Javascript:
var addDocs = 'false';
var docsToAddToClass = new Array();
if ($('input.chkAddDoc:checked').length > 0) {
addDocs = 'true';
// Get the ids of the checked docs the user wants to add to the new class
$.each($('#docsTable input[name="docsToAddToClass[]"]:checked'), function() {
docsToAddToClass.push($(this).val());
});
}
alert('docsToAddToClass' + docsToAddToClass);
// Build the string to send as $_POST data
var dataString = 'classNumberAdd=' + classNumberAdd + '&classNameAdd=' + classNameAdd;
if (docsToAddToClass != '') { dataString += '&docsToAddToClass=' + docsToAddToClass; }
和PHP脚本: if(isset($ _ POST ['classNumberAdd'])&& isset($ _ POST ['classNameAdd'])){ $ classNumber = $ _POST ['classNumberAdd']; $ className = $ _POST ['classNameAdd'];
$sqlAddClass = "INSERT INTO classes (className, classNumber) VALUES ('" . $className . "', '" . $classNumber . "')";
include('../includes/dbConnect.php');
$addClassResult = @mysqli_query($dbc, $sqlAddClass);
// Get the id of the class just inserted
$sqlGetClassID = "SELECT classID FROM classes WHERE className = '" . $className . "' AND classNumber = '" . $classNumber . "'";
$getClassIdResult = @mysqli_query($dbc, $sqlGetClassID);
$classID = 0;
while ($row = mysqli_fetch_row($getClassIdResult)) {$classID = $row[0];}
// Add any checked docs to the new class
if (isset($_POST['docsToAddToClass'])) {
$docsArray = explode(',', $_POST['docsToAddToClass']);
foreach($docsArray as $docID) {
// Add each class to the document
$sqlAddClassToDoc = "INSERT INTO classDocs (classDocsClassID, classDocsDocID) VALUES ('" . $classID . "', '" . $docID . "')";
$resultAddDocToClass = @mysqli_query($dbc, $sqlAddClassToDoc);
}
}
// Close the database connection
mysqli_close($dbc);
echo $classID;
}
希望能帮助别人!