if-abfrage highscorelist

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

  • #16
    @titus, ich liebe es dir zu widersprechen!
    metallica hat JETZT eine datenbank, und wollte mal schnell dein super-script umgeschrieben haben ...

    wer lesen kann ist klar im vorteil
    h.a.n.d.
    Schmalle

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



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

    Kommentar


    • #17
      huch ... überlesen
      sorry allerseits - ich sollt mir wirklich langsam mal abgewöhnen, immer ALLE neuen Beiträge durchzuforsten, und die dafür genau durchlesen.
      Aus dem ersten Posting kam das mit der DB-Anbindung nicht so raus ... naja ... und das Sortieren mußte eben so umständlich sein, weil es damals mit ner Textdatei arbeiten sollte.

      Die einfachste Methode, das auf einer DB zu realisieren, ohne mehr als zehn Datensätze zu speichern ist diese:
      Code:
      $q = (mysql_query('select * from HIGHSCORE
        order by SCORE desc, DATUM asc
        limit 0,10')
      or die ('select: '. mysql_error());
      $n = mysql_num_rows($q);
      $datum = date ('Y-m-d');
      
      // noch keine 10 Einträge -> eintragen
      if (!($insert=($n<10)))
      { // sonst:
        mysql_data_seek($q, 9); // 10. Ergebnis suchen
        $x = mysql_fetch_array($q); // und lesen
        // wenn neuer Score größer als alter -> eintragen
        if ($insert = ($x[SCORE]<$winnercredits))
          // alten 10. Eintrag löschen
          mysql_query ('delete from HIGHSCORE where ID='.$x[ID])
            or die ('delete: '.mysql_error());
      }
      // wenn eine der Bedingungen zutrifft, in DB eintragen
      if ($insert)
        mysql_query ("insert into HIGHSCORE (SCORE,PLR,DATUM)
          values ($winnercredits, '$winnername', '$datum')")
        or die ('insert: '.mysql_error());
      mit der Query select * from HIGHSCORE order by SCORE desc, DATUM asc limit 0,10 liest du dann die zehn höchsten Einträge aus.

      Du kannst natürlich auch die ganzen Abfragen oben sparen, wenn du dir Uhrzeit mitspeicherst und auf das Löschen der alten Einträge verzichtest. Dann wird das ganze erheblich kürzer:

      - zusätzliches Feld ZEIT (Type TIME) in die DB
      Einfügen mit
      mysql_query ("insert into HIGHSCORE (SCORE,PLR,DATUM,ZEIT) values ($winnercredits, '$winnername', '". date('Y-m-d). "', '".date('H:i:s')."')") or die ('insert: '.mysql_error());

      und auslesen mit
      select * from HIGHSCORE order by SCORE desc, DATUM asc, ZEIT asc limit 0,10

      Das hätte den zusätzlichen Vorteil, dass Du auf alte Einträge sofort Zugriff hast, falls Du dich mal entschließt, statt der ursprünglichen zehn zwanzig oder auch 200 Einträge anzuzeigen.
      mein Sport: mein Frühstück: meine Arbeit:

      Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

      Kommentar


      • #18
        ok. alles klar.
        danke.

        werd das script jetzt mal für meine bedürfnisse anpassen und das ganze mal durchchecken.

        sag euch dann bescheid.



        @schmalle
        sorry wegen der echoausgabe, natürlich kann ich die selbst. hab da nur was falsch verstanden
        $PHP resource 4ever$

        Kommentar


        • #19
          Original geschrieben von Metallica
          natürlich kann ich die selbst.
          das wär ja mal was ganz neues
          h.a.n.d.
          Schmalle

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



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

          Kommentar


          • #20
            Original geschrieben von schmalle
            Original geschrieben von Metallica
            natürlich kann ich die selbst.
            das wär ja mal was ganz neues
            => ich hab ECHT alles gegeben und es funtzt auch zu 99%. nur die echoausgabe von php für flash (dort wird die highscore angezeigt!) tut noch nicht so ganz.

            hier mal das für meine bedürfnisse abgeänderte script:

            $top10 = mysql_query("SELECT * FROM highscore5 order by CREDITShs DESC");
            $i = "1";

            while($i <= 10) {
            $row = mysql_fetch_array($top10)

            $uebergabe .= "&name$i=$NAMEhs&credits$i=$CREDITShs"; //###DA HAPPERTS!###
            //die $uebergabe für flash muss immer wie folgt aussehen:
            //name1=Kurt&credits1=32000
            &name2=Jansen&credits2=30595
            &name3=Frank&credits3=14070
            &name4=Leo&credits4=9760
            &name5=Gandalf&credits5=4400
            &name6=Karl&credits6=1890
            &name7=BennY&credits7=900
            &name8=Charly&credits8=850
            &name9=Jürgen&credits9=800
            &name10=Gina&credits10=640
            &minwert=640
            &maxwert=32000
            &eintraege=10


            $i++;
            }

            $minwert = mysql_query("SELECT MIN(CREDITShs) FROM highscore5");
            $maxwert = mysql_query("SELECT MAX(CREDITShs) FROM highscore5");
            $anzeintraege = mysql_query("SELECT * FROM highscore5");

            $uebergabe .= "&minwert=$minwert&maxwert=$maxwert&eintraege=$anzeintraege";
            $uebergabe = substr($uebergabe,1);

            echo $uebergabe;

            [Editiert von Metallica am 04-03-2002 um 14:58]
            $PHP resource 4ever$

            Kommentar


            • #21
              schmalle??
              soll ich vielleicht ein neues topic anfangen??
              $PHP resource 4ever$

              Kommentar


              • #22
                sag doch einfach ma, was jetzt nicht geht
                h.a.n.d.
                Schmalle

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



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

                Kommentar


                • #23
                  das fettgedruckte in meinem vorletzten posting.
                  im kommentar hab ich nur die form der ausgabe reingeschrieben damit du weiß wie ich's brauche
                  $PHP resource 4ever$

                  Kommentar


                  • #24
                    Original geschrieben von Metallica
                    $top10 = mysql_query("SELECT * FROM highscore5 order by CREDITShs DESC");
                    $i = "1";

                    while($i <= 10) {
                    $row = mysql_fetch_array($top10)

                    $uebergabe .= "&name$i=$NAMEhs&credits$i=$CREDITShs"; //###DA HAPPERTS!###
                    Code:
                    $top10 = mysql_query("SELECT * FROM highscore5
                      order by CREDITShs DESC [b]limit 0,10[/b]");
                    $i = "1";
                    [b]$min = $max = 0;[/b]
                    while($i <= 10 && [b]$row = mysql_fetch_array($top10)[/b])
                    {[b]
                      $min = $row[CREDITShs];
                      if ("1" == $i) $max = $row[CREDITShs];[/b]
                      $uebergabe .= "&name$i=$[b]row[[/b]NAMEhs[b]][/b]"
                        . &credits$i=$[b]row[[/b]CREDITShs[b]][/b]";
                    }
                    [b]$uebergabe = substr($uebergabe, 1)
                      ."&minwert=$min&maxwert=$max&eintraege=" .($i-1);
                    mein Sport: mein Frühstück: meine Arbeit:

                    Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

                    Kommentar


                    • #25
                      Hi Titus,

                      funtzt fast.
                      die ausgabe paßt noch nicht ganz.
                      die echoausgabe sieht wie folgt aus:

                      name1=Leo&credits1=9760&
                      name1=BennY&credits1=900&
                      name1=Charly&credits1=850&
                      name1=Jürgen&credits1=800&
                      name1=Gina&credits1=640&
                      name1=Gandalf&credits1=4400&
                      name1=Kurt&credits1=32000&
                      name1=Jansen&credits1=30595&
                      name1=Karl&credits1=1890&
                      name1=Frank&credits1=14070&
                      minwert=14070&maxwert=14070&eintraege=0

                      ich brauch's aber so:
                      name1=Leo&credits1=9760&
                      name2=BennY&credits2=900&
                      name3=Charly&credits3=850&
                      name4=Jürgen&credits4=800&
                      name5=Gina&credits5=640&
                      name6=Gandalf&credits6=4400&
                      name7=Kurt&credits7=32000&
                      name8=Jansen&credits8=30595&
                      name9=Karl&credits9=1890&
                      name10=Frank&credits10=14070&
                      minwert=14070&maxwert=14070&eintraege=10

                      => dann muss das ganze noch aufsteigend sortiert an flash übergeben werden. soll heißen: spieler mit den meinsten credits hat name1&credits1 usw.

                      [Editiert von Metallica am 05-03-2002 um 07:20]
                      $PHP resource 4ever$

                      Kommentar


                      • #26
                        ups ... jau, da fehlt noch ne entscheidende Kleinigkeit: $i wird nicht hochgezählt!
                        Mach mal aus

                        $i = "1";
                        while($i <= 10 && $row = mysql_fetch_array($top10))

                        das hier:

                        for($i=1; $i <= 10 && $row = mysql_fetch_array($top10); $i++)

                        dann stimmt auch die Anzahl
                        mein Sport: mein Frühstück: meine Arbeit:

                        Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

                        Kommentar


                        • #27
                          ok. die durchnummerierung paßt jetzt.

                          nur minwert und maxwert passen noch nicht. da nimmt er irgendwas.

                          ahja, noch was:
                          ich brauch die ausgabe noch aufsteigend sortiert und nicht durcheinander.
                          $PHP resource 4ever$

                          Kommentar


                          • #28
                            jo, fiel mir auch gerade auf. Das liegt daran, dass du deine Credits als String (VARCHAR) und nicht als Zahl (INT) definiert hast.

                            Führ die folgende Query einmal aus, dann passt es:
                            alter table highscore5 modify CREDITShs integer(6) unsigned

                            Wahlweise kannst du auch einen anderen Integer-Typ nehmen, z.B. bigint (32 Bit, Max-Wert 2^32-1)
                            mein Sport: mein Frühstück: meine Arbeit:

                            Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

                            Kommentar


                            • #29
                              THXS. jetzt paßt's.
                              is ja 'n klacks mit phpmyadmin schnell mal den datentyp zu ändern. hatte vorher varchar. jetzt hab ich INT und es funtzt.

                              irgendwie fällt mir auf, dass das mit der DB jetzt um einiges leichter ist als damals mit der txt.

                              sodala. jetzt werd ich mich mal um den highscore_schreiben-Teil kümmern damit ich die txt endgültig deleten kann

                              jajaja. absteigend natürlich.
                              kikiki
                              $PHP resource 4ever$

                              Kommentar


                              • #30
                                Original geschrieben von Metallica
                                nur minwert und maxwert passen noch nicht. da nimmt er irgendwas.
                                Stimmt nicht ganz; schau nochmal genauer hin: max ist der erste ausgelesene Wert, min der letzte (jetzt wo die Nummerierung stimm).

                                ich brauch die ausgabe noch aufsteigend sortiert und nicht durcheinander.
                                Aufsteigend? GRÖßTE zuerst; jede Zahl kleiner als die davor: ist latürnich absteigend)
                                mein Sport: mein Frühstück: meine Arbeit:

                                Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

                                Kommentar

                                Lädt...
                                X