SQL statement funktioniert in PHP nicht

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

  • SQL statement funktioniert in PHP nicht

    hi leute!

    ich habe folgendes problem:
    ich habe einen eigenen newsletter programmiert -> das auslesen und versenden funktioniert ja einwandfrei, aber mit dem eintrage habe ich so meine probleme. es soll von zwei getrennten seiten in diese datenbank geschrieben werden, mit dem unterschied, dass in das feld "site" zwei verschiedene werte eingefügt werden.
    leider funktioniert das ganze aber nur, wenn ich die daten direkt in den phpmyadmin eingebe, weil wenn ichs über das formular mittels PHP mache, bekomm ich die untenstehende fehlermeldung...

    bin leider mit meinem latein bzw. sql am ende, weil ich versteht einfach nicht, wieso das nur in PHP nicht funktioniert. ich habe auch keine besonderen namen oder so verwendet - die tabelle schaut mehr oder weniger genauso aus, wie jede andere datenbank von mir und dieses problem tritt zum allerersten mal auf...

    So schaut die Datebank aus:
    PHP-Code:
    DROP TABLE IF EXISTS `newsletter`;
    CREATE TABLE IF NOT EXISTS `newsletter` (
      `
    IDint(14NOT NULL auto_increment,
      `
    vornamevarchar(255NOT NULL default '',
      `
    nachnamevarchar(255NOT NULL default '',
      `
    emailvarchar(255NOT NULL default '',
      `
    datumdate NOT NULL default '0000-00-00',
      `
    zeittime NOT NULL default '00:00:00',
      `
    IPvarchar(20NOT NULL default '',
      `
    infosvarchar(255NOT NULL default '',
      `
    codevarchar(15NOT NULL default '',
      `
    aktivvarchar(20NOT NULL default 'yes',
      
    PRIMARY KEY  (`ID`)
    ENGINE=MyISAM
    Das SQL Statement aus dem Quelltext:
    PHP-Code:
    $sql "INSERT INTO newsletter
    (vorname, nachname, email, datum, zeit, IP, infos, code)
    VALUES
    ('
    $_POST[vorname]', '$_POST[nachname]', '$_POST[email]', 
    ' "
    .date("Y-m-d")." ', ' ".date("H:i:s")." ', 
    '
    $_SERVER[REMOTE_ADDR]', 
    'php-resource', '"
    .code(15)."')"
    Info: code(15) ruft eine Funktion auf, die einen Zufallscode mit 15 Stellen ausgibt (wichitg zum Austragen aus dem Newsletter)

    Hier das generierte Statement und die Fehlermeldung (nur im PHP vorhanden):
    PHP-Code:
    INSERT INTO newsletter (vornamenachnameemaildatumzeitIPinfoscode
    VALUES 
    ('homer''simpson''homer@simpsons.at''2006-02-09''20:51:50'
    '127.0.0.1''php-resource''NmZ3qegH59s12t3')

    Unknown column 'infos' in 'field list' 
    Vielleicht findet einer von euch da einen Fehler, weil ich bin echt schon am verzweifeln ;-)

    danke schon mal und lg
    gmalta
    Zuletzt geändert von gmalta; 09.02.2006, 19:59.

  • #2
    zuerst einmal solltest du deine variablen nicht direkt in den string hauen.

    zum anderen sollte dir die verwendung von mysql_real_escape_string() ans herz gelegt sein!
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


    Kommentar


    • #3
      hi!

      mir gefällts halt besser, wenn ich nicht so viele variablen im text habe und dafür die post_variablen direkt ins statement einbaue...meiner meinung nach reine geschmackssache, der effekt ist derselbe...

      das gilt auch für den befehl, den du mir ans herz gelegt hast - ich kommentiere die variablen selbst aus, weil wenn ich die variablen direkt ins sqlstatement übernehme ist ein zusätzlicher befehler ziemlich irritierend

      habe trotzdem beides ausprobiert, bekomme aber immer noch diesselbe fehelrmeldung, dass das feld nicht existiert....

      lg
      gmalta

      Kommentar


      • #4
        Original geschrieben von gmalta
        mir gefällts halt besser, wenn ich nicht so viele variablen im text habe und dafür die post_variablen direkt ins statement einbaue...
        wenn du meinst .....

        Original geschrieben von gmalta
        meiner meinung nach reine geschmackssache, der effekt ist derselbe...
        du hast es nicht verstanden, wie man einen variable korrekt in einen string einbettet!

        Original geschrieben von gmalta
        das gilt auch für den befehl, den du mir ans herz gelegt hast - ich kommentiere die variablen selbst aus, weil wenn ich die variablen direkt ins sqlstatement übernehme ist ein zusätzlicher befehler ziemlich irritierend
        deine meinung. aber dann komm nicht an, wenn irgendwas nicht klappt.

        Original geschrieben von gmalta
        habe trotzdem beides ausprobiert, bekomme aber immer noch diesselbe fehelrmeldung, dass das feld nicht existiert....
        meine tipps waren eher grundlegend.

        wenn er dir anzeigt, dass die spalte nicht vorhanden ist, liegt es doch nahe mal eben in der datenbank nachzusehen, ob die spalte weg ist. und wenn ja, diese entsprechend neu anzulegen.
        INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


        Kommentar


        • #5
          das hab ich mir schon angesehen....in der datenbank gibt es die spalte ja, das ist das problem
          wenn die spalte nicht da gewesen wäre, hätte ich kein problem gehabt...

          Kommentar


          • #6
            in der tabelle, wohin dein script also das insert machen will, gibt es die spalte? oder gibt es die spalte im online-system und offline zum testen in der db ist die spalte nicht vorhanden. schonmal darüber nachgedacht?

            wenn mysql sagt, dass die spalte nicht vorhanden ist, ist sie auch nicht vorhanden.
            INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


            Kommentar


            • #7
              also das ist mir jetzt echt peinlich.....

              mysql_connect wird mittels require eingefügt und ich hab nur den mysql_connect für die auslesende datei umgeschrieben und nicht die für die schreibende datei...darum hat die in die online datenbank geschrieben und nicht in die localhost...........

              mist, echt peinlich - aber trotzdem danke für die hilfe!!

              lg
              gmalta

              Kommentar


              • #8
                also du solltest generell diese anführungszeichen benutzen: `spalten bzw tabellenname`

                vermutlich macht myphpadmin diese anführungszeichen automatisch hin!

                der fehler sollte damit behoben sein, wenn du dein sqö-statement so umschreibst:

                PHP-Code:
                INSERT INTO `newsletter` (`vorname`, `nachname`, `email`, `datum`, `zeit`, `IP`, `infos`, `code`)
                VALUES   ('homer''simpson''homer@simpsons.at'
                '2006-02-09''20:51:50',   '127.0.0.1''php-resource',
                 
                'NmZ3qegH59s12t3'
                in php würde das dann so aussehen:

                PHP-Code:
                $sql "INSERT INTO `newsletter` (`vorname`, `nachname`,
                 `email`, `datum`, `zeit`, `IP`, `infos`, `code`)  VALUES  
                ('
                $_POST[vorname]', '$_POST[nachname]', '$_POST[email]', 
                ' "
                .date("Y-m-d")." ', ' ".date("H:i:s")." ',  
                 '
                $_SERVER[REMOTE_ADDR]',   'php-resource', '".code(15)."')"
                mfg, ex
                www.myplaner.de

                Kommentar


                • #9
                  @extr3m0
                  auch für dich gilt es mal nachzulesen, wie man variablen sinnvoll in einen string einbindet!

                  und die ` braucht man nur, wenn man seine spaltennamen nicht vernünftigt wählt und es dadurch zu konflikten mit reservierten ausdrücken kommt.
                  INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                  Kommentar

                  Lädt...
                  X