Auslesen des Platzes Funktioniert nicht.

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

  • Auslesen des Platzes Funktioniert nicht.

    Hallo zusammen,
    ich habe ein Skript, dass Einträge für eine Highscoreliste in eine Datenbank schreibt.
    Darüberhinaus kommt ein Meldetext, der dann aussagt, das man sich z.b. im Moment auf Platz 5. befindet. Die Platzierung liest er anhand der Highscoreliste aus. Je nach Punktezahl belegt man in der Highscore Platz 1 bis 10.
    Irgenwie scheint da noch ein Fehler drin zu sein. Kann aber leider nicht rausfinden, woran es liegt. Wahrscheinlich in erster Linie weil ich nicht der PHP Experte bin ;-).
    Grundsätzlich ist es so, dass die Einträge in die Datenbank geschrieben werden. Erst beim Meldetext taucht der Fehler auf. Er liest nicht den Platz aus, den ich gerade belege sondernt wirft aus, wieviele Einträge gerade drin sind. Z.B. wenn es 20 Einträge gibt, sagt der Meldetext "Sie sind gerade auf Platz 21". Wobei ich nach Punkten auf Platz 5 sein sollte.
    Ausserdem hab ich da noch das Problem, dass wenn ich meinen Nick für die Highscore eintragen möchte und im Namen ein Umlaut oder Sonderzeichen auftaucht, wird nichts ausgewiesen.
    Wäre super wenn sich mal einer das Skript anschauen könnte. Villeicht kann mir da ja einer helfen...

    Vielen Dank im voraus...

    Gruß
    R.Carlos


    PHP-Code:
    <?php
    $monat 
    date ("m") ;
    $tag date ("d") ;
    $jahr date ("y");
    $eingetragen $tag.".".$monat.".".$jahr;

    include(
    "connection.inc.php");
    $db "xxxxxxxx";
    @
    mysql_select_db ($db) or  die ("Kann Datenbank nicht finden"); 
    if (
    $_GET ['points'] > 0){
    $sql  "INSERT INTO runner (punkte, nick, mailaddi, datum, geschlecht) ";
    $sql .= "VALUES";

    $sql .=    sprintf ("('%s', '%s', '%s', '%s', '%s')"    mysql_real_escape_string ($_GET ['points'])
                                                        , 
    mysql_real_escape_string (urldecode ($_GET ['nickn']))
                                                        , 
    mysql_real_escape_string ($_GET ['mailaddi'])
                                                        , 
    mysql_real_escape_string ($eingetragen)
                                                        , 
    mysql_real_escape_string ($_GET ['geschlecht'])
                                                        );
    $result mysql_query($sql$conn);
    if (
    $result) {
       
    $number mysql_insert_id();
    } else {
       echo 
    mysql_error($conn);
    }
    }

        
    $strQuery "SELECT punkte, nick, geschlecht FROM runner order by punkte DESC LIMIT 0, 10 "

    $result mysql_query($strQuery$conn); 

    while(
    $row  =  mysql_fetch_array($result))  { 
       for(
    $i=0$i mysql_num_fields($result);  $i++)  { 
          
    $ranklist $ranklist."$row[$i]"."*"
       }            
      
    $ranklist $ranklist."#"
    }


      
    // fragt PLATZ AB



    @mysql_select_db ($db) or  die ("Kann Datenbank nicht finden"); 

    $strQuery "SELECT * FROM runner WHERE punkte > '$points'"
    $result mysql_query($strQuery$conn); 
     while(
    $row  =  mysql_fetch_array($result))  { 
      
       
    $deinplatz =  $deinplatz 1;
       

       }
        
    $deinplatz =  $deinplatz 1;
      
      
    printf ("&ranklist=%s&deinplatz=%s&data=eof&"    stripslashes (htmlentities ($ranklist))
                                                      , 
    stripslashes (htmlentities ($deinplatz))
                                                      );


    ?>

  • #2
    Hi,

    Bin nicht so vertraut mit den Möglichkeiten von MYSQL Queries, aber wenn du wissen willst, an welche Stelle in der DB jemand ist, dann lies deine Top10 nach Punkten aufsteigend sortiert aus, und deine mitlaufende Zählvariable gibt dir die aktuelle Position an.

    Eigentlich einfach...

    Gruß Thomas

    Kommentar


    • #3
      Re: Auslesen des Platzes Funktioniert nicht.

      Original geschrieben von R.Carlos
      PHP-Code:
      <?php

        
      // fragt PLATZ AB



      @mysql_select_db ($db) or  die ("Kann Datenbank nicht finden"); 

      $strQuery "SELECT * FROM runner WHERE punkte > '$points'"
      $result mysql_query($strQuery$conn); 
       while(
      $row  =  mysql_fetch_array($result))  { 
        
         
      $deinplatz =  $deinplatz 1;
         

         }
          
      $deinplatz =  $deinplatz 1;
        
        
      printf ("&ranklist=%s&deinplatz=%s&data=eof&"    stripslashes (htmlentities ($ranklist))
                                                        , 
      stripslashes (htmlentities ($deinplatz))
                                                        );


      ?>

      Ich geh davon aus, das in dem Teil der Platz abgefragt werden soll.
      In der Variable $points muss die Punkte zahl vom aktuellen User drin stehen, für den Platz ausgegeben werden soll.

      Dann Abfrage:
      PHP-Code:
      $strQuery "SELECT COUNT(*) FROM runner WHERE punkte > ".$points
      Dann bekommst du die Anzahlder User zurück, die mehr Punkte haben.
      1 dazu addieren und du hast die Platzierung.


      Wegen dem Problem mit Umlauten und Sonderzeichen in der DB, check mal den Zeichensatz der eingestellt ist.

      Kommentar


      • #4
        Hi,
        vielen Dank für eure Hilfe...

        @matzinger

        wenn ich den Teil den du reinkopopiert hast einsetzte, bekomme ich nun immer ausgewiesen, dass ich den ersten Platz gemacht habe.
        Ist zwar schön, dass ich immer erster bin, aber so war das auch nicht gemeint ;-)
        Irgendwas stimmt da nicht...

        ich bekomme die Fehlermeldung...

        Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in highscore.php on line 55

        das wäre dann dieser Bereich

        PHP-Code:
         while($row  =  mysql_fetch_array($result))  { 

        Oder hab ich was übersehen?

        Gruß
        R.Carlos
        Zuletzt geändert von R.Carlos; 14.02.2006, 18:28.

        Kommentar


        • #5
          PHP-Code:
          <?php

          @mysql_select_db ($db) or  die ("Kann Datenbank nicht finden"); 

          $strQuery "SELECT COUNT(*) FROM runner WHERE punkte > ".$points;
          $result mysql_query($strQuery$conn); 
           
          $bessereUser  =  mysql_fetch_array($result)); 
           
          $deinplatz =  $bessereUser[0] + 1;
            
            
          printf ("&ranklist=%s&deinplatz=%s&data=eof&"    stripslashes (htmlentities ($ranklist))
                                                            , 
          stripslashes (htmlentities ($deinplatz))
                                                            );


          ?>
          Probier mal das. Ist nicht getestet, aber die Logik stimmt so.

          Kommentar


          • #6
            mhhh jetzt meckert er die Line 49 an...

            PHP-Code:
            @mysql_select_db ($db) or  die ("Kann Datenbank nicht finden"); 
            aber die war doch vorher auch so drin oder?

            Kommentar


            • #7
              Original geschrieben von R.Carlos
              mhhh jetzt meckert er die Line 49 an...

              PHP-Code:
              @mysql_select_db ($db) or  die ("Kann Datenbank nicht finden"); 
              aber die war doch vorher auch so drin oder?
              Leg nicht so viel Wert auf die Zeilennummer, sondern schau dir die Meldung an.
              Der Fehler entsteht schon oft vorher.

              Kommentar


              • #8
                ok.
                die Fehlermeldung lautet...Parse error: parse error, unexpected T_STRING in

                mein Code sieht nun so aus...

                PHP-Code:
                <?php
                $monat 
                date ("m") ;
                $tag date ("d") ;
                $jahr date ("y");
                $eingetragen $tag.".".$monat.".".$jahr;

                include(
                "connection.inc.php");
                $db "xxxxxxxx";
                @
                mysql_select_db ($db) or  die ("Kann Datenbank nicht finden"); 
                if(
                $points 0){
                $sql  "INSERT INTO runner (punkte, nick, mailaddi, datum, geschlecht) ";
                $sql .= "VALUES";

                $sql .=    sprintf ("('%s', '%s', '%s', '%s', '%s')"    mysql_real_escape_string ($points)
                                                                    , 
                mysql_real_escape_string ($nickn)
                                                                    , 
                mysql_real_escape_string ($mailaddi)
                                                                    , 
                mysql_real_escape_string ($eingetragen)
                                                                    , 
                mysql_real_escape_string ($geschlecht)
                                                                    );
                $result mysql_query($sql$conn);
                if (
                $result) {
                   
                $number mysql_insert_id();
                } else {
                   echo 
                mysql_error($conn);
                }
                }

                    
                $strQuery "SELECT punkte, nick, geschlecht FROM runner order by punkte DESC LIMIT 0, 10 "

                $result mysql_query($strQuery$conn); 

                while(
                $row  =  mysql_fetch_array($result))  { 
                   for(
                $i=0$i mysql_num_fields($result);  $i++)  { 
                      
                $ranklist $ranklist."$row[$i]"."*"
                   }            
                  
                $ranklist $ranklist."#"
                }





                  
                // fragt PLATZ AB



                @mysql_select_db ($dbor__die ("Kann Datenbank nicht finden"); 

                $strQuery "SELECT COUNT(*) FROM runner WHERE punkte > ".$points;
                $result mysql_query($strQuery$conn); 
                 
                $bessereUser__=__mysql_fetch_array($result)); 
                 
                $deinplatz =__$bessereUser[0] + 1;
                __
                __printf 
                ("&ranklist=%s&deinplatz=%s&data=eof&"____stripslashes (htmlentities ($ranklist))
                __________________________________________________stripslashes (htmlentities ($deinplatz))
                __________________________________________________);


                ?>

                Kommentar


                • #9
                  In folgender Zeile ist eine Klammer zu viel.

                  PHP-Code:
                  $bessereUser mysql_fetch_array($result); 

                  Kommentar


                  • #10
                    mhhh

                    Parse error: parse error, unexpected T_STRING in highscore.php on line 47


                    das wäre wieder das...



                    PHP-Code:
                    @mysql_select_db ($dbor__die ("Kann Datenbank nicht finden"); 

                    ich glaub ich werde wahnsinnig... :-(

                    Kommentar


                    • #11
                      aber ist da nicht ein denkfehler drin?

                      das komische ist, er zeigt mir immer die Anzahl der Dateinbankeinträge an + 1 als meinen Rang an.
                      Also wenn ich 5 Datenbankeinträge habe Bin ich auf Platz 6. Wenn ich 10 Einträge habe bin ich auf Platz 11.

                      Stimmt dann was nicht mit der Abfrage?

                      PHP-Code:
                      $strQuery "SELECT COUNT(*) FROM runner WHERE punkte > ".$points

                      Kommentar


                      • #12
                        Original geschrieben von R.Carlos
                        aber ist da nicht ein denkfehler drin?

                        das komische ist, er zeigt mir immer die Anzahl der Dateinbankeinträge an + 1 als meinen Rang an.
                        Also wenn ich 5 Datenbankeinträge habe Bin ich auf Platz 6. Wenn ich 10 Einträge habe bin ich auf Platz 11.

                        Stimmt dann was nicht mit der Abfrage?

                        PHP-Code:
                        $strQuery "SELECT COUNT(*) FROM runner WHERE punkte > ".$points
                        Soweit ich mich noch in mysql auskenne, zählt die abfrage alle user, die mehr punkte haben als $points. Also kann es vielleicht sein, dass alle User mehr Punkte haben als du oder ob in der der Vriable $points nix drin steht. Gibt doch mal $points aus.

                        Kommentar

                        Lädt...
                        X