Ankündigung

Einklappen
Keine Ankündigung bisher.

Wert um 1 erhöhen / inkrementieren, was mache ich falsch?

Einklappen

Neue Werbung 2019

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

  • Wert um 1 erhöhen / inkrementieren, was mache ich falsch?

    Hallo Leute,

    auf meiner Seite möchte ich eine Beschränkung für die Anzahl der Logins bestimmter User einbauen. Dazu habe ich in meiner SQL-db ein Feld namens "logins" angelegt.
    Dieses Feld soll bei jedem Login um 1 erhöht werden, so dass ich bei z.B. drei Logins den User sperren kann.

    Die Erhöhung des login-Wertes mache ich folgendermaßen:

    Code:
    mysql_query("UPDATE users SET logins = 'logins+1' WHERE user = '$user'" or die ('geht nicht'));
    Funktioniert aber nicht, es tut sich überhaupt nichts. Keine Erhöhung, keine Fehlermeldung...

    was mache ich falsch?

  • #2
    logins=logins+1 oder logins=logins+'1' sollte eigentlich funktionieren.

    Kommentar


    • #3
      Ganz genau, müsste eigentlich funktionieren, tuts aber nicht.
      Ich bin ratlos.

      Kann das vielleicht am Typ tinyint(1) liegen?

      Hier nochmal der komplette relevante Quellcode:

      Code:
      echo '<p align="center">LogIn erfolgreich!
      
      
      Weiter</p>';
      
      mysql_query("UPDATE users SET logins='logins+'1'' WHERE user = '$user'"or die ('geht nicht'));
      
      $query = @mysql_query("SELECT logins FROM users WHERE user = '$user'") or die('Select ist fehlgeschlagen!');
      
      $result = @mysql_fetch_array($query);
      $logins = $result['logins'];
      	
      echo "<p align='center'>Sie loggen sich bereits zum $logins . Mal ein!
      
      ";

      Kommentar


      • #4
        Zitat von mercurio
        Kann das vielleicht am Typ tinyint(1) liegen?
        Nein. Welche MySQL-Version benutzt du denn?

        Kommentar


        • #5
          Hast Du auch wirklich den Unterschied zwischen
          Zitat von mercurio
          logins = 'logins+1'
          und
          Zitat von Corvin Gröning
          logins=logins+1
          bemerkt und Corvins Version ausprobiert?

          Kommentar


          • #6
            Könnte es sein das "logins" den Wert Null hat ??
            Null + 1 ist Null!
            Jede Lösung verändert das Problem.

            Kommentar


            • #7
              @ Bruchpilot: Ja, die Schreibweise habe ich bemerkt, ändert aber leider nichts am Problem.

              @ Ratte78: "logins" hat standardmäßig den Wert "0", nicht "null". Aber auch wenn ich den Wert z.B. schon auf "1" setze verändert sich bei einem weiteren login nichts. Sehr seltsam. Ich habe bereits mehrere Veriablentypen ausprobiert, ohne Erfolg.

              Momentan habe ich "logins" folgendermaßen eingestellt:
              Code:
              Feld: logins
              Typ: TINYINT
              Länge/Set: 1
              Attribute: 
              Null: not null	
              Standard: 0
              Extra:

              Keine Ahnung, was ich falsch mache.

              Achso, ja, ich benutze MySQL 4.0.15


              Das komische ist ja, dass die SQL-queries ja funktionieren.
              Also z.B. das SELECT, hier bekomme ich astrein den richtigen Wert für "logins" zurück:

              Code:
              $query = @mysql_query("SELECT logins FROM users WHERE user = '$user'") or die('Select ist fehlgeschlagen!');
              $result = @mysql_fetch_array($query);
              $logins = $result['logins'];
              echo "<p align='center'>Sie loggen sich bereits zum $logins . Mal ein!
              
              ";
              Nur eben bei dem UPDATE scheint irgendwas nicht so zu laufen, wie es laufen soll:

              Code:
              mysql_query("UPDATE users SET logins=logins+1 WHERE user = '$user'" or die ('geht nicht'));
              Was hat den eigentlich das "@" vor mysql_query im oberen Beispiel zu bedeuten?

              [/code]

              Kommentar


              • #8
                Code:
                mysql_query("UPDATE users SET logins='logins+'1'' WHERE user = '$user'"or die ('geht nicht'));
                Der Abschnitt ist natürlich Käse. Auch wenn du die Anführungszeichen geändert hast.

                Mach es so:
                Code:
                $sql = sprintf("UPDATE users SET logins = logins + 1 WHERE user = '%s' LIMIT 1", $user);
                mysql_query($sql) or die('Update fehlgeschlagen: '.mysql_error());
                ?>
                (PHP-Tags gehen nicht)

                Kommentar


                • #9
                  Da fuhls mir wie Schuppen von den Augen:
                  Klammerfehler!

                  Es muss heißen:

                  Code:
                  mysql_query("UPDATE users SET logins=logins+1 WHERE user = '$user'") or die ('geht nicht');
                  statt
                  Code:
                  mysql_query("UPDATE users SET logins=logins+1 WHERE user = '$user'" or die ('geht nicht'));
                  Jetzt gehts, ich werd bekloppt!

                  @ Zergling: Was heißt denn hier Käse???, so schlimm wars doch gar nicht!
                  Falls du mit "PHP-Tags" PHP-Variablen meinst: natürlich kann ich PHP-Variablen in SQL-queries benutzen!


                  .

                  Kommentar


                  • #10
                    Mit Käse meinte ich
                    Code:
                    logins='logins+'1''
                    und ich dachte du hättest den "or die()" Fehler garnicht als Fehler erkannt.

                    "PHP-Tags gehen nicht" war darauf bezogen, dass der PHP-BBCode hier nicht geht, wenn man den CODE-Tag vorher verwendet hat.

                    Kommentar


                    • #11
                      Ok, hab ich missverstanden. Hauptsache es geht.

                      Schönen Dank und schönen Tag auf jeden Fall nach KA.

                      mercurio

                      Kommentar

                      Lädt...
                      X