У меня есть функция php, которая должна проходить через массив данных $ _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);
", поэтому по какой-то причине я не получаю в массиве.Последняя строка, которую нужно записать в журнал при любом проходе, - это строка «После проверки, если массив установлен ...».
Первоначально вместо цикла foreach я передавал POST и идентификатор класса вфункция (определенная как function addDocsToClass($docsArray, $classID)
, но это не сработало, поэтому я переместил все это в код, как описано выше, для устранения неполадок.
Я попытался сначала установить для переменной $ _POST переменную (например, $docsArray = $_POST['docsToAddToClass'])
), но ничего из того, что я пробовал, пока не работает.
Что я пропускаю / делаю неправильно?
[ПРАВИТЬ] Новая информация, основанная на более внимательном рассмотрении моегоcode:
Я вызываю вышеуказанный php-скрипт в вызове $ .ajax (), который передает docsToAddToClass в виде списка разделенных запятыми идентификаторов, полученных и построенных следующими строками:
$.each($('#docsTable input[name="docsToAddToClass[]"]:checked'), function() {
docsToAddToClass.push($(this).val());
});
Как упомянуто в ответе ниже, $ _POST ['docsToAddToClass'] печатается в моем журнале как 35,36,37 и т. Д. В javascript alert () также отображается тот же вывод. Поэтому я решилиспользовать php explode для создания массива для итерации:
$docsArray = explode(',', $_POST['docsToAddToClass']);
Hoоднако, в переменную помещается только первый идентификатор в списке, который в итоге НЕ является массивом, нарушающим сценарий.
Итак, даже после обнаружения всего этого, я в значительной степени вернулся кквадрат один!
Как перебрать список идентификаторов в $ _POST ['docsToAddToClass'], когда он отформатирован как 35,36,37, и получить каждый идентификатор, как если бы $ _POST был обычным phpмассив