Highscore

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

  • Highscore

    Tag zusammen.

    Ich habe mich kürzlich etwas in PHP und SQL eingelesen und auch schon ein paar Tuts gemacht. Nun wollte ich etwas in eigener Sache machen. Dabei fiel meine Wahl auf ein Highscore-Script. Jenes soll folgendermaßen funktionieren:

    1) Man kann neue Einträge setzen.
    2) Man kann Spieler aus der Liste löschen
    3) Man kann den Punktestand des Spielers Updaten (Es soll jeder Spieler nur 1 mal in der Liste vorkommen

    Doch kommen wir mal zu dem eigentlichen Problem. Ich hab mir bei Tripod (Lycos) freien Webspace besorgt und dort eine MySQL Datenbank. Dort habe ich nun auch schon eine Tabelle und ein paar Testdatensätze eingefügt. Die Datensätze konnte ich auch erfolgreich auslesen. Allerdings habe ich mir gedacht das es ziemlich blöd ist wenn man immer selbst die Plazierung des Spielers angeben muss. Ich möchte also nur einen 'Namen', die 'Herkunft' und den 'Punkte'-stand eingeben. Also hab ich kurzerhand von "ORDER BY 'Punkte' DESC" gebrauch gemacht. Zusätzlich habe ich eine Variable $i deklariert. Jene ist erst auf '1' gesetzt und wird in einer Schleife um jeweils 1 erhöht. $i wir dann ausgegeben und die Daten werden an sich auch korrekt angezeigt. Das halte ich aber für eine unsaubere Lösung, denn wenn ich z.B. nach Spielernamen anstatt nach Punkten sortieren möchte, dann stimmen die Plazierungen ja nicht mehr überein. Also hab ich ein Feld 'Rang' in der Datenbank für die Platzierungen angelegt. Nur weiss ich nicht wie ich die Plätze korrekt zuordnen kann. Folgendes habe ich bereits gemacht.

    PHP-Code:
    ...
    $i=1;
    $abfrage = "SELECT Name, Punkte, Herkunft FROM tblToplist ORDER BY 'Punkte' DESC";
    $ergebnis = mysql_query($abfrage);
    ?>

    <table border=0, width='80%', align='center'>

    <?php
    while($row mysql_fetch_object($ergebnis))
        {
    echo 
    "<tr><td width='25%'>$row->Name<center></td>
              <td width='25%'>
    $row->Punkte<center></td>
              <td width='25%'><center>
    $row->Herkunft</td>
              <td width='25%'>
    $i<center></td></tr>";
        
    $i++;
        };
    ?>
    </table>
    ...
    Nur wie kriege ich das Ausgegebene von $i nun unter 'Rang' in meine Tabelle? Ich hab schon mit UPDATE einiges versucht, aber bin nach mehreren Stunden nur noch ratlos wie ich das Problem angehen soll.

    Wäre nett wenn ihr mir unter die Arme greifen könntet.

    Danke im voraus.

  • #2
    PHP-Code:
    ORDER BY Punkte 
    keine hochkommata. btw: ein
    PHP-Code:
    $ergebnis mysql_query($abfrage) or die (mysql_error()); 
    hätte dir sicher weiter geholfen.

    gruß
    peter
    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
    Meine Seite

    Kommentar


    • #3
      Ich hab schon mit UPDATE einiges versucht, aber bin nach mehreren Stunden nur noch ratlos wie ich das Problem angehen soll.
      Und wie genau hat dein UPDATE denn ausgeschaut?

      Gruss

      tobi
      Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

      [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
      Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

      Kommentar


      • #4
        @Kropff: Das Script das ich gepostet habe läuft einwandfrei. Auch das mit den '' ist kein Problem. Ich wollte es nun dem Problem entsprechend ändern oder es erweitern.

        EDIT: Hier der Beweis

        @jahlives: Also ich hab eine Update Funktion in die while Schleife integriert die ungefähr so aussah

        PHP-Code:
          $aendern "UPDATE tblToplist Set Rang = $i WHERE id = $row"
        Allerdings hab ich Probleme mit dem WHERE. Und bin mir unsicher ob dies überhaupt der richtige Weg ist.
        Zuletzt geändert von DotKom; 21.05.2008, 14:18.

        Kommentar


        • #5
          PHP-Code:
          $aendern "UPDATE tblToplist Set Rang = ".$i." WHERE id = ".$row
          Gruß
          Uzu

          private Homepage

          Kommentar


          • #6
            Allerdings hab ich Probleme mit dem WHERE. Und bin mir unsicher ob dies überhaupt der richtige Weg ist.
            Ich vermute - ohne den restlichen Code gesehen zu haben - dass $row ein Resultat-Array ist und bei Array musst du angeben welchen Index du übergeben willst
            PHP-Code:
            $aendern "UPDATE tblToplist Set Rang = ".$i." WHERE id =".$row['id']; 
            Dabei ist id der Name der gewünschten Spalte.

            Gruss

            tobi
            Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

            [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
            Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

            Kommentar


            • #7
              @jahlives: Wenn ich das einfüge krieg ich ein "syntax error, unexpected T_INC".

              Allerdings hab ich keine Ahnung was ein Resultat-Array ist. Ziel ist es halt das ich z.B. dem Spieler der am zweitmeisten Punkte hat in der der SQL-Tabelle im Feld Rang den Wert 2 zuteile.

              Kommentar


              • #8
                Original geschrieben von DotKom
                @jahlives: Wenn ich das einfüge krieg ich ein "syntax error, unexpected T_INC".

                Allerdings hab ich keine Ahnung was ein Resultat-Array ist. Ziel ist es halt das ich z.B. dem Spieler der am zweitmeisten Punkte hat in der der SQL-Tabelle im Feld Rang den Wert 2 zuteile.
                PHP-Code:
                while ($row mysql_fetch_object($ergebnis)) #result objekt
                while ($row mysql_fetch_assoc($ergebnis)) #result array 
                Gruß
                Uzu

                private Homepage

                Kommentar


                • #9
                  @jahlives: Wenn ich das einfüge krieg ich ein "syntax error, unexpected T_INC".
                  Kann mir irgendwie nicht vorstellen, dass dies von diesem Code kommt. Der sollte soweit ich das sehe korrekt sein
                  Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                  [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                  Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                  Kommentar


                  • #10
                    Mh, vielleicht reden wir aneinander vorbei oder ich habs falsch erklärt. Hier nochmal der komplette Code.


                    PHP-Code:
                    <?php
                    include("connect.php");

                    $i=1;

                    $aendern "UPDATE tblToplist Set Rang = ".$i." WHERE Rang =".$row['Punkte'];
                    $update mysql_query($aendern);

                    $abfrage "SELECT Name, Punkte, Herkunft FROM tblToplist ORDER BY 'Punkte' DESC";
                    $ergebnis mysql_query($abfrage);
                    ?>

                    <table border=0, width='80%', align='center'>

                    <?php

                    while ($row mysql_fetch_object($ergebnis))
                        {
                    echo 
                    "<tr><td width='25%'>$row->Name<center></td>
                              <td width='25%'>
                    $row->Punkte<center></td>
                              <td width='25%'><center>
                    $row->Herkunft</td>
                              <td width='25%'><center>
                    $i</td></tr>";
                    $i++;
                        };
                    ?>
                    </table>
                    <?php
                    mysql_close
                    ();
                    ?>
                    Dann kommt das dabei raus.


                    Und die Werte ganz rechts (1,2,3) wüde ich gerne den entsprechenden Namen zuordnen. Halt die 1,2,3 entsprechend in die SQL-Tabelle in das Feld 'Rang' eintragen.

                    Kommentar


                    • #11
                      Nach } kommt NIEMALS ein ;
                      PHP-Code:
                      $aendern "UPDATE tblToplist Set Rang = ".$i." WHERE Rang =".$row['Punkte']; 
                      Ich würde zum Updaten eine eindeutige Spalte verwenden. Dazu bietet sich eine id Spalte mit AUTO_INCREMENT Wert als PRIMARY KEY an
                      Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                      [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                      Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                      Kommentar


                      • #12
                        Original geschrieben von jahlives
                        Nach } kommt NIEMALS ein ;
                        Schadet aber auch nicht oder? Ein {} ist ein Block-Statement und nach jedem Statement kann ein ; folgen. Ebenso nach dem leeren Statement, weswegen es zulässig ist, beliebig viele ; hintereinander zu schreiben.

                        Ich will damit nicht sagen, dass Blöcke mit einem Semikolon beendet werden sollten. Sieh einfach nicht gut aus.

                        Kommentar


                        • #13
                          Wenn diese Sortierung stimmt, dann ist das reiner Zufall, denn sortiert wird nach dem String 'Punkte' sortiert, und das ist so gut wie nicht sortiert. Versuch mal «DESC» durch «ASC» zu ersetzen, und du wirst das genau gleiche Resultat erhalten.
                          Aber zu deinem UPDATE-Problem. Wenn ich dich richtig verstehe willst du einfach den entsprechenden Rang in der Tabelle speichern. Ich finde das zwar nicht schön, weil berechnete Daten in der DB nichts zu suchen haben und bei jeder Änderung der Punkte neu erstellt werden müssen. Es würde ja genügen, den Rang bei der Ausgabe zu berechnen. Aber was solls, ich will dir nicht vor dem Unglück stehen:
                          PHP-Code:
                          <?php
                          include("connect.php");

                          $abfrage "
                              SELECT 
                                  name, 
                                  punkte, 
                                  herkunft 
                              FROM 
                                  tblToplist 
                              ORDER BY
                                  punkte DESC"
                          ;
                          $ergebnis mysql_query($abfrage) or exit("Fehler: " mysql_error() . "<br />Abfrage: <pre>$abfrage</pre><br />");

                          echo 
                          "<table border=0, width='80%', align='center'>\n";
                          $rang 1;
                          while (
                          $row mysql_fetch_object($ergebnis)){
                              echo 
                          "<tr><td width='25%'>$row->name<center></td>
                                    <td width='25%'>
                          $row->punkte<center></td>
                                    <td width='25%'><center>
                          $row->herkunft</td>
                                    <td width='25%'><center>
                          $rang</td></tr>";
                              
                          $aendern "
                                  UPDATE 
                                      tblToplist 
                                  SET 
                                      rang = 
                          $rang 
                                  WHERE 
                                      name = 
                          $row->name";
                              
                          mysql_query($aendern) or exit("Fehler: " mysql_error() . "<br />Abfrage: <pre>$aendern</pre><br />");
                              
                          $rang ++;
                          }
                          echo 
                          "</table>\n";
                          mysql_close();
                          ?>
                          Gruss
                          H2O

                          Kommentar


                          • #14
                            @H2O
                            Und wenn zwei gleiche Namen in der Tabelle stehen? Als Identifier für einen Datensatz sollte imho nur der Primary Key verwendet werden. Ansonsten muss die Namen Spalte UNIQUE gesetzt sein, sonst gibt's Probleme.

                            Gruss

                            tobi
                            Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                            [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                            Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                            Kommentar


                            • #15
                              @jahlives
                              Ist mir auch klar. Ich bin jetzt mal von dem ausgegangen, was ich von der Tabellenstruktur kenne. Und da da nichts von einer Id steht, habe ich den Namen genommen, der ja theoretisch auch der PK sein könnte.
                              Aber wie schon gesagt, das Ganze macht eh nicht viel Sinn.
                              Gruss
                              H2O

                              Kommentar

                              Lädt...
                              X