Miriam.Nord: PHP-Script mit Update funkt local, nicht auf Server

Hallo,

ich habe ein Problem mit meinem eigenen Skript ;-):

Ich will den User über ein kleines Formular einen Text in eine Datenbank schreiben lassen. Lokal habe ich hier die MySQL-Version 4.1.11, auf dem Server läuft 4.0.12.

Mein Update-Befehl funktioniert lokal so wie er soll, aber auf dem Server wird nichts ausgeführt. Die Tabellen sind per phpMyAdmin auf dem Server angekommen, als Export-Version habe ich auch 4.0 ausgewählt.Und sie sehen für mich gleich aus...

Die Funktion des Skriptes wird an anderen Stellen für andere Tabellen ebenfalls ausgeführt und tut da auch, aber ausgerechnet in einer Tabelle geht's nicht.

Ich weiss im Augenblick nicht, wo ich noch suchen soll und weiss auch noch nicht mal, wie man sowas nennen soll...

Wäre sehr nett, wenn mich jemand mal schubsen könnte..

Danke schon mal, Miriam

  1. Hallo Miriam,

    Ich will den User über ein kleines Formular einen Text in eine Datenbank schreiben lassen. Lokal habe ich hier die MySQL-Version 4.1.11, auf dem Server läuft 4.0.12.

    das sind schon einmal wichtige Informationen.

    Mein Update-Befehl funktioniert lokal so wie er soll, aber auf dem Server wird nichts ausgeführt.

    Wie sieht denn Dein Update-Statement aus? Ohne dieses kann man Dir keine Hilfe geben? Gibt es Fehlermeldungen? Wenn ja, welche?

    Freundliche Grüße

    Vinzenz

    1. Hallo Vinzenz!

      Du bist ja schnell!

      Ich will den User über ein kleines Formular einen Text in eine Datenbank schreiben lassen. Lokal habe ich hier die MySQL-Version 4.1.11, auf dem Server läuft 4.0.12.

      das sind schon einmal wichtige Informationen.

      Mein Update-Befehl funktioniert lokal so wie er soll, aber auf dem Server wird nichts ausgeführt.

      Wie sieht denn Dein Update-Statement aus? Ohne dieses kann man Dir keine Hilfe geben? Gibt es Fehlermeldungen? Wenn ja, welche?

      Das reine Update-Statement sieht so aus:
        if (!empty($id)) $query = "UPDATE Weinevents SET weinevent = '$weinevent' WHERE id = $id";

      Es liegt jedoch in einer Schleife. Das Problem ist eigentlich, das das gleiche Statement nur in einer Tabelle nicht bearbeitet wird. MySQL-Fehler sind nicht unterdrückt, kommen aber nicht. Das UPDATE wird nur nicht ausgeführt... Wie gesagt, ich gucke mir nun schon die Augen aus nach irgendwelchen Unterschieden, aber das ist doch ganz einfach... dachte ich...

      Ich lasse dieses Skript ingesamt 10 Tabellen bearbeiten und nur bei einer geht es nicht. Die Schleife checkt nach Bearbeitungsstatus und  gibt den Inhalt der Tabelle aus. Die Benamsumgen und Feldtypen habe ich jetzt zum soundsovielten Mal schon gecheckt... Das scheint alles übereinzustimmen, darüberhinaus ist es auch ganz einfach: ein ID-Feld als INT(4), ein Inhaltsfeld vom Typ TEXT. Es muss etwas mit der DB-Version zu tun haben, aber ich weiss einfach nicht, was das sein könnte...

      Danke schon mal, Miriam

      1. Hallo Miriam,

        Du bist ja schnell!

        daran solltest Du Dich hier gewöhnen können :-)

        Das reine Update-Statement sieht so aus:
          if (!empty($id)) $query = "UPDATE Weinevents SET weinevent = '$weinevent' WHERE id = $id";

        Du solltest sicherheitshalber mysql_real_escape_string() auf $weinevent anwenden (das nur nebenbei).

        Bitte lasse Dir die SQL-Statements anzeigen, die an MySQL weitergereicht werden, z.B. über

        echo $query;

        alternativ könntest Du die SQL-Statements in eine Log-Datei schreiben.

        Es liegt jedoch in einer Schleife. Das Problem ist eigentlich, das das gleiche Statement nur in einer Tabelle nicht bearbeitet wird. MySQL-Fehler sind nicht unterdrückt, kommen aber nicht. Das UPDATE wird nur nicht ausgeführt...

        Was sagt mysql_affected_rows() nach Ausführen des Statements? Gegebenenfalls könntest Du dies auch mitloggen.

        Freundliche Grüße

        Vinzenz

        1. Hallo Miriam,

          Du bist ja schnell!

          daran solltest Du Dich hier gewöhnen können :-)

          Das ist super!

          Das reine Update-Statement sieht so aus:
            if (!empty($id)) $query = "UPDATE Weinevents SET weinevent = '$weinevent' WHERE id = $id";

          Also: was soll ich sagen. Ich habe den einen Eintrag, der angezeigt wurde, sich aber nicht updaten liess, gelöscht und mit einfachen Test-Eingaben begonnen. Nun geht es. Weiß aber nicht warum...

          Bitte lasse Dir die SQL-Statements anzeigen, die an MySQL weitergereicht werden, z.B. über

          echo $query;

          Das habe ich gemacht, wird auch korrekt angezeigt (jetzt...) Vorher hatte ich immer ein var_dump mitlaufen lassen, das eigentlich auch immer korrekt die jeweils bearbeitete id anzeigte... Nun ja, jetzt geht es.

          Du solltest sicherheitshalber mysql_real_escape_string() auf $weinevent anwenden (das nur nebenbei).

          Das ist sicherlich das weiterführende... Ich nutze in dem Formular-Eingabefeld den FCKeditor, damits der User einfach hat. Aber der hat seine Weitergabe der Inhalte natürlich anders gelöst, bzw. habe ich das einfach aus dem Manual abgeschrieben. Von der Bearbeitung des Strings steht da leider nichts, was natürlich nicht heisst, das es nicht doch sinnvoll wäre. Anscheinend bin ich genau darüber gestolpert.

          In der Word-Datei, die immer der Ursprung von Daten für dieses Editor-Feld sein wird, war wohl etwas enthalten, was mein Eingabefeld ausgehebelt gebracht hat.

          Kennst Du noch eine bessere Lösung für einen Eingabe-Editor?

          Vielen Dank schonmal, Du hast mir jetzt schon sehr weitergeholfen...

          Gruß, Miriam

        2. Moin!

          Das reine Update-Statement sieht so aus:
            if (!empty($id)) $query = "UPDATE Weinevents SET weinevent = '$weinevent' WHERE id = $id";

          Du solltest sicherheitshalber mysql_real_escape_string() auf $weinevent anwenden (das nur nebenbei).

          Nicht nur auf $weinevent, sondern grundsätzlich auf alles, was man von außen in ein SQL-Statement tut - auch $id.

          MySQL stört sich auch nicht dran, wenn Feldwerte, die Zahlen darstellen sollen, in Anführungszeichen stehen - und mysql_real_escape_string() funktioniert nur, wenn der escapete String in Anführungszeichen steht.

          Also Faustregel:
          Alle Variablen, die man in ein SQL-Statement tut, und die möglicherweise von außen manipuliert sind, müssen immer
          a) in Anführungszeichen stehen
          b) durch mysql_escape_string() oder mysql_real_escape_string() behandelt werden.

          Was zur Folge hat, dass man derartige Variablen nicht benutzen kann, um Dinge im SQL dynamisch einzufügen, die nicht in Anführungszeichen stehen dürfen, beispielsweise Feld- oder Tabellennamen. Hierfür muß man sich dann andere Sicherungsmaßnahmen überlegen.

          - Sven Rautenberg

          --
          My sssignature, my preciousssss!
      2. echo $begrüßung;

        MySQL-Fehler sind nicht unterdrückt, kommen aber nicht. Das UPDATE wird nur nicht ausgeführt...

        MySQL-Fehlermeldungen werden nicht einfach so wie PHP-Fehler ausgegeben. Sie müssen explizit abgefragt werden. Die aufgerufene Funktion gibt Fehler bei der Ausführung durch einen speziellen Rückgabewert (false) bekannt. Darauf kann/muss man reagieren und sich z.B. den Meldungstext mittels mysql_error() abfragen.

        echo "$verabschiedung $name";