daniel: DB update klappt bei manchen(???) Datensätzen nicht...

Hallo Formler,

ich habe ein kleines Problem, auf das ich mir irgendwie keinen reim machen kann...

also: ich habe ein formular, mit dem ich eingaben in eine DB schreiben kann.  das klappt völlig ohne Probleme.
Ein 2tes Formular dient dazu ebendiese diesen Datensatz bei Bedarf zu ändern, mit einem UPDATE-Statement.

Das komische ist nun,das dieses Datenbank Update bei manchen Datensätzen völlig problemlos klappt, bei anderen nicht ???
Dieses Fomular hat 1 Listenfeld, 2 Textfelder und eine Textarea.
Der DB-Inhalt , der zum ändern ja auch in das Formular zum Anzeigen geladen wird, wird auch völlig korrekt ausgegeben.
Nur eben das Updaten will bei MANCHEN Datensätzen einfach nicht ??
Die einzige Idee , die ich hätte: kann es sein, das ich textstrings vielleicht irgendwie von Sonderzeichen ('"...) befreien muß ????

ich hoffe, ihr habt eine idee oder einen tipp für mich?

viele grüße
daniel

  1. Moin!

    ich hoffe, ihr habt eine idee oder einen tipp für mich?

    Was sagt die Datenbank? Welche Fehlermeldung gibt sie aus?

    - Sven Rautenberg

    1. Was sagt die Datenbank? Welche Fehlermeldung gibt sie aus?

      hi sven,

      entweder bin ich zu blöd oder es ist doch schon später als ich dachte...!!
      mysql_error gibt doch die fehlermeldung der DB aus, oder?

      wiso geht denn das dann nicht ??

      $success=mysql_query($query_update);  //Ausführen des Query
      if($success) //Schön wärs... ;-)
      { echo "<br><span class='kapital'>                        Datensatz geändert</span>"; }
      else //mysql_query ist in die hose gegangen
      { echo "<br><br>DATENSATZ NICHT GEAENDERT !!!!";
        $fehler=mysql_errno($success);
        echo "<br> $fehler"; }

      da bekomme ich jetzt nur "Warning: Supplied argument is not a valid MySQL-Link resource in .." aber nichts von einer DB-Fehlermeldung...???

      Sorry...

      1. Moin!

        wiso geht denn das dann nicht ??

        $success=mysql_query($query_update);  //Ausführen des Query
        if($success) //Schön wärs... ;-)
        { echo "<br><span class='kapital'>                        Datensatz geändert</span>"; }
        else //mysql_query ist in die hose gegangen
        { echo "<br><br>DATENSATZ NICHT GEAENDERT !!!!";
          $fehler=mysql_errno($success);
          echo "<br> $fehler"; }

        da bekomme ich jetzt nur "Warning: Supplied argument is not a valid MySQL-Link resource in .." aber nichts von einer DB-Fehlermeldung...???

        Nimm einfach das funktionierende Beispiel von php.net (http://www.php.net/manual/de/function.mysql-error.php) und baue es ein. Mit anderen Worten:
        mysql_error() und mysql_errno() erwarten keine Parameter - was hat $success da zu suchen? Und weiterhin hast du sehr wahrscheinlich irgendeinen Knoten in den IFs. Einfach ohne Prüfung und IF die Fehlermeldung rausknallen hilft fürs erste.

        - Sven Rautenberg

        1. hi sven,

          danke für den tipp, ich dachte man müsse da noch was übergeben ;-)

          aber jetzt habe ich zumindest eine fehlermeldung:

          Nr. 1064:  You have an error in your SQL syntax ...

          ich meine, jetzt sollte es eigentlich passen...
          ABER: was ich nicht verstehe, wiso klappt GENAU DIESE abfrage bei dem einen Datensatz,bei dem anderen nicht ????

          UPDATE taenze SET
          choreograph1=$choreograph1,
          choreograph2=$choreograph2,
          titel='$titel',
          kommentar='$kommentar',
          datum='$datum',
          musik='$musik'
          WHERE tanzID=$ID

          choreograph ist ein INT-Feld, titel ein VARCHAR, kommentar ein TEXT,
          datum ein DATE, musik ein VARCHAR und tanzID ein INT - Feld.
          Könnte es doch daran liegen, daß ich bestimmte Zeichen vor dem Schreiben in die DB löschen muß ???
          aber ich habe eigentlich schon öfter eingaben ohne solche vorkehrungen gemacht, und noch nie probleme gehabt ?

          hast du eine idee, was das sein könnte ??
          einen NEUEN datensatz zu schreiben , klappt immer nur mit dem UPDATE hämgts irgendwie...???

          grüße daniel

          1. Moin!

            aber jetzt habe ich zumindest eine fehlermeldung:

            Nr. 1064:  You have an error in your SQL syntax ...

            echo $query_update; folgen lassen. Dann weißt du _genau_, welches SQL-Statement dein PHP zusammengesetzt hat. Entweder siehst du den Fehler selbst sofort, oder du postest den entstandenen String hier.

            Das:

            UPDATE taenze SET
            choreograph1=$choreograph1,
            choreograph2=$choreograph2,
            titel='$titel',
            kommentar='$kommentar',
            datum='$datum',
            musik='$musik'
            WHERE tanzID=$ID

            ist leider unbrauchbar, weil es nicht den wirklichen SQL-Querystring darstellt.

            - Sven Rautenberg

            1. hi sven,

              erstmal echt danke für die geduldige hilfe ;-)

              also, das hier ist mal ein query von einem update das NICHT klappt:

              UPDATE taenze SET choreograph1=48, choreograph2=, titel='Push it', kommentar='kommentar_blindtext kommentar_blindtext kommentar_blindtext kommentar_blindtext kommentar_blindtext kommentar_blindtext ', datum='2000-07-01', musik='Push it - Salt´n Pepper' WHERE tanzID=20

              so wie ich das sehe, paßt das eigentlich alles ganz gut soweit,
              allerdings bin ich über die spalte musik gestolpert...

              das ' hinter dem Salt, könnte das der grund sein, weswegen das query nicht funktioniert?
              und wenn ja, wie kann ich die eingaben auf solche zeichen überprüfen?
              eine der anscheinend undendlich vielen php-funktionen kann das doch sicher, oder ? ;-)

              vielen dank im voraus !!!

              grüße daniel

              1. Yo!

                also, das hier ist mal ein query von einem update das NICHT klappt:

                Ich hoffe, daß ist die exakte 1:1-Kopie. :)

                UPDATE taenze SET choreograph1=48, choreograph2=, titel='Push it', kommentar='kommentar_blindtext kommentar_blindtext kommentar_blindtext kommentar_blindtext kommentar_blindtext kommentar_blindtext ', datum='2000-07-01', musik='Push it - Salt´n Pepper' WHERE tanzID=20

                so wie ich das sehe, paßt das eigentlich alles ganz gut soweit,
                allerdings bin ich über die spalte musik gestolpert...

                Wenn du diese Spalte für bedenklich hälst, dann nimm diesen Teil vorübergehend raus und schau, ob es dann geht.

                das ' hinter dem Salt, könnte das der grund sein, weswegen das query nicht funktioniert?

                Das fragliche Zeichen ist ein ´, kein '. Das ist ein Unterschied. Wenn du PHP benutzt, dann sollten (was Default ist) magic-quotes eingeschaltet sein, d.h. alle " und ' werden mit vorangestelltem Backslash vom Formular entgegengenommen. Um die wegzubekommen (z.B. um das Formular direkt auszugeben), gibts die Funktion stripslashes(), um sie hinzuzufügen die Funktion addslashes(). Siehe php.net für nähere Info.

                Aber ich stolpere über das hier:
                choreograph2=,

                Wenn die Spalte choreograph2 ein Zahltyp ist und NOT NULL, dann muß da eine Null (0) stehen, sonst wird das nichts mit dem Update. Und wenn die Spalte auch NULL sein kann, muß da IMHO die Angabe NULL stehen. Einfach "nichts" funktioniert AFAIK nicht.

                - Sven Rauteberg

                1. hi sven,

                  Aber ich stolpere über das hier:
                  choreograph2=,

                  ^^^^^^^^^^^^^^^^^^^
                  BINGO !!!!
                  das wars !!
                  als ich choreograh2 mal rausgenommen ,hab gings auf anhieb !

                  ich bin dann mal alles stück für stück durchgegangen,
                  und hab den fehler auch gefunden.

                  ich frage bei diesem update-ding noch eine 2te tabelle ab,
                  und bin dabei mit den tabllen durcheinander gekommen...
                  jetzt wird bei KEINEM 2ten Choreographen eine '0' übergeben,
                  und es klappt prima !!

                  wie gesagt, danke für deine geduld, schätze mal ich wäre da nie drauf gekommen allein.

                  ohmann, wieder die halbe nacht wegen so nem sch... ;-)))))

                  vielen dank nochmal,
                  grüße daniel

      2. Hallo Daniel,

        die Methode von Sven ist sicher die übliche :-)) einfach Medizin drauf schütten.

        Es wäre manchmal aber auch ganz sinnvoll zu verstehen, was man so macht oder warum etwas nicht klappt...

        entweder bin ich zu blöd oder es ist doch schon später als ich dachte...!!
        mysql_error gibt doch die fehlermeldung der DB aus, oder?

        wiso geht denn das dann nicht ??

        $success=mysql_query($query_update);  //Ausführen des Query
        if($success) //Schön wärs... ;-)
        { echo "<br><span class='kapital'>                        Datensatz geändert</span>"; }
        else //mysql_query ist in die hose gegangen
        { echo "<br><br>DATENSATZ NICHT GEAENDERT !!!!";

        hier gehts nur hin, wenn $success = NULL ist.

        $fehler=mysql_errno($success);
          echo "<br> $fehler"; }

        Du versuchst also, eine Statusmeldung (Fehlermeldung) zu einem ungültigen Handle zu besorgen. Wie soll das gehen? Du darfst nur auf das Handle zurückgreifen, wenn es noch gültig ist.

        Die Fehlermeldung "Warning: Supplied argument is not a valid MySQL-Link resource in .." bekommt ma übrigens immer, wenn man versucht, mit einem ungültigen Handle zuzugreifen. Das Suchen nach der Stelle, an dr es seinen Wert verloren hat, ist dann leider oft mühselig: mangelde Zugriffsrechte, Unterschiede zwischen den PHP-Versionen, Gross-Kleinschreibung bei einer Übergabe missachtet (das mache ich immer gerne), Datenbankserver ist zwischenzeitlich down gegangen, usw.

        Viel Spaß noch

        Tom