2011-08-29 8 views
0

Le script est comme suit ...script panneau d'administration ne fonctionne pas correctement

<?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>'; 
} 
?> 

Un long script que je sais, mais vous devez tout voir pour lui donner un sens, le script fonctionne très bien en dehors d'un petit insecte.

Vous remarquerez que la première instruction if a une variable

$delete = 'update'; 

Ce qui signifie que si le $_GET['tab'] = gameupdates, $delete = 'update'

Le second elseif est différent ...

if $_GET['tab'] = tasklist, $delete = 'task' 

En ces deux premiers si et sinon si les déclarations il y a des boucles while qui contiennent un lien quelque chose comme

<a href="adminpanel?tab=process&update OR task=' . some variable . '">Delete</a> 

Maintenant, le lien est soit mise à jour si elle est dans la $_GET['gameupdates'] ou tâche si elle est en $_GET['tasklist'].

Dans la troisième instruction elseif où $_GET['tab'] = process, les deux premières instructions sont pour les soumissions de formulaire, mais les deux dernières instructions elseif sont ce pour quoi les liens que j'ai expliqué sont pour.

Maintenant, si quelqu'un clique sur le lien «Supprimer» alors que dans le $_GET['tab'] = updates, $delete = update. Donc, la deuxième déclaration elseif dans le elseif $_GET['tab'] = process se déclenche, et c'est le cas.

La chose est si quelqu'un clique sur un lien alors que dans $_GET['tab'] = tasklist, puis $delete = task. Ainsi, la troisième instruction elseif de l'instruction elseif $_GET['tab'] = process doit être déclenchée comme $delete = task. Au lieu que la mise à jour se déclenche tout le temps, et la requête échoue, vous remarquerez qu'après la requête l'en-tête redirige vers la page précédente avec une session contenant la confirmation de l'action. Lorsque je clique sur le lien dans 'Supprimer' dans $_GET['tab'] = tasklist, il déclenche celui pour la mise à jour, quand il devrait déclencher celui pour le $_GET['tab'] = tasklist.

J'espère que ce sens que je suis coincé comme ce qu'il faut faire, toutes mes règles, je pense sont correctes, je ne vois pas mon erreur ...

Merci de votre patience (et beaucoup de celui-ci !!!

Répondre

1

Votre code référence la variable $ _SESSION, mais ne démarre jamais la session (session_start()). Vous devez utiliser session_start() en haut de votre script pour accéder aux données de session.

De plus, '=' est un opérateur d'affectation. Vous avez besoin d'un opérateur d'égalité ('==').

Dans la ligne suivante, vous assignez la valeur de « mise à jour » à $delete

elseif ($delete = 'update') { 

Au lieu de cela, vous devriez vérifier si $delete contient la valeur « mise à jour »:

elseif ($delete == 'update') { 

Vous aurez besoin pour faire ce changement dans plusieurs endroits.

+0

Ok vais essayer cela merci ... Je suis nouveau à ce :) – carlgcoder

+0

J'ai essayé votre réponse et cela n'a pas fonctionné, j'ai alors décidé d'utiliser des sessions, ainsi que votre réponse et cela a fonctionné, pourrait être assez aimable pour Expliquez ceci, pour référence future. – carlgcoder

+0

@carlgcoder: S'il vous plaît voir ma réponse mise à jour. –

Questions connexes