2016-04-16 4 views
0

Ich erzeuge eine Schaltfläche zum Löschen für jede 'Notiz', die der Benutzer erstellt. Unabhängig davon, auf welches Löschen Sie klicken, wird die zuletzt gespeicherte Notiz gelöscht, nicht die der Notiz. Ich nehme an, dass etwas mit meinem versteckten Feld 'deleteID' nicht stimmt.PHP löschen aktuelle 'note' funktioniert nicht

<!-- connections.php connects to the database --> 
<?php require 'connections.php'; ?> 

<!-- check to make sure the user is logged in, 
    if not then redirect them to login.php --> 
<?php session_start(); 
if(isset($_SESSION["UserID"])){ 
} else { 
    header('Location: Login.php'); 
    die(); 
}?> 

<!-- $result is a query containing all the notes 
    of the current user --> 
<?php $UserID = $_SESSION["UserID"]; 
     $result = mysqli_query($con, "SELECT * FROM notes WHERE UserID = '$UserID'");  
?> 

<!-- when you click 'save' upload the new note 
    to the database and refresh the page. 
    when you click 'delete' remote the note 
    that goes with that button from the database --> 
<?php if(isset($_POST['save'])) { 

     session_start(); 
     $note = $_POST['note']; 
     $UserID = ($_SESSION["UserID"]); 

     $sql = $con->query("INSERT INTO notes (UserID, note)Values('{$UserID}','{$note}')"); 

     header('Location: Account.php'); 

    } else if (isset($_POST['delete'])){ 
     $deleteID = $_POST['deleteID']; 

     $sql = $con->query("DELETE FROM notes WHERE noteID = '$deleteID'"); 

     header('Location: Account.php'); 

    } else if (isset($_POST['edit'])){ 


}?> 

<!DOCTYPE HTML> 
<html lang="en"> 
    <head> 
     <title>My Account</title> 
     <link rel="stylesheet" type="text/css" href="stylesheet.css"> 
    </head> 

    <body> 

     <h1 class="titleAct">Welcome</h1> 

     <form action="" method="post" name="notesubmit" id="notesubmit"> 

       <div> 
        <textarea name="note" cols="50" rows="4" form="notesubmit" id="noteinput">New Note 
        </textarea> 
       </div> 

        <input name="save" type="submit" class="button" id="save" value="Save"> 

      <!-- Whenever a note is saved, print out the 
       note with timestamp followed by the edit 
       and delete buttons for each note --> 
      <?php while ($row = mysqli_fetch_array($result)): ?> 
       <?php $note = $row['note'];?> 
       <?php $date = $row['time'];?> 
       <?php $noteID = $row['noteID'];?> 

     <div id="note"> 
      <p class="note"><?php echo $date; ?></br> ---------------- </br><?php echo $note; ?> </p> 
     </div> 


       <input name="deleteID" type="hidden" id="hidden<?php echo $noteID;?>" value="<?php echo $noteID; ?>"> 
       <input name="delete" type="submit" class="button" value="Delete"> 

      <?php endwhile; ?> 
     </form> 

     <div> 
      <a class="link" href="Logout.php">Logout</a> 
      <div> 
      <a class="link" href="Deactivate.php">Deactivate My Account</a> 
      </div> 
     </div> 

    </body> 
</html> 
+0

Untersuchen Sie Ihren Code mit dem Browser-Inspektor. Gibt es einen anderen Wert für die ID in Ihrer versteckten Löscheingabe? –

+0

Ja, ich tat und alle DeleteIDs haben unterschiedliche Werte. –

+0

Testen Sie '$ deleteID' vor der $ sql-Anfrage mit folgendem Befehl:' echo $ deleteID; sterben ('here'); 'Wenn es die gleiche ID ist, egal welche Wahl Sie treffen, dann gibt es ein Problem in Ihrem Formular –

Antwort

0

Der Fehler scheint im Namen der Eingabe zu sein. Sollte dem Wert entsprechen, den Sie im ID-Teil festgelegt haben.

So:

<input name="hidden<?php echo $noteID;?>" type="hidden" id="hidden<?php echo $noteID;?>" value="<?php echo $noteID; ?>"> 

Andernfalls werden alle Ihre Eingaben haben den gleichen Namen, und es nimmt die letzte, die Abfrage zu tun.

EDIT

Setzen Sie den Namen des Wertes Sie direkt in der Submit-Button wie folgt löschen möchten:

<input name="delete-<?php echo $noteID;?>" type="submit" class="button" value="Delete"> 

Dann können Sie den Wert erhalten in $_POST Array und explode() den Wert auf - Separator, um den ID-Wert zu erhalten.

+0

Ah, das macht Sinn. Aber wie erkenne ich dann, was mein $ deleteID in meinem else ist, wenn? –

+0

Mit einer foreach von $ _POST: 'foreach ($ _ POST als $ key => $ value) {}', $ Schlüssel geben Sie zum Beispiel "delete-48", dann können Sie den Schlüssel mit diesem zum Beispiel testen: ' if (strstr ($ key, 'delete') {// Ihr Code} ' –

1

Ich denke es ist nicht das überhaupt löschen - aber die div mit dem Hinweis in ihm - jeweils die gleiche ID, da sie in der while-Schleife und damit jede Note div hat die ID „note“

sind
<div id="note"> 

sollte seine sein

<div id="note<?php echo $noteID;?>"; 
+0

Guter Punkt! Das ist ein Fehler zu korrigieren in der Tat –

+0

auch - nicht sicher, ob es ein Problem 0 ist, aber die
scheinen falsch.Wenn sie Linie sind bricht das sollte sein
gavgrif

+0

Das bewirkt nicht, welche Notiz gelöscht wird.Das div ist das gleiche für CSS-Zwecke. –

0

Sie haben auch mehrere Eingänge für das Formular ein vorlegen - ein auszulösen pariert und jeweils einen für jedes Echo-ed Notiz löschen, so auslösen der löschen einreichen Funktion wird triggern Sie zuerst das Speichern-Submit - daher wird $ _POST ['save'] vor dem $ ausgeführt _POST ['Löschen']. Dies könnte das Problem sein, dass die letzte Eingabe-Note geändert wird und nicht die Trigger-Aktion.

Ich würde vorschlagen, die Funktion zum Hinzufügen von Notizen auf ein anderes Formular als die Funktionen zum Löschen von Notizen zu trennen. Sie können die gleiche, wenn auch andere Logik haben, und dies sollte in der neuen Version wie erwartet funktionieren, da Sie tatsächlich die Informationen veröffentlichen, die Sie erwarten.