Неопределенный $POST после запроса xmlhttp
Мой код отправляет запрос xmlhttp в файл php, отправляя идентификатор, чтобы запись можно было идентифицировать и удалить из базы данных. Однако при выполнении запроса на удаление я получаю сообщение об ошибке, в котором говорится, что "COMICID" не определен (переменная, использующая значение идентификатора, отправленное по ПОЧТЕ). Я не уверен, как убедиться, что он определен правильно. В настоящее время ошибка, которую я получаю после обработки ошибок, звучит так: "Комикс не поставляется". и ошибка, которую я получаю при удалении раздела кода ISSET, звучит так: "Ошибка. Страницы в комикс не удален". В нынешнем виде запрос на удаление не работает.
Javascript:
function delComic()
{
var radioButtons = $("#listID input:radio[name='comicList']");
var radioID = radioButtons.index(radioButtons.filter(':checked'));
console.log(radioID);
if (radioID < 0)
{
window.alert("You must select a comic before deleting.");
}
else
{
var xmlhttp = new XMLHttpRequest();
var url = "delCom.php?comicID="+radioID;
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState == 4 && xmlhttp.status == 200)
{
var message = xmlhttp.responseText;
loadComic();
window.alert(message);
}
}
xmlhttp.open("POST", url, true);
xmlhttp.send();
}
}
PHP:
<?php
if (isset($_POST["comicID"]))
{
$comic = $_POST["comicID"];
$dir = 'comics/'.$comic.'/';
if (!file_exists($dir))
{
mkdir($dir, 0777, true);
}
include_once('includes/conn.inc.php');
mysqli_query($conn, "DELETE FROM serieslink WHERE comicID = '$comic'");
$query = ("DELETE FROM page WHERE comicID = '$comic'");
if (!$result = mysqli_query($conn, $query))
{
echo ("Query1 error: " . mysqli_error($conn));
exit;
}
else
{
if (mysqli_affected_rows($conn) > 0)
{
$dirHandle = opendir($dir);
while($file = readdir($dirHandle))
{
if(!is_dir($file))
{
unlink("$dir"."$file");
}
}
closedir($dirHandle);
rmdir($dir);
$query2 = ("DELETE FROM comic WHERE comicID = '$comic'");
if (!mysqli_query($conn, $query2))
{
echo ("Query2 error: " . mysqli_error($conn));
exit;
}
else
{
if (mysqli_affected_rows($conn) > 0)
{
echo ("The selected comic was successfully deleted.");
}
else
{
echo ("Error. Comic not deleted.");
}
}
}
else
{
echo "Error. Pages in comic not deleted.";
}
}
$conn->close();
}
else
{
$comic = null;
echo "No comic supplied";
}
?>
3 answers
С помощью POST вы выполняете свой Ajax-запрос иначе, чем с помощью GET. Строка запроса является аргументом функции send()
, а не частью URL-адреса, и вы оставляете ?
:
var xmlhttp = new XMLHttpRequest();
var url = "delCom.php";
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState == 4 && xmlhttp.status == 200)
{
var message = xmlhttp.responseText;
loadComic();
window.alert(message);
}
}
xmlhttp.open("POST", url, true);
xmlhttp.send("comicID="+radioID);
Редактировать:
Вам также действительно следует URL-кодировать значения параметров, если они могут содержать пробелы и т.д. А чтобы обойти возможное кэширование браузера, вы можете добавить параметр со временем:
var d = new Date();
xmlhttp.send("comicID="+encodeURIComponent(radioID)+"&ts="+d.getTime());
Нет необходимости читать этот параметр метки времени на стороне сервера; это только для того, чтобы обмануть браузер.
Измените три первые строки на, и все должно работать нормально.
if (isset($_GET["comicID"]))
{
$comic = $_GET["comicID"];
На самом деле я решил ее сам случайно. Оказывается, ошибка заключается в том, что программа останавливается в тот момент, когда она пытается удалить все страницы, связанные с комиксом. Когда ему показывают уже пустой комикс, он пытается удалить несуществующие записи. Добавление страницы в комикс вручную, а ЗАТЕМ попытка удалить комикс полностью сработали отлично.
Так что, по сути, мне просто нужна обработка ошибок для пустых комиксов. Однако спасибо за указания относительно ПОСТА.