Сценарий выглядит следующим образом ...
<?php
// ########## GAME UPDATE FORM ##########
if (isset($_GET['tab']) && $_GET['tab'] === 'gameupdates') {
$delete = 'update';
if (isset($_SESSION['success'])) {
echo $_SESSION['success'];
unset($_SESSION['success']);
}
echo '<p>To make a new game update fill out the form below along with the type of update it corresponds to.</p><p>If you have completed a task make sure to remove it from the <a href="/adminpanel?tab=tasklist">task list</a>.</p><form action="/adminpanel?tab=process" method="post">
<fieldset>
<input type="hidden" name="newupdate" />
<textarea name="message"></textarea>
<select name="type">
<option value="Community">Community</option>
<option value="Security">Security</option>
<option value="Gameplay">Gameplay</option>
<option value="Account">Account</option>
<option value="Miscellaneous">Misc.</option>
</select>
<input id="submit" type="submit" value="Insert Update" />
</fieldset>
</form><p>The last six updates were as follows from newest to oldest:</p><p>(To delete an entry hover over the update and press delete)</p>';
$q = $dbc -> prepare ("SELECT * FROM updates ORDER BY date_time DESC LIMIT 0, 6");
$q -> execute();
while ($update = $q -> fetch(PDO::FETCH_ASSOC)) {
echo '<div id="displaybox"><div><strong>' . $update['date_time'] . '</strong><span>' . $update['type'] . '</span></div><p>' . $update['message'] . '</p><a href="/adminpanel?tab=process&update=' . $update['date_time'] . '">Delete</a></div>';
}
}
// ########## TO DO LIST ##########
elseif (isset($_GET['tab']) && $_GET['tab'] === 'tasklist') {
$delete = 'task';
if (isset($_SESSION['success'])) {
echo $_SESSION['success'];
unset($_SESSION['success']);
}
echo '<p>This is the to do list anything that needs to be done whether it be urgent or not put it here.</p><p>Remember once the task has been completed remember to add it to the <a href="/adminpanel?tab=gameupdates">game updates</a>.</p><p>Below (if any) are the current tasks that need doing, to add a new task complete the form at the bottom of this page.</p>';
$q = $dbc -> prepare ("SELECT * FROM tasks ORDER BY date_time");
$q -> execute();
while ($task = $q -> fetch(PDO::FETCH_ASSOC)) {
echo '<div id="displaybox"><div><strong>' . $task['date_time'] . '</strong><span>' . $task['type'] . '</span></div><p>' . $task['message'] . '</p><a href="/adminpanel?tab=process&task=' . $task['date_time'] . '">Delete</a></div>';
}
echo '<p>To add a task complete the form below, along with which type of update it is.</p><p>To delete a task once it has been completed hover over the task and press delete.</p><form action="/adminpanel?tab=process" method="post">
<fieldset>
<input type="hidden" name="newtask" />
<textarea name="message"></textarea>
<select name="type">
<option value="Community">Community</option>
<option value="Security">Security</option>
<option value="Gameplay">Gameplay</option>
<option value="Account">Account</option>
<option value="Miscellaneous">Misc.</option>
</select>
<input id="submit" type="submit" value="Insert New Task" />
</fieldset>
</form>';
}
// ########## PROCESS ADMIN CHANGES ##########
elseif (isset($_GET['tab']) && $_GET['tab'] === 'process') {
// ########## GAME UPDATE SUCCESS ##########
if (isset($_POST['newupdate'])) {
if ($_POST['message'] === '') {
header('Location:/adminpanel?tab=gameupdates');
exit();
}
$q = $dbc -> prepare("INSERT INTO updates (message, type, date_time) VALUES (?, ?, ?)");
$q -> execute(array($_POST['message'], $_POST['type'], date("y/m/d : H:i:s", time())));
$_SESSION['success'] = '<p><strong>Successfully added a new game update.</strong></p>';
header('Location:/adminpanel?tab=gameupdates');
exit();
}
// ######### TO DO LIST SUCCESS ##########
elseif (isset($_POST['newtask'])) {
if ($_POST['message'] === '') {
header('Location:/adminpanel?tab=tasklist');
exit();
}
$q = $dbc -> prepare("INSERT INTO tasks (message, type, date_time) VALUES (?, ?, ?)");
$q -> execute(array($_POST['message'], $_POST['type'], date("y/m/d : H:i:s", time())));
$_SESSION['success'] = '<p><strong>Successfully added a new task.</strong></p>';
header('Location:/adminpanel?tab=tasklist');
exit();
}
// ########## GAME UPDATE DELETE ##########
elseif ($delete = 'update') {
$q = $dbc -> prepare("DELETE FROM updates WHERE date_time = ?");
$q -> execute(array($_GET['update']));
$_SESSION['success'] = '<p><strong>Successfully deleted the selected update.</strong></p>';
header('Location:/adminpanel?tab=gameupdates');
exit();
}
// ########## TO DO LIST DELETE ##########
elseif ($delete = 'task') {
$q = $dbc -> prepare("DELETE FROM tasks WHERE date_time = ?");
$q -> execute(array($_GET['task']));
$_SESSION['success'] = '<p><strong>Successfully deleted the selected task.</strong></p>';
header('Location:/adminpanel?tab=tasklist');
exit();
}
else {
header('Location:/adminpanel');
exit();
}
}
// ########## ADMIN CONTROL PANEL ##########
else {
echo '<p>This is the admin panel. Click on an option below to begin.</p><p><a href="/adminpanel?tab=gameupdates">Add/Remove A Game Update</a></p><p><a href="/adminpanel?tab=tasklist">Add/Remove A Task From List</a></p>';
}
?>
Длинный сценарий, который я знаю, но вам нужно увидеть все это, чтобы он имел смысл, сценарий отлично работает, за исключением одной маленькой ошибки.
Вы заметите, что в первом операторе if есть переменная
$delete = 'update';
. Это означает, что если $_GET['tab'] = gameupdates
, $delete = 'update'
Второй elseif отличается ...
if $_GET['tab'] = tasklist, $delete = 'task'
В этих первых двух операторах if и else if есть циклы while, которые содержат ссылку, похожую на
<a href="adminpanel?tab=process&update OR task=' . some variable . '">Delete</a>
Теперь ссылка либо обновляется, если она находится в $_GET['gameupdates']
или задание, если оно находится в $_GET['tasklist']
.
В третьем операторе elseif, где $_GET['tab'] = process
, первые два оператора предназначены для представления формы, но последние два оператора elseif представляют собой ссылки, которые яобъяснено для.
Теперь, если кто-то нажимает на ссылку «Удалить», находясь в $_GET['tab'] = updates
, $delete = update
.Таким образом, запускается второе выражение elseif в elseif $_GET['tab'] = process
, и оно срабатывает.
Дело в том, что если кто-то нажимает на ссылку, находясь в $_GET['tab'] = tasklist
, то $delete = task
.Поэтому третье утверждение elseif в операторе elseif $_GET['tab'] = process
должно иметь вид $delete = task
.
Вместо этого все время запускается обновление, и запрос не выполняется, вы заметите, что после запроса заголовок перенаправляется на предыдущую страницу с сеансом, содержащим подтверждение действия.Когда я нажимаю на ссылку «Удалить» в $_GET['tab'] = tasklist
, она запускает одну для обновления, когда она запускает одну для $_GET['tab'] = tasklist
.
Надеюсь, в этом есть смысл.все мои правила, которые я считаю правильными, я не вижу своей ошибки ...
Спасибо за ваше терпение (и многое из этого !!!)