Kurioses Problem, immer noch ^^

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

  • Kurioses Problem, immer noch ^^

    Hi,

    hatte vor kurzem mal ein Problem, das besteht leider immer noch, und es wird immer kurioser

    also

    ich habe $query = "UPDATE table SET var = '$var'";
    und dann mysql_query($query, $db_handle);

    echo $query liefert den korrekten string, der auch im PMA funktioniert.

    mysql_query liefert true, mysql_affected_rows($db_handle) aber 0

    Rufe ich das selbe Skript nochmal auf, funktioniert der query (ist ein skript zum bearbeiten des profils

    Dabei gibs aber ein paar Probleme :

    1. Obwohl der Query stimmt ($var gefüllt) sind die geupdateten spalten leer
    2. mache ich $query = "UPDATE table SET var = 'fest$var'"; hat die spalte den Wert fest obwohl in der echo ausgabe fest und der inhalt der $var auftauchen
    3. jetzt habe ich folgendes gemacht :
    telefon=if('$telefon' != '', '$telefon', 'k.A.')
    Ergebnis: jetzt kommt immerhin manchaml beim ersten mal der wert von $telefon und manchmal halt k.A.
    Obowhl die variable gefüllt ist, und ich damit testoperationen und testausgaben mache und der query damit gefüllt ist, wird die spalte damit nicht gefüllt.
    ich mache z.B. query = "UPDATE tabelle $telefon SET var = '$telefon' ..." so kommt syntax error, weil ja $telefon völlig deplaziert ist, mache ich es weg, wird die Spalte mit '' geupdated.
    Ich bin echt am verzweifeln...

    Der relevante Codeschnipsel (wurde so auch alleine getestet, halt mit db verbindung auf und abbauen):

    PHP-Code:
    $telefon mysql_real_escape_string($_POST['telefon'], $db_handle);
      
    $mobiltelefon mysql_real_escape_string($_POST['mobiltelefon'], $db_handle);
      
    $fax mysql_real_escape_string($_POST['fax'], $db_handle);
      
          
        
    $query "UPDATE userdaten 
                            SET  telefon=if('
    $telefon' != '', '$telefon', 'k.A.'),
                            mobiltelefon=if('
    $mobiltelefon' != '', '$mobiltelefon', 'k.A.'),
                            fax=if('
    $fax' != '', '$fax', 'k.A.')
                            
                            WHERE id='
    $benutzerid'";
                            
        echo(
    "<p>$query</p>");
        
                            
        
    $ergebnis mysql_query($query$db_handle) or die(mysql_error());
        
      
      
      
    //echo("<p>$ergebnis, $db_handle<br>Eventueller Fehler: ".mysql_error());
      
    if($ergebnis && mysql_affected_rows($db_handle) == 1) { 

    danke und cya max


    Zuletzt geändert von MaxP0W3R; 23.09.2004, 09:51.


    An mich bitte keine unaufgeforderten E-Mails senden (ausser ihr seid bereit geld zu zahlen, dann gerne )

  • #2
    Re: Kurioses Problem, immer noch ^^

    Original geschrieben von MaxP0W3R
    mysql_query liefert true, mysql_affected_rows($db_handle) aber 0
    weil kein DS geupdatet wurde .... (es stand schon so drin)
    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
      Aber warum sind dann die Spalten alle leer ?

      Die Spalten sind nach dem ersten versuch immer leer, egal ob mysql_affected_rows 0 oder > 0 liefert, beim 2. mal sind sie dann immer mit dem korrekten wert gefüllt.

      Also ich fülle mein Formular aus, drücke senden, skript macht ausgaben, daten sind da, query korrekt, dann kommt meist mysql_affected_rows = false aber die spalten sind leer, sehe ich , wenn ich das edit formular wieder aufrufe, und auch in der DB direkt nach selber nachschaue, dann fülle ich wieder aus (auch mit selben Daten) und es funktioniert reibungslos.

      Es ist definitiv kein Syntaxfehler, ich habe leute nachschauen lasse, die schon jahrelang mit PHP programmieren und mehr erfahrung haben als ich, aber diese haben auch keine lösung gefunden.

      Ich behaupte, da ist irgendwo ein Bug.

      Lies dir genau mal durch, wie ich versucht habe zu debuggen, also irgendwas stimmt da nicht


      An mich bitte keine unaufgeforderten E-Mails senden (ausser ihr seid bereit geld zu zahlen, dann gerne )

      Kommentar


      • #4
        Gibs eine Möglichkeit, den letzten ausgeführetn query abzurufen oder diesen zu loggen ?

        ich behaupte, dass der von php gesendete query nicht so ausgeführt wird, wie er ankommt


        An mich bitte keine unaufgeforderten E-Mails senden (ausser ihr seid bereit geld zu zahlen, dann gerne )

        Kommentar


        • #5
          Gibs eine Möglichkeit, den letzten ausgeführetn query abzurufen oder diesen zu loggen ?
          http://dev.mysql.com/doc/mysql/de/Log_Files.html
          Die Zeit hat ihre Kinder längst gefressen

          Kommentar


          • #6
            muss ma meinen chef fragen, ob ich da zugriff drauf bekomme

            der query

            UPDATE userdaten SET telefon=if('121212' != '', '121212', 'k.A.'), mobiltelefon=if('2232323' != '', '2232323', 'k.A.'), fax=if('33333' != '', '33333', 'k.A.') WHERE id='1'
            Ihre Änderungen wurden übernommen.

            hat mir jetzt 3 mal k.A. eingetragen, obwohl daten da sind


            An mich bitte keine unaufgeforderten E-Mails senden (ausser ihr seid bereit geld zu zahlen, dann gerne )

            Kommentar


            • #7
              mysql_info bringt:

              Rows matched: 1 Changed: 1 Warnings: 0


              An mich bitte keine unaufgeforderten E-Mails senden (ausser ihr seid bereit geld zu zahlen, dann gerne )

              Kommentar


              • #8
                nur so am Rande,
                WHERE id='$benutzerid'"
                ist id eine Zahl oder String? wie sieht die Tabellenstruktur aus (create table...)?

                Kommentar


                • #9
                  ID ist eine Zahl, für MySQL, aber man kann die zahl auch in '' setzen, und daran liegt es nicht (schon probiert), der Query wird ja beim 2. Mal auch korrekt ausgeführt.

                  Die Tabelle sieht so aus :

                  CREATE TABLE `userdaten` (
                  `id` int(10) unsigned NOT NULL auto_increment,
                  `benutzername` varchar(30) NOT NULL default '',
                  `passwort` varchar(20) NOT NULL default '',
                  `email` varchar(50) NOT NULL default '',
                  `validation_key` varchar(50) NOT NULL default '',
                  `status` tinyint(3) unsigned NOT NULL default '0',
                  `anmeldedatum` varchar(10) NOT NULL default '',
                  `anmeldeuhrzeit` varchar(8) NOT NULL default '',
                  `telefon` varchar(20) default NULL,
                  `mobiltelefon` varchar(20) default NULL,
                  `fax` varchar(20) default NULL,
                  `homepage` varchar(250) default NULL,
                  UNIQUE KEY `validation_key` (`validation_key`),
                  UNIQUE KEY `benutzername` (`benutzername`),
                  UNIQUE KEY `id` (`id`),
                  UNIQUE KEY `email` (`email`),
                  FULLTEXT KEY `benutzername_2` (`benutzername`),
                  FULLTEXT KEY `passwort` (`passwort`),
                  FULLTEXT KEY `email_2` (`email`),
                  FULLTEXT KEY `anmeldedatum` (`anmeldedatum`),
                  FULLTEXT KEY `anmeldeuhrzeit` (`anmeldeuhrzeit`)
                  ) TYPE=MyISAM AUTO_INCREMENT=191 ;


                  Wie gesagt, 1. Mal nach dem einloggen funktioniert das Speichern nicht, beim 2. Mal tadellos.

                  Hab jetzt nen Würgaround geschrieben, wo der User nochmal klicken muss "um den Speichervorgang abzuschliessen" und die Daten nochmal übertragen werdem, das query wird nochmal ausgeführt und dann ist alles gespeichert...
                  Zuletzt geändert von MaxP0W3R; 22.09.2004, 10:23.


                  An mich bitte keine unaufgeforderten E-Mails senden (ausser ihr seid bereit geld zu zahlen, dann gerne )

                  Kommentar


                  • #10
                    Re: Kurioses Problem, immer noch ^^

                    Original geschrieben von MaxP0W3R
                    Code:
                    SET telefon=if('$telefon' != '', '$telefon', 'k.A.'),
                        mobiltelefon=if('$mobiltelefon' != '', '$mobiltelefon', 'k.A.'),
                        fax=if('$fax' != '', '$fax', 'k.A.')
                    sorry, aber irgendwie halte ich das für'n riesen käse ...

                    warum prüfst du das nicht vorher ab, und setzt $telefon & co. schon PHP-seitig auf 'k.A.', wenn sie leer sein sollten?

                    (bzw., warum verschmutzt du dir die DB überhaupt mit diesem 'k.A.' - warum lässt du die felder nicht einfach leer, und ersetzt leere werte bei der ausgabe mit 'k.A.' ...?)
                    I don't believe in rebirth. Actually, I never did in my whole lives.

                    Kommentar


                    • #11
                      Original geschrieben von MaxP0W3R
                      ID ist eine Zahl, für MySQL, aber man kann die zahl auch in '' setzen,
                      Das ist kein Argument. Wenn du in Richtung Profis dich weiterentwickeln möchtest, musst du sauber(er) programmieren; ich kenne dafür kein Pardon

                      Ausserdem:
                      - du hast nirgends PRIMARY KEY definiert
                      - id ist vom Typ AUTO_INCREMENT daher ist UNIQUE überflüssig
                      hat vielleicht nichts mit dem Phänomen zu tun, daher nur so am Rande

                      Kommentar


                      • #12
                        @wahsaga:

                        WEil die variablen PHP seitig gefüllt sind !
                        das ist von mir eine art test um zu sehen ob in der DB die Vars gefüllt sind.
                        ich mach echo $query, var sind gefüllt, aber der query wird ausgeführt, als ob sie leer sind...

                        - du hast nirgends PRIMARY KEY definiert
                        - id ist vom Typ AUTO_INCREMENT daher ist UNIQUE
                        Wenn ich das richtig verstanden habe, so ist unique = Primary key, oder nicht ?


                        @asp2php

                        ich mache bewusst '' weil benutzerid per GET kommt und daher manipulierbar ist, was ist, wenn jmd. nen string dafür einsetzt ?
                        Ich mache zwar mysql_real-escape_string, aber darauf alleine vertraue ich nicht...


                        An mich bitte keine unaufgeforderten E-Mails senden (ausser ihr seid bereit geld zu zahlen, dann gerne )

                        Kommentar


                        • #13
                          ich denke, dass hier die Lösung deines Problems ist :
                          ... php manual
                          Normally you will get an error when you try to INSERT or UPDATE a row that causes a primary key, unique key, or foreign key violation. If you are using a transactional storage engine such as InnoDB, MySQL will automatically roll back the transaction. If you are using a non-transactional storage engine, MySQL will stop at the incorrect row and leave any remaining rows unprocessed.

                          To make life easier, MySQL supports an IGNORE keyword for most commands that can cause a key violation (such as INSERT IGNORE and UPDATE IGNORE). In this case, MySQL will ignore any key violation and continue with processing the next row.

                          Kommentar


                          • #14
                            Original geschrieben von MaxP0W3R
                            Wenn ich das richtig verstanden habe, so ist unique = Primary key, oder nicht ?
                            Falsch, setzen. Andersherum
                            ich mache bewusst '' weil benutzerid per GET kommt und daher manipulierbar ist, was ist, wenn jmd. nen string dafür einsetzt ?
                            Das überprüft man natürlich vorher ...
                            h.a.n.d.
                            Schmalle

                            http://impressed.by
                            http://blog.schmalenberger.it



                            Wichtige Anmerkung: Ich habe keine Probleme mit Alkohol ...
                            ... nur ohne :-)

                            Kommentar


                            • #15
                              UPDATE IGNORE funktioniert, d.h. die Daten werden beim ersten mal schon geupdated.

                              Es war also ein Key Fehler, nur Frage ich mich, wie 2 mal die selben Daten einmal den Fehler verursachen, und einmal nicht...


                              Danke asp für den Tipp

                              Wäre von alleine nicht draufgekommen...


                              An mich bitte keine unaufgeforderten E-Mails senden (ausser ihr seid bereit geld zu zahlen, dann gerne )

                              Kommentar

                              Lädt...
                              X