php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 21-05-2008, 14:47
DotKom
 Newbie
Links : Onlinestatus : DotKom ist offline
Registriert seit: May 2008
Beiträge: 4
DotKom ist zur Zeit noch ein unbeschriebenes Blatt
Standard 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.
Mit Zitat antworten
  #2 (permalink)  
Alt 21-05-2008, 14:56
Kropff
  Administrator
Links : Onlinestatus : Kropff ist offline
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.722
Kropff befindet sich auf einem aufstrebenden Ast
Standard

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
Mit Zitat antworten
  #3 (permalink)  
Alt 21-05-2008, 14:58
jahlives
 Master
Links : Onlinestatus : jahlives ist offline
Registriert seit: Jun 2004
Ort: Hooker in Kernel
Beiträge: 8.279
jahlives ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
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

"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."
Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)
Mit Zitat antworten
  #4 (permalink)  
Alt 21-05-2008, 15:14
DotKom
 Newbie
Links : Onlinestatus : DotKom ist offline
Registriert seit: May 2008
Beiträge: 4
DotKom ist zur Zeit noch ein unbeschriebenes Blatt
Standard

@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.

Geändert von DotKom (21-05-2008 um 15:18 Uhr)
Mit Zitat antworten
  #5 (permalink)  
Alt 21-05-2008, 15:17
UzumakiNaruto
 Registrierter Benutzer
Links : Onlinestatus : UzumakiNaruto ist offline
Registriert seit: Nov 2004
Beiträge: 642
UzumakiNaruto befindet sich auf einem aufstrebenden Ast
Standard

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

private Homepage
Mit Zitat antworten
  #6 (permalink)  
Alt 21-05-2008, 15:20
jahlives
 Master
Links : Onlinestatus : jahlives ist offline
Registriert seit: Jun 2004
Ort: Hooker in Kernel
Beiträge: 8.279
jahlives ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
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

"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."
Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)
Mit Zitat antworten
  #7 (permalink)  
Alt 21-05-2008, 15:44
DotKom
 Newbie
Links : Onlinestatus : DotKom ist offline
Registriert seit: May 2008
Beiträge: 4
DotKom ist zur Zeit noch ein unbeschriebenes Blatt
Standard

@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.
Mit Zitat antworten
  #8 (permalink)  
Alt 21-05-2008, 15:50
UzumakiNaruto
 Registrierter Benutzer
Links : Onlinestatus : UzumakiNaruto ist offline
Registriert seit: Nov 2004
Beiträge: 642
UzumakiNaruto befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
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
Mit Zitat antworten
  #9 (permalink)  
Alt 21-05-2008, 15:52
jahlives
 Master
Links : Onlinestatus : jahlives ist offline
Registriert seit: Jun 2004
Ort: Hooker in Kernel
Beiträge: 8.279
jahlives ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
@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

"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."
Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)
Mit Zitat antworten
  #10 (permalink)  
Alt 21-05-2008, 16:20
DotKom
 Newbie
Links : Onlinestatus : DotKom ist offline
Registriert seit: May 2008
Beiträge: 4
DotKom ist zur Zeit noch ein unbeschriebenes Blatt
Standard

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.
Mit Zitat antworten
  #11 (permalink)  
Alt 21-05-2008, 16:41
jahlives
 Master
Links : Onlinestatus : jahlives ist offline
Registriert seit: Jun 2004
Ort: Hooker in Kernel
Beiträge: 8.279
jahlives ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Nach } kommt NIEMALS ein ;
Zitat:
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

"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."
Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)
Mit Zitat antworten
  #12 (permalink)  
Alt 21-05-2008, 17:11
Benutzerbild von onemorenerd onemorenerd
  Moderator
Links : Onlinestatus : onemorenerd ist offline
Registriert seit: Mar 2005
Ort: Berlin
Beiträge: 9.471
onemorenerd wird schon bald berühmt werdenonemorenerd wird schon bald berühmt werden
Standard

Zitat:
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.
Mit Zitat antworten
  #13 (permalink)  
Alt 21-05-2008, 17:38
H2O
 PHP Junior
Links : Onlinestatus : H2O ist offline
Registriert seit: Jul 2007
Beiträge: 937
H2O ist zur Zeit noch ein unbeschriebenes Blatt
Standard

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
Mit Zitat antworten
  #14 (permalink)  
Alt 21-05-2008, 17:41
jahlives
 Master
Links : Onlinestatus : jahlives ist offline
Registriert seit: Jun 2004
Ort: Hooker in Kernel
Beiträge: 8.279
jahlives ist zur Zeit noch ein unbeschriebenes Blatt
Standard

@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

"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."
Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)
Mit Zitat antworten
  #15 (permalink)  
Alt 22-05-2008, 09:16
H2O
 PHP Junior
Links : Onlinestatus : H2O ist offline
Registriert seit: Jul 2007
Beiträge: 937
H2O ist zur Zeit noch ein unbeschriebenes Blatt
Standard

@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
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

ADSMAN V3 - Werbe-Manager ansehen ADSMAN V3 - Werbe-Manager

ADSMAN V3 - mehr als nur ein Bannermanager! Banner, Textanzeigen und PagePeel Manager! Mit ADSMAN PRO haben Sie die Marketinglösung für eine effektive und effiziente Werbeschaltung mit messbaren Ergebnissen. Unterstützt werden Bannerformate in beliebi

25.10.2018 virtualsystem | Kategorie: PHP/ Bannerverwaltung
PHP News und Artikel Script V2

News schreiben, verwalten, veröffentlichen. Dies ist jetzt mit dem neuen PHP News & Artikel System von virtualsystem.de noch einfacher. Die integrierte Multi-User-Funktion und der WYSIWYG-Editor (MS-Office ähnliche Bedienung) ermöglichen...

25.10.2018 virtualsystem | Kategorie: PHP/ News
Top-Side Guestbook

Gästebuch auf Textbasis (kein MySQL nötig) mit Smilies, Ip Sperre (Zeit selbst einstellbar), Spamschutz, Captcha (Code-Eingabe), BB-Code, Hitcounter, Löschfunktion, Editierfunktion, Kommentarfunktion, Kürzung langer Wörter, Seiten- bzw. Blätterfunktion, V

22.10.2018 webmaster10 | Kategorie: PHP/ Gaestebuch
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 10:37 Uhr.