2016-06-09 5 views
1

Ich habe einen Kommentarabschnitt auf meiner Index.php Seite. (Wie ich hier gezeigt habe) Ich habe einen Löschen-Link, der Sie auf die Löschseite sendet. Ich möchte diese spezifische ID löschen können, wenn darauf geklickt wird. index.phpLöschen der ausgewählten ID aus Mysqli

<div class='commentnest'> 
       <p id='id'> ".$row['id']."</p> 
       <p id='user'> ".$row['user'].":</p> 
       <p id='comment'>".$row['usercomment']." </p> 
       <p id='time'>".$row['timestamp']."</p> 
       <a href='delete.php?=".$row['id']."'>Delete</a> 
     </div> 

delete.php Seite

if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 
$sql = "DELETE FROM commenttable WHERE id=id"; 
if (mysqli_query($conn, $sql)) { 
    echo "Record deleted successfully"; 
} else { 
    echo "Error deleting record: " . mysqli_error($conn); 
} 
mysqli_close($conn); 
?> 

jedes Mal, wenn ich dort einen bestimmten Kommentar senden, löscht er alle Kommentare. Ich weiß, dass es daran liegt, dass ich nicht sage, welche ID ich auswählen soll, aber es fällt mir schwer, das herauszufinden.

Danke für jede Hilfe!

+2

lesen Sie, dass - http://php.net/manual/en/tutorial.forms.php – splash58

+2

'ID = ID 'ist wahr. http://sqlfiddle.com/#!9/add33/3 Benennen Sie zuerst Ihren 'GET' Parameter. Verwenden Sie dann die parametrisierte Abfrage, um den Wert zu löschen. – chris85

+0

Sie benötigen ein GET-Array für diese –

Antwort

1

Alle Datensätze werden gelöscht, da id=id immer wahr ist, es sei denn, ID ist NULL. Sie müssen es richtig von Ihrem HTML-Pass:

<a href='delete.php?id=".$row['id']."'>Delete</a> 

und dann richtig in der Abfrage verwenden:

$sql = "DELETE FROM commenttable WHERE 
    id='".mysqli_escape_string($conn,$_REQUEST["id"])."'" ; 

wenn die ID immer eine ganze Zahl ist, können Sie einfacher schreiben:

$sql = "DELETE FROM commenttable WHERE 
    id=".(int)$_REQUEST["id"]); 
+0

[Little Bobby] (http://bobby-tables.com/) sagt *** [Ihr Skript ist für SQL Injection Attacks gefährdet.] (Http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php *** Erfahren Sie mehr über [vorbereitete] (http://en.wikipedia.org/wiki/Prepared_statement) Anweisungen für [MySQLi] (http://php.net/manual/en/mysqli.quickstart.prepared-statements.php). Sogar [die Zeichenfolge zu entkommen] (http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string) ist nicht sicher! –

+0

mysqli_escape_string() oder die Benutzereingabe in int umwandeln entfernt die Möglichkeit der SQL-Injektion. Vorbereitete Anweisungen können zwar auch vor einer SQL-Injektion schützen, dies ist jedoch nicht die einzige Möglichkeit. –

+1

Entgehen der Schnur, während eine gute Idee, kann besiegt werden. Wie auch immer - Requisiten für Sie und Ihre laufende Familie! Du bist schneller als ich! ¯ \\ _ (ツ) _/¯ –

Verwandte Themen