MySQL Datenbak Punkte auslesen

Noki99

Mitglied
Hallo Leute, ich habe folgendes Problem:

Ich habe eine Datenbank, die Userinfos heißt. So sieht sie aus:

ID Username Passwort Punkte
1 Noki99 ea110dfdeb4b966c81f7d786df7b1192 5
2 w f1290186a5d0b1ceab27f4e77c0c5d68 3

Ich habe ein einer Session Variable ($_SESSION["username"]) sen Usernamen, z.b. Noki99

Jetzt will ich einen Script machen, der von $_SESSION["username"] die Punkte ausliest, also bei Noki99 5.

Ich bekomme das nicht hin, kann mir jemand bitte helfen?
 
Versuch mal das:

PHP:
// Fehleranzeige aktivieren
ini_set('display_errors', 1);
error_reporting(E_ALL|E_STRICT);

// Verbindung zu DB aufbauen und prüfen
$db = new mysqli('localhost', 'dbuser', 'dbpassword', 'dbname');
if( mysqli_connect_errno() )
{
  die("Fehler beim Erzeugen des Datenbank-Objekts: " . mysqli_connect_error());
}

// Prepared Statement erzeugen, mit Query füttern und Parameter füllen
$statement = $db->prepare("SELECT `Punkte` FROM `Userinfos` WHERE `Username`= ?");
$statement->bind_param('s', $_SESSION['username']);
// Query ausführen
$statement->execute();
// Ergebnis in Variable
$statement->bind_result($Punkte);
// Abholen
$statement->fetch();

// Ausgeben
echo "Benutzer " . $_SESSION['username'] . " hat $Punkte Punkte";

// Aufräumen
$statement->close();
$db->close();

Ungetestet und ohne Garantie :-)

Wenn fragen, fragen.
 
Ich hab jetzt das:

PHP:
<?php
session_start();
echo $_SESSION["username"];
?>
<?
// Fehleranzeige aktivieren
ini_set('display_errors', 1);
error_reporting(E_ALL|E_STRICT);
 
// Verbindung zu DB aufbauen und prüfen
$db = new mysqli('localhost', 'account', '***', 'Userinfos');
if( mysqli_connect_errno() )
{
  die("Fehler beim Erzeugen des Datenbank-Objekts: " . mysqli_connect_error());
}
 
// Prepared Statement erzeugen, mit Query füttern und Parameter füllen
$statement = $db->prepare("SELECT `Punkte` FROM `Userinfos` WHERE `Username`= `$_SESSION["username"]`");
$statement->bind_param('s', $_SESSION['username']);
// Query ausführen
$statement->execute();
// Ergebnis in Variable
$statement->bind_result($Punkte);
// Abholen
$statement->fetch();
 
// Ausgeben
echo "Benutzer " . $_SESSION['username'] . " hat $Punkte Punkte";
 
// Aufräumen
$statement->close();
$db->close();
?>
 
<meta http-equiv="refresh" content="10; URL=points.php">

Ich lade die Seite alle 10 Sekunden neu, um die Punkte zu aktualiseiren...

Aber es kommt der Fehler:

Parse error: syntax error, unexpected '"', expecting T_STRING or T_VARIABLE or T_NUM_STRING in /users/account/www/game/points.php on line 18



Kann den Fehler in 18 nicht finden...

Danke
 
Zuletzt bearbeitet:
Es handelt sich hier um Prepared Statements, da sollte kein Wert aus einer Variablen eingegeben werden. Statt dessen arbeitet man mit dem Platzhalter "?" und füttert an die Stelle mittel bind_param()-Methode den eigentlichen Wert.

Du solltest die Zeile

PHP:
$statement = $db->prepare("SELECT `Punkte` FROM `Userinfos` WHERE `Username`= `$_SESSION["username"]`");

wieder in das zurück schreiben, was ich vorgegeben habe:

PHP:
$statement = $db->prepare("SELECT `Punkte` FROM `Userinfos` WHERE `Username`= ?");

Das wäre so, wie man Prepared Statements richtig anwendet.

Dein Fehler war aber, das du Gänsefüsschen versucht hast in eine Zeichenkette einzubauen, ohne sie zu maskieren. Aber das ist an dieser Stelle ohnehin nicht notwendig.
 
Ok, hab ich gemacht, sry.

Jetzt kommt das:

Warning: mysqli::mysqli() [mysqli.mysqli]: (42000/1044): Access denied for user 'account'@'localhost' to database 'Userinfos' in /users/account/www/game/points.php on line 11
Fehler beim Erzeugen des Datenbank-Objekts: Access denied for user 'account'@'localhost' to database 'Userinfos'

Aber der Login und das PW ist richtig...

Oh mir fällt gerade auf ich hab das PW mitgesendet... *OMG*

Warum kommt der Fehler?
 
Es könnte mehrere Ursachen dafür geben:

- Der Hostname ist nicht richtig
- Der Benutzername ist nicht richtig
- Das Passwort ist nicht richtig
- Der Datenbankname ist nicht richtig
- Alle Daten sind richtig, aber der Benutzer hat keine Rechte, die Datenbank 'datenbankname' zuzugreifen.
 
Bei meiner LoginPage hab ich das:

PHP:
<?php
session_start();
?> 

<?php
$verbindung = mysql_connect("localhost", "account" , "***")
or die("Fehler! Bitte wende dich an einen Admin!");
mysql_select_db("account") or die ("Fehler! Bitte wende dich an einen Admin!");

$username = $_POST["user"];
$passwort = md5($_POST["pass"]);

$abfrage = "SELECT Username, Passwort FROM Userinfos WHERE Username LIKE '$username' LIMIT 1";
$ergebnis = mysql_query($abfrage);
$row = mysql_fetch_object($ergebnis);

if($row->Passwort == $passwort)
    {
    $_SESSION["username"] = $username;
	?>
<meta http-equiv="refresh" content="1; URL=../../game">
<?
    }
else
    {
	?>
	<meta http-equiv="refresh" content="1; URL=../../Aufgaben/passwortfalsch.html">
<?
    }

?>

Das Datenbankaufbauen geht, und es sind die gleichen Daten eingegeben wie bei deinem Code.


Woran kann es noch liegen?
 
Hab mal das gemacht:


PHP:
<?php
session_start();
echo $_SESSION["username"];
?>
<?
// Fehleranzeige aktivieren
ini_set('display_errors', 1);
error_reporting(E_ALL|E_STRICT);
 
// Verbindung zu DB aufbauen und prüfen
$db = mysql_connect("localhost", "account" , "HUST")
or die("Fehler! Bitte wende dich an einen Admin!");
mysql_select_db("account") or die ("Fehler! Bitte wende dich an einen Admin!");
 
// Prepared Statement erzeugen, mit Query füttern und Parameter füllen
$statement = $db->prepare("SELECT `Punkte` FROM `Userinfos` WHERE `Username`= ?");
$statement->bind_param('s', $_SESSION['username']);
// Query ausführen
$statement->execute();
// Ergebnis in Variable
$statement->bind_result($Punkte);
// Abholen
$statement->fetch();
 
// Ausgeben
echo "Benutzer " . $_SESSION['username'] . " hat $Punkte Punkte";
 
// Aufräumen
$statement->close();
$db->close();
?>
 
<meta http-equiv="refresh" content="10; URL=points.php">

Jetzt kommt der Fehler:

Fatal error: Call to a member function prepare() on a non-object in /users/account/www/game/points.php on line 16

Bin ich weiter oder noch schlechter?
 
Zuletzt bearbeitet:
Du kannst nicht mysql mit mysqli-Funktionen mischen. Die Extension mysql ist als veraltet eingestuft und sollte seit 2 Releases nicht mehr für neu entwickelte Sachen verwendet werden.

Daher auch mein Vorschlag, es mit MySQLi zu machen.

Was mir aber grade aufgefallen ist: Bei deinem Beispiel-Script, das funktioniert, selektierst du die Datenbank "account", bei dem neuen Script steht aber

PHP:
// Verbindung zu DB aufbauen und prüfen
$db = new mysqli('localhost', 'account', '***', 'Userinfos'); // << Userinfos ist doch die Tabelle nicht die Datenbank?

Setz alles wieder zurück auf mysqli und verwende mal diese Zeile:

PHP:
// Verbindung zu DB aufbauen und prüfen
$db = new mysqli('localhost', 'account', '***', 'account');

PS: Du hast schon wieder das DB-Passwort gepostet ;-)
 
Zuletzt bearbeitet:
Wusste ich garnicht, dass es da 2 Dinger gibt...

Ok Danke hatte nen Denkfehler und jetzt geht´s.


Danke !! ;)

PS: Was das Passwort betrifft: *KopfAnDieWandHau*
 
Zurück