Andi007: Hilfe php + datenbank

Hi,

Ich habe einen Script vom wem bekommen:

<?php

$host = 'localhost';
$name = '***';
$passwort = '***';
$datenbank = '***';

$user = $_GET['user'];
$score = $_GET['score'];

$db_link = @mysql_connect($host, $name, $passwort);

if($db_link) {

};

if(mysql_select_db($datenbank)) {

};

if ($user == '') {

$sql = "SELECT user,score FROM score ORDER BY score DESC";

$result = mysql_query($sql) OR die(mysql_error());

echo "<table border="1">";

while($row = mysql_fetch_assoc($result)) {

echo "<tr><td>".$row['user']."</td><td>".$row['score']."</td></tr>";

};

echo "</table>";

} else {

$sqlb = mysql_query ("SELECT user FROM score WHERE user = '$user'") or die (mysql_error());

$ro = mysql_fetch_assoc($sqlb);

$name = ($ro['user']);

if ($name == '') {

mysql_query ("INSERT INTO score (user,score) VALUES ('$user','$score')") or die (mysql_error());

echo "<p>Eintrag gespeichert!</p>";

} else {

echo "User existiert bereits!";

};

};

?>

Leider kenne ich mich mit php nicht sehr gut aus deshalb frag ich mal hier ob wer mir helfen kann.

Jetzt ist es so das wenn ein user schon in der bestenliste ist sich nicht nochmal eintragen kann. ich möchte das, wenn ein user schon eingetragen ist und sich mit einen höheren punktestand nochmal einträgt, dass der alte punktestand überschrieben wird.

  1. Hi,

    } else {

    echo "User existiert bereits!";

    };

    Den echo Befehl einfach ersetzen durch:
    mysql_query("UPDATE score SET score='$score' WHERE user = '$user'") or die(mysql_error());

    Das überschreibt den Wert aber auch, wenn der neue kleiner als der alte ist.
    Ansonsten kanns Du vor den eben beschriebenen Befehl noch vorschreiben : if($ro['score'] < $score)
    und die SELECT Abfrage in der mitte (SELECT user FROM) noch um die Spalte score erweitern (SELECT user, score FROM ...)

    Schöne Grüße
    Axel

    1. Hallo,

      Ich habe jetzt die Zeile echo... durch

      if($ro['score'] < $score) mysql_query("UPDATE score SET score='$score' WHERE user = '$user'") or die(mysql_error());

      ersetzt.

      Der Punktestand wird überschrieben... aber auch wenn er kleiner ist als der alte :-(

      Was muss ich noch tun?

      1. Hello,

        Ich habe jetzt die Zeile echo... durch

        if($ro['score'] < $score) mysql_query("UPDATE score SET score='$score' WHERE user = '$user'") or die(mysql_error());

        ersetzt.

        Der Punktestand wird überschrieben... aber auch wenn er kleiner ist als der alte :-(

        Was muss ich noch tun?

        Die Bedingunge (if) bezieht sich auf einen Snapshot, also auf einen gefundenen Datensatz. Das Statement bezieht sich aber auf die gesamte Tabelle. Schau Dir mein anderes Posting an und mach es eben nur mit der Datenbank. das ist ohnehin die bessere Lösung. Der Datenbestand könnte sich nämlich zwischen der Abfrage für die Ermittlung Deines IF-Vergleichswertes und dem Sql-Statement schon wieder geändert haben. da hätte man die Tabelle oder zumindest den gefundenen Datensatz solange sperren müssen, bis die gesamte Transaktion erledigt ist.

        Harzliche Grüße aus http://www.annerschbarrich.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau
    2. Hello,

      Den echo Befehl einfach ersetzen durch:
      mysql_query("UPDATE score SET score='$score' WHERE user = '$user'") or die(mysql_error());

      Das überschreibt den Wert aber auch, wenn der neue kleiner als der alte ist.

      Warum dann nicht so?

      $re = mysql_query("UPDATE score SET score='$score' WHERE user = '$user' and score < '$score'") or die(mysql_error());

      Das wird aber dann keinen MySQL-Fehler mehr auslösen, denn wenn der gefundene Score Größer als der neue ist, und deshalb das Statement nicht ausgeführt wird, ist das ja kein Fehler.

      Man müsste das dann eher mit MySQL-Affected_Rows($res) abfragen, ob was passiert ist.

      Harzliche Grüße aus http://www.annerschbarrich.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau