1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Formular in mehrere Tabellen einlesen

  • clark_039
  • 9. Januar 2009 um 13:15
  • Unerledigt
  • clark_039
    5
    clark_039
    Mitglied
    Punkte
    205
    Beiträge
    30
    • 9. Januar 2009 um 13:15
    • #1

    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

  • beefy
    13
    beefy
    Mitglied
    Reaktionen
    18
    Punkte
    1.683
    Beiträge
    304
    • 9. Januar 2009 um 14:19
    • #2

    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.)

  • a9bejo
    21
    a9bejo
    Mitglied
    Reaktionen
    42
    Punkte
    4.697
    Beiträge
    913
    • 10. Januar 2009 um 15:51
    • #3
    Zitat von beefy
    PHP
    $SQL = "INSERT INTO categories (time, category) VALUES (NOW(), '" . $_REQUEST['category'] . "')";


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

    lg, Benjamin Ferrari, bookworm.at

  • beefy
    13
    beefy
    Mitglied
    Reaktionen
    18
    Punkte
    1.683
    Beiträge
    304
    • 10. Januar 2009 um 16:20
    • #4
    Zitat von a9bejo

    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);
  • clark_039
    5
    clark_039
    Mitglied
    Punkte
    205
    Beiträge
    30
    • 12. Januar 2009 um 10:09
    • #5

    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

  • beefy
    13
    beefy
    Mitglied
    Reaktionen
    18
    Punkte
    1.683
    Beiträge
    304
    • 12. Januar 2009 um 10:29
    • #6
    Zitat von clark_039

    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";
    }
    Zitat von clark_039

    P.S: Danke beefy, hast mir echt geholfen

    Bitte gern :)

  • clark_039
    5
    clark_039
    Mitglied
    Punkte
    205
    Beiträge
    30
    • 12. Januar 2009 um 11:22
    • #7

    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

  • clark_039
    5
    clark_039
    Mitglied
    Punkte
    205
    Beiträge
    30
    • 12. Januar 2009 um 13:24
    • #8

    Danke beefy, läuft alles perfekt, Merci

    MFG clark_039

  • Maximilian Rupp 27. Dezember 2024 um 00:26

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

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

Benutzerkonto erstellen Anmelden

Benutzer online in diesem Thema

  • 1 Besucher

Rechtliches

Impressum

Datenschutzerklärung