Formular in mehrere Tabellen einlesen

  • Hallo zusammen,

    ich möchte auf meiner Seite so etwas wie ein Gästebuch mit Kategorien anlegen, die Kategorien und die Beiträge sollen aber getrennt von einander in unterschiedlichen Tabellen einer mysql Datenbank gespeichert werden, soweit so gut, doch immer wenn ich mein Formular abschicken will erhlate ich diese Fehlermeldung "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''Test\r\n\r\n')' at line 1"

    Hier der Quelltext

    $DatabasePointer = mysql_connect("localhost", "username", "pwd");
    mysql_select_db("dbname", $DatabasePointer);

    $_REQUEST['category'] = mysql_real_escape_string($_REQUEST['category']);
    $_REQUEST['entry'] = mysql_real_escape_string($_REQUEST['entry']);

    $SQL = "INSERT INTO categories VALUES (NOW('') '".$_REQUEST['category']."')";
    mysql_query($SQL, $DatabasePointer);
    $SQL1 = "INSERT INTO entries (entry) VALUES (NOW('') '".$_REQUEST['entry']."')";
    mysql_query($SQL1, $DatabasePointer);

    Danke schonmal.

    MFG clark_039

    P.S username, pwd und db sind nur platzhalter für die eig. zugangsdaten

  • Die NOW()-Funktion braucht keinen Parameter und du hast den Beistrich zwischen den Feldwerten vergessen.

    Ausserdem laesst du bei der ersten Query die Liste der Feldnamen aus. Das ist in Ordnung, du solltest davon aber lieber absehen da eine Aenderung der Tabellenstruktur zu Problemen fuehren wuerde. In der zweiten Query gibst du zwar eine Liste mit Feldnamen, diese hat jedoch nur einen Eintrag ("entry"), du willst aber 2 Werte (NOW() und $_REQUEST['entry']) in die Tabelle schreiben - das passt nicht zusammen.

    Am schoensten und richtigsten waere meiner Meinung nach daher folgender Code:

    PHP
    // ...
    
    
    $SQL = "INSERT INTO categories (time, category) VALUES (NOW(), '" . $_REQUEST['category'] . "')";
    mysql_query($SQL, $DatabasePointer);
    
    
    $SQL1 = "INSERT INTO entries (time, entry) VALUES (NOW(), '" . $_REQUEST['entry'] . "')";
    mysql_query($SQL1, $DatabasePointer);

    (Wobei ich "time", "category" und "entry" jetzt als Feldnamen angenommen habe.)

  • ich habe schon ewig nichts mehr mit PHP gemacht, aber ist dieser Code nicht sehr anfällig für Angriffe durch SQL Injektion?

    Wenn man den Code nur so betrachtet, ja. Im ursprünglichen Post wurden die Werte aber eh auch escaped:

    PHP
    $_REQUEST['category'] = mysql_real_escape_string($_REQUEST['category']);
    $_REQUEST['entry'] = mysql_real_escape_string($_REQUEST['entry']);

    Der Klarheit halber wär's aber wohl besser, das direkt bei der Query zu tun, somit ergibt sich:

    PHP
    $DatabasePointer = mysql_connect("localhost", "username", "pwd");
    mysql_select_db("dbname", $DatabasePointer);
    
    
    $SQL = "INSERT INTO categories (time, category) VALUES (NOW(), '" . mysql_real_escape_string($_REQUEST['category']) . "')";
    mysql_query($SQL, $DatabasePointer);
    
    
    $SQL1 = "INSERT INTO entries (time, entry) VALUES (NOW(), '" . mysql_real_escape_string($_REQUEST['entry']) . "')";
    mysql_query($SQL1, $DatabasePointer);
  • Hallo zusammen, sry wenn ich euch iwie nerve, aber noch eine Frage ich bin jetzt so weit das die Werte in verschiedenen Tabellen gespeichert werden, jetzt mein Problem, wie geben ich die Werte aus mehrern Tabellen in einem Dokument aus ?

    Danke schonmal im Vorraus

    P.S: Danke beefy, hast mir echt geholfen

  • Hallo zusammen, sry wenn ich euch iwie nerve, aber noch eine Frage ich bin jetzt so weit das die Werte in verschiedenen Tabellen gespeichert werden, jetzt mein Problem, wie geben ich die Werte aus mehrern Tabellen in einem Dokument aus ?

    Puh, die Frage ist ein bisschen sehr allgemein gehalten. :) Generell wirst du Daten mittels SELECT-Statements aus der Datenbank rausholen; falls mehrere Tabellen dabei verknuepft werden sollen wirst du wohl JOINs benutzen. Irgendwie kriegst du dann ein Array von Zeilen zurueck, die jeweils wiederum ein Array von Zellenwerten beinhalten...

    Hier ein Beispiel:

    PHP
    $res = mysql_query('SELECT tabelle1.feld1, tabelle1.feld2, tabelle2.feld3 FROM tabelle1 JOIN tabelle2 ON tabelle1.referenz=tabelle2.id');
    while ($row = mysql_fetch_assoc($res)) {
        echo $row['feld1'] . ', ' . $row['feld2'] . ', ' . $row['feld3'] . "<br />\n";
    }

    P.S: Danke beefy, hast mir echt geholfen

    Bitte gern :)

  • Sorry das ich mich so ungenau ausgedrückt hab, hier noch mal etwas genauer :)

    Bisher hab ich mir die Daten aus EINER Tabelle immer so ausgeben lassen:

    $ResultPointer = mysql_query("SELECT entry FROM entries ORDER BY date DESC LIMIT $AktuelleSeite, $ErgebnisseProSeite", $DatabasePointer);
    $Anzahl = mysql_num_rows(mysql_query("SELECT entry FROM entries ORDER BY date DESC", $DatabasePointer));

    echo"<table border=\"0\">";

    for($i = 0; $i < mysql_num_rows($ResultPointer); $i++)
    {
    $Gaestebuch = mysql_fetch_object($ResultPointer);
    echo
    Category;
    echo ": ",
    "<b>";
    echo nl2br($Gaestebuch->category),
    "</b>";
    echo "<br>";
    echo "What you should ";
    echo "do";
    echo ": ";
    echo "<b>";
    echo nl2br($Gaestebuch->entry),
    "</b>";

    }

    echo "</table>";

    Also würde es auch mit beefys Befehl klappen oder gibt es noch einen anderen ?

    Danke nochmals für eure nette und vorallem schnelle Hilfe und sry wenn ich euch nerve oder so

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!