Ankündigung

Einklappen
Keine Ankündigung bisher.

MySql - Daten übers Formular einfügen?

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • MySql - Daten übers Formular einfügen?

    Hallo Profis, ich bins wieder mal.

    Also: Ich bin dran ein kleines Newsscript zu programmieren, welches über ein Formular Einträge speichern soll...

    Nun geht das aber nich so ganz:
    Hier ma der wichtigste Codeschnipsel:

    PHP-Code:
    <?php
    if(isset($_POST['submit'])) {    // Wenn das Formular abgeschickt wurde mache folgendes:
            
    $title    $_POST['title'];    // Post Variabeln umschreiben
            
    $msg    $_POST['msg'];
            
            
    /*unset($_POST['submit']);
            $array = implode(", ",$_POST);
            print_r($array);*/
            
            
    if($title "" ||  $msg "") {            // Wenn ein Feld im Formular nicht ausgefühlt wurde (also title oder msg is leer)
                
    echo "Sie müssen einen Titel und eine Nachricht eingeben...";
            }
            else {
                
    $sql "
                    INSERT INTO 
    $table
                        (title, date, msg)
                    VALUES
                        ('
    $title', now(), '$msg')
                "
    ;
            
                
    mysql_query($sql) or die("Folgender Fehler ist beim einfügen der Daten aufgetreten:<br />".mysql_error());    // Mach oder gib Fehler
                
    echo "Folgender Newseintrag eingefügt: <pre>"$sql ."</pre>";
            }
        
        }
    ?>
    Nun gibt er mir eine Fehlermeldung, was logisch ist, da ich keine Arrays in die DB schreiben kann.. Glaub ich jedenfalls....

    Blöderweise ist mir entfallen, wie ich das lösen kann..
    Hab irgendwas über Implode und Serialize gelesen doch, dass hat nicht so ganz funktioniert und versteh ich auch nich ganz...

    Kann mir das jemand erklährn?

    Dankeschön Gruss
    Toby
    codestyle.ch
    ----------------------------


  • #2
    1. Diese Frage gehört ins Board MySQL!
    2. Welche Fehlermeldung kriegst du? SQL-Fehlermeldungen haben es an sich, dass der Fehler genau vor der Stelle liegt, wo der Teil des Queries in der Fehlermeldung angegeben wird.
    3. Schreibe nie irgendwelche Daten, die du von einem Formular gekriegt hast, direkt in eine Datenbank (SQL-Injections).
    4. Ich vermute schwer, dass der Fehler bei dem $table und dem "now()" liegt. MySQL versucht, den Wert now() direkt in die Datenbank zu speichern, was aber so nur bei Zahlen funktioniert. Funktionen werden dabei nicht ausgewertet. Dafür musst du folgendes schreiben:
    PHP-Code:
    INSERT INTO ".$table." (titledatemsgVALUES ('$title'".now()."'$msg'
    Durch das "escapen" (so wird die Aktion mit dem ". ." genannt), wird der Wert der Variable oder der Rückgabewert einer Funktion direkt in den String geschrieben. Und die Ausgabe des Queries ($sql) nach dem Einfügen ist auch ziemlich gefährlich. Aber ich gehe mal davon aus, dass du das nur zu Testzwecken so hattest.

    Kommentar


    • #3
      Tag auch,

      1. Oh, entschuldige, werds mir merken!

      2. Ich habe gemerkt, dass ich die Fehlermeldung nur krieg, wenn ich VALUES ($title, now(), $msg) anstatt VALUES ('$title', now(), '$msg') schreibe.
      Diese sieht dann so aus:
      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 ' now(), )' at line 4

      3. Joa, werds mir merken, ich machs aber sowieso nur für Testzwecke..
      Was meinst du denn mit nicht direkt in die DB schreiben? Was soll ich den sonst mit ihnen machen... Ich muss sie ja dort reinschreiben, um sie später (also in den News) wieder ausgeben zu können!? Oder wie meinst du das?

      4. Wie du bei 2. schon gesehen hast, hattest du recht ^^
      Jedoch, wenn ich das now() escape, dann sagt er mir, es sei ne undefienierte Funktion und bricht ab...

      So, herzlichen Dank für deine Hilfe...
      MFG Toby
      codestyle.ch
      ----------------------------

      Kommentar


      • #4
        @3.: Man sollte jede Eingabe zuerst überprüfen und dann z.B. mit mysql_real_escape_string() in die Datenbank schreiben. Das gewährt dir, dass niemand so einfach Unsinn mit deiner Datenbank treiben kann.

        @4.: Oh sorry das mit dem now() ist natürlich korrekt. Ist ja eine SQL-Funktion. Habs mit der PHP-Funktion time() verwechselt! Das wäre dann so doch ok

        Kommentar


        • #5
          Joa stimmt auch wieder... Danke ^^

          Hmm.. Aber wenn die Funktion stimmt, warum funktionierts dann nich??...
          Dann muss der Fehler ja irgendwo anders sein?

          Danke für die Hilfe
          MFG Toby
          codestyle.ch
          ----------------------------

          Kommentar


          • #6
            Kriegst du überhaupt keine Fehlermeldung? Weder von PHP noch über mysql_error() ??? Wenn nicht, schreib mal ganz oben in die Datei folgendes:
            PHP-Code:
            error_reporting(E_ALL); 
            Dann sollten dir jegliche Notices, Warnings und Errors angezeigt werden.

            Kommentar


            • #7
              Doch ich krieg ja ne Fehlermeldung.. Siehe hier:

              Zitat von Toby Beitrag anzeigen
              2. Ich habe gemerkt, dass ich die Fehlermeldung nur krieg, wenn ich VALUES ($title, now(), $msg) anstatt VALUES ('$title', now(), '$msg') schreibe.
              Diese sieht dann so aus:
              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 ' now(), )' at line 4
              EDIT:
              Achja und wenn ichs so mach, dass ich sie nich krieg, denn wird einfach nleerer String übergeben (also bei $title und $msg)...
              codestyle.ch
              ----------------------------

              Kommentar


              • #8
                PHP-Code:
                <?php
                if($title "" ||  $msg "")
                ?>

                du ersetzt mit der "abfrage" den inhalt von $title und $msg

                Kommentar


                • #9
                  Oha... Danke... ich dachte mir schon, dass es irgendwie daran liegen könnte...
                  Ich werd das ma noch ändern..

                  Dankeschön

                  Gruss Toby
                  codestyle.ch
                  ----------------------------

                  Kommentar


                  • #10
                    passt ja zu meinem neuen beitrag, die POST daten ungefiltert in den SQL Befehl zu schreiben ist nicht die beste idee oder?
                    MFG
                    DJ Nuno

                    Kommentar

                    Lädt...
                    X