Frage von bishare, 33

Kommentare kommentieren, wie speichere ich es in einer Datenbank?

Wie kann ich verschiedene kommentierte Kommentare bestimmten Kommentare zuweisen? Habe überlegt zuerst eine ID für die Tabelle Kommentare festzulegen und dann, wenn jemand kommentiert, es die ID vom Kommentar bekommt(es wird dann in eine neue Tabelle gespeichert). Aber wie mache ich es jetzt über sql, dass er die ID feststellt?

<?php
        $titel=$_POST['titel'];
        $question=$_POST['question'];
        $ID = 1;



         $dp = mysql_connect("localhost", "root", "usbw");
         mysql_select_db("webseite", $dp);

Zeile 20             while ( $row = mysql_fetch_assoc($result) ) {
                    $ID = $ID +1;
                    }


         $sql = "INSERT INTO question(ID,titel, question) VALUES('$ID','$titel','$question')";
                    $result= mysql_query($sql);



                           if($result){
        echo "Funktioniert";
        

        } else {
        echo "Falsch";
        }

      ?>

Die Fehlermeldung: Notice: Undefined variable: result in C:\Users\ASUS\Desktop\root\Fragenstellen.php on line 20

Warning: mysql_fetch_assoc() expects parameter 1 to be resource, null given in C:\Users\ASUS\Desktop\root\Fragenstellen.php on line 20

Wie ermittle ich jetzt eine ID und füge gleichzeitig die ID danach in meiner Datenbank ein und funktioniert das mit den Kommentaren und kommentierten Komentaren, wie ich es oben erklärt habe?

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von adulescentulus, 10

Also der Ansatz an deiner Datenbank ist schon falsch

Du bräuchtest 2 Tabellen. Die erste mit den Fragen (frageid, frage ).

die 2. mit den Kommentaren (kommentarId, frageid, kommentar)

Die Verknüpfung passiert dann über frageid. Um die Unnötige Aufzählung zu vermeiden kannst du sowohl  frageid als auch kommentarId auf AutoIncrement setzen:

http://dev.mysql.com/doc/refman/5.7/en/example-auto-increment.html

Bezüglich deines Codes würde ich PDO empfehlen und deine Variabeln vorher abfangen. Hier ein Beispiel (wenn ID auf auto_increament ist kann der Wert NULL sein und er addiert einfach auf):

<?php
$titel = filter_input(INPUT_POST, 'titel', FILTER_SANITIZE_STRING);
$question = filter_input(INPUT_POST, 'question', FILTER_SANITIZE_STRING);

$pdo = new PDO('mysql:host=localhost;dbname=webseite', 'root', 'usbw');

$sql = "INSERT INTO question (ID, titel, question) VALUES (NULL, :titel, :question);";
$stmt = $pdo->prepare($sql);
$stmt->bindParam(':titel', $titel, PDO::PARAM_STR);
$stmt->bindParam(':question', $question, PDO::PARAM_STR);
if ($stmt->execute()) {
echo "Gespeichert";
} else {
echo "Fehler:";
print_r($stmt->errorInfo());
}
?>
Antwort
von happyfish2, 25

Deine Zeile 20 ist von vorn bis hinten Murks. Auf welchen Query bezieht sich denn die Schleife? Und warum zählst du dort eine ID hoch? Das ist Aufgabe der Datenbank, nicht Aufgabe von PHP.

Weiterhin solltest du dich mit SQL-Injections beschäftigen. Sonst ist deine Datenbank in kurzer Zeit gelöscht.

Um auf die Frage mit den Kommentaren zu antworten: Du nimmst dort die ID der Frage als Fremdschlüssel rein (1:n Beziehung) und ein weiteres Feld mit einer Eltern-ID, die sich als Fremdschlüssel auf den Primärschlüssel der Kommentartabelle bezieht.

Keine passende Antwort gefunden?

Fragen Sie die Community

Weitere Fragen mit Antworten