PHP & MYSQL Fehlerwunder!!!!???????

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

  • PHP & MYSQL Fehlerwunder!!!!???????

    Hallo,

    also ich hab hier ein Problem, weiß nicht ob das ein Bug ist, was ich und kein anderer der mir geholfen hat versteht!!!!

    Also, ich habe Einträge in einer Datenbank. Anhand der Spalte Position möchte ich die hoch und runter verschieben!

    Neben dem Eintrag ist ein Pfeil nach oben und wenn man auf den klickt, wird die Url mit der ID des Eintrages aufgerufen. Die ID wird als Variable [COLOR=red]$up[/COLOR] übergeben.

    PHP-Code:
      if (isset($up)):
        
    # Daten des Eintrages holen, der nach oben gesetzt werden soll
        
    $strSQLcmd='SELECT * FROM bilder WHERE id='.$up;
        
    $result=mysql_query($strSQLcmd$db_connect);
        
    $data=mysql_fetch_array($result);
        
    //print_r($data);

        # Ist die Position größer als 1 kann der Eintrag nach oben verschoben werden
        
    if ($data["position"]>1):

          
    # Der alte Positionswert des gewählten Eintrages
          
    $oldvalue=$data["position"];
          echo 
    "Oldvalue: ".$oldvalue."<br>";

          
    # Der neue Positionswert (-1) des gewählten Eintrages
          
    $newvalue=$data["position"]-1;
          echo 
    "Newvalue: ".$newvalue."<br>";

          
    # Hier wird der Eintrag der die neue Position hat, auf die alte Position gesetzt.
          # Also Vorheriger Eintrag wird nach nach unten (+1) verschoben
          
    $strSQLcmd1='UPDATE bilder SET position='.$oldvalue.' WHERE position='.$newvalue;
          echo 
    $strSQLcmd1."<br>";
          if (!
    $result1=mysql_query($strSQLcmd1)) echo mysql_error();

          
    #!!! Bei Ausführung dieser Abfrage scheint der eigentliche Fehler zu enstehen !!!#
          # Hier bekommt der gewählt Eintrag, den neuen Wert (-1) an hand seiner ID zugewiesen
          
    $strSQLcmd2='UPDATE bilder SET position='.$newvalue.' WHERE id='.$up;
          echo 
    $strSQLcmd2."<br>";
          if (!
    $result=mysql_query($strSQLcmd2)) echo mysql_error();

        endif; 

    Das Problem ist jetzt das, das die 2. Update-Anweisung irgendwas kaputt macht. Den irgendwie werden die Variablen $newvalue & $oldvalue um 1 subtrahiert. Also springt der Eintrag um 2 Positionen nach oben. Keiner weis warum. Denn wenn ich die 2. Update-Anweisung mal ausklammer bekomm ich bei meine Echo-Ausgaben die richtigen Werte ausgegeben.

    [COLOR=red]Mein Idee voran es liegen könnte???[/COLOR]

    Ich werde nicht das Gefühl los, das PHP die Select-Abfrage
    PHP-Code:
       $strSQLcmd='SELECT * FROM bilder WHERE id='.$up;
       
    $result=mysql_query($strSQLcmd$db_connect);
       
    $data=mysql_fetch_array($result); 
    und die 2. Update-Anweisung
    PHP-Code:
          #!!! Bei Ausführung dieser Abfrage scheint der eigentliche Fehler zu enstehen !!!#
          # Hier bekommt der gewählt Eintrag, den neuen Wert (-1) an hand seiner ID zugewiesen
          
    $strSQLcmd2='UPDATE bilder SET position='.$newvalue.' WHERE id='.$up;
          echo 
    $strSQLcmd2."<br>";
          if (!
    $result=mysql_query($strSQLcmd2$db_connect2)) echo mysql_error(); 
    nicht getrennt ausführt sondern, die zusammen fasst und so ausführt.
    Dabei scheint er aber die Update-Anweisung vor der Select-Abfrage auszuführen!!!

    Weiß jemand wie ich das Problem umgehen kann??????????????
    Gibt es vielleicht eine Möglichkeit den Cache der SQL zu leeren vor der 2. Update-Anweisung????

    Weiß jemand wo das Problem liegt!

    Wäre für Hilfe sehr dankbar!!!

    Danke!
    Zuletzt geändert von TriphunEM; 15.11.2005, 15:12.

  • #2
    Die zweite UPDATE-Query geht über eine andere Verbindung?

    Schon versucht nach dem 1. UPDATE die geänderten Daten nochmal zu lesen und dann erst das 2. UPDATE abzusetzen?

    Schon vom SQL-Befehl COMMIT gehört?

    Kommentar


    • #3
      Nein das ist die selber verbindung. habs vergessen raus zumachen. war nur ein test ob es so geht!


      Das erste Update ist aber nicht das Problem, seh kein Sinn danach nochmal neu einzulesen, den die Ausgabe wäre dann das gleiche!

      COMMIT noch nicht gehört! Und aus dem Tut von mysql.com kann ich das nicht ganz nachvollziehen!!!?

      also mit COMMIT ändert sich garnix!!!!!


      Hat keiner eine Ahnung?????
      Zuletzt geändert von TriphunEM; 15.11.2005, 16:15.

      Kommentar


      • #4
        gut, es ist eine problem auf meinem server.
        auf einem anderen geht es!


        Hat jemand eine idee, woran es liegt und woh ich das einstellen muss??????

        Kommentar


        • #5
          Nun ich weiß nicht wie MySQL das handhabt oder ob man ihm das per Konfiguration vorschreiben kann. Aber Datenbanksysteme sind meist so angelegt, dass sie möglichst selten auf die Festplatte zugreifen wollen, denn das dauert viel zu lange.

          Dein 1. UPDATE wird also erstmal im Primärspeicher ausgeführt, die veränderten Tupel als dirty markiert, aber noch nicht unbedingt auf die Platte geschrieben. Wenn du jetzt ein SELECT nach genau diesen Tupeln fragen läßt, könnte das MySQL u. U. veranlassen, die 'dreckigen' Daten erstmal auf die Platte zu schreiben.

          Das 2. UPDATE operiert auf anderen Tupeln, also kein Grund fürs DBS, die Daten des 1. zu schreiben. Aber du bemerkst den Fehler ja durch erneutes Lesen und spätestens dann sollten die Daten konsistent sein.
          Deshalb gebe ich zu, es ist weit hergeholt. Die Puffer sollten dem User ja eigentlich transparent erscheinen. Aber einen kurzen Test UPDATE, SELECT, UPDATE könntest du ja mal machen, schließlich ist es dein Problem.

          Kommentar


          • #6
            Wer bei Wikipedia nach dem Begriff "Ausrufezeichen" sucht, findet unter anderem folgende Zeilen:
            Mehrere hintereinander geschriebene Ausrufezeichen symbolisieren Schreien, wirken jedoch meist fehl am Platz und sind nach Terry Pratchett nicht selten Zeichen für einen kranken Geist .
            Nur mal so nebenbei, für all diejenigen, die so gern (inflationäre) Ausrufe- und Fragezeichen verwenden.

            Hier der Link zum kompletten Artikel:

            http://de.wikipedia.org/wiki/Ausrufezeichen
            Das Genie überblickt das Chaos!

            Wer Rechtschreibfehler findet, darf sie behalten!

            Kommentar


            • #7
              mal so am Rande:
              Deine Logik hinkt ganz schön wenn Du mal Datensätze löschst.
              Dann hast Du hiermit:
              $newvalue=$data["position"]-1;
              sicher probleme
              Beantworte nie Threads mit mehr als 15 followups...
              Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

              Kommentar


              • #8
                nein tut sie nicht, den ich überprüfe vorher ob es der erste eintrag ist, wenn nicht, dann lasse ich -1 zu!

                Kommentar


                • #9
                  Eintrag 1 - Position 1
                  Eintrag 2 - Position 2
                  Eintrag 3 - Position 3

                  Eintrag 3 nach oben schieben:
                  Eintrag 1 - Position 1
                  Eintrag 3 - Position 2
                  Eintrag 2 - Position 3

                  Eintrag 3 löschen:
                  Eintrag 1 - Position 1
                  Eintrag 2 - Position 3

                  Eintrag 2 nach oben schieben:
                  Eintrag 1 - Position 1
                  Eintrag 2 - Position 2


                  Das würde dein Code machen, wenn ich ihn richtig verstehe
                  Ich denke, also bin ich. - Einige sind trotzdem...

                  Kommentar


                  • #10
                    Das würde dein Code machen, wenn ich ihn richtig verstehe
                    .
                    jau, sehe ich auch so.

                    @TriphunEM
                    Wenn Du Datensätze tauschen willst, musst Du den ersten vorher auf eine Platzhalterposition schieben und nicht einfach den zweiten auf den ersten und dann den ersten wieder auf den zweiten.
                    PHP-Code:
                    $birne 'Das ist ein birne';
                    $apfel 'Das ist ein Apfel';

                    #Du machst jetzt
                    $birne $apfel;
                    $apfel $birne
                    und wunderst Dich, dass in beiden dasselbe steht.

                    PHP-Code:
                    # Also Vorheriger Eintrag wird nach nach unten (+1) verschoben
                          
                    $strSQLcmd1='UPDATE bilder SET position='.$oldvalue.' WHERE position='.$newvalue
                    Damit überschreibst Du den Datensatz mit der position $oldvalue!
                    Die zehn Gebote sind deswegen so kurz und logisch, weil sie ohne Mitwirkung von Juristen zustande gekommen sind. (Charles de Gaulle)

                    Kommentar


                    • #11
                      mein code funktioniert perfekt, halt nur nicht auf meinem lokalen server! es liegt eindeutig an dem.
                      außerdem :
                      habt ihr meine löschroutine gesehen? nein!!!!

                      Wenn ich einen eintrag löschen rutschen alle hinterstehende einträge nach. also gibt da keine probleme!

                      Kommentar

                      Lädt...
                      X