mmofacts.com

2Problem mit Kampfscript

gepostet vor 18 Jahre, 6 Monate von gollum1990
Also ich habe jetzt schon ein anderes Kampfscript geschrieben. Mein Problem ist ich habe in meiner Datenbank 3 User wenn ich jetzt einen Angreifen will steht die von mir geschriebene Fehler meldung 'Der User existiert nicht.'.
Obwohl der User in der Datenbank steht. Habe es mal mit while schleifen proebiert aber es klappt trotzdem nicht. Das Script ansich geht schon nur
das ich immer diese Fehlermeldung bekomme.
Hier mal der Code:
 

$einheiten =$_POST['Untertanen'];
$username =$_POST['Username'];
$user = "SELECT `username` FROM `login`";
$user2 = mysql_query($user, $verbindung) or die (mysql_error());
$user3 = mysql_fetch_array($user2);
$werte = "SELECT `angriff`, `anzahl` FROM `login` WHERE `username` = '".$usernamen."'";
$werte2 = mysql_query($werte, $verbindung) or die (mysql_error());
$werte3 = mysql_fetch_array($werte2);
$haben = "SELECT `anzahl` FROM `login` WHERE `username` = '".$usernamen."'";
$haben2 = mysql_query($haben, $verbindung) or die (mysql_error());
$haben3 = mysql_fetch_array($haben2);
$verteidigung = "SELECT `verteidigung`, `anzahl` FROM `login` WHERE `username` = '".$username."'";
$verteidigung2 = mysql_query($verteidigung, $verbindung) or die (mysql_error());
$verteidigung3 = mysql_fetch_array($verteidigung2);
// Überprüfung
if($username == $user3['username'])
{
if($einheiten == $haben3['anzahl'])
{
echo 'Sie haben User: '.$username.' angegriffen.
';
echo 'Sie haben '.$einheiten.' geschickt.
';
echo 'Den Kampfbericht finden sie im Menü Kämpfe.
';
$Angreifer = $werte3['angriff'] * $werte3['anzahl'];
$Verteidiger = $verteidigung3['verteidigung'] * $verteidigung3['anzahl'];
if($Angreifer > $Verteidiger)
{
echo 'Gewonnen';
$sql = "UPDATE `login` SET `points` = `points` + 2 WHERE `username` = '".$usernamen."'";
$sql2 = mysql_query($sql, $verbindung) or die (mysql_error());
}
else
{
$sql = "UPDATE `login` SET `points` = `points` + 1 WHERE `username` = '".$usernamen."'";
$sql2 = mysql_query($sql, $verbindung) or die (mysql_error());
echo 'Sie haben leider verloren';
}
}
else
{
echo 'So viele Einheiten haben sie garnicht.';
}
}
else
{
echo 'Der User existiert nicht.';
}


Aja mit $usernamen definiere ich den eingeloggten User
Mit $username definiere ich den anzugreifenden User
gepostet vor 18 Jahre, 6 Monate von Störti
$user = "SELECT `username` FROM `login`"; 

$user2 = mysql_query($user, $verbindung) or die (mysql_error());
$user3 = mysql_fetch_array($user2);


Dieser Code liest sämtliche User aus der Datenbank aus, da wie WHERE-Klausel fehlt. Und es wäre schon ein ziemlich grosser Zufall, wenn der erste Eintrag in der Login-Tabelle auch dem User entspricht, den man angreifen will. Richtig muss es so heissen:

$user = "SELECT `username` FROM `login` WHERE `username` = ".$username.""; 

$user2 = mysql_query($user, $verbindung) or die (mysql_error());
$user3 = mysql_fetch_array($user2);
gepostet vor 18 Jahre, 6 Monate von Crafty-Catcher
Was passiert also dies:
if($username == $user3['username']) 
ist anscheined immer false.

Welche Variablen können das verursachen?
$username und $user3['username']

Fall 1 ($username):
Der User cheatet undmanipuliert die Post Daten: weil:
$username 	=$_POST['Username'];


Ich gehe mal nicht davon aus das du sich selber verarschen willst also wirst du in dem Test Szenario nicht cheaten aber dies ist durchaus als Wink mit dem Brückenpfeiler zu verstehen.

Ich gehe weiterhin davon aus das $_POST['Username'] nicht leer ist, was du mal überprüfen solltest (aber da ich den Fehler schon gesehen habe gehe ich mal nicht davon aus)

Fall 2 $user3['username']
Ok also kann quasi nur noch irgendwas hier nicht stimmen: $user3['username']

das heißt der Fehler liegt in diesem Stück:
 

$user = "SELECT `username` FROM `login`";
$user2 = mysql_query($user, $verbindung) or die (mysql_error());
$user3 = mysql_fetch_array($user2);

Und da steht auch eigentlich mehr oder weniger offensichtlich, dass du nur den erst User der in deiner Tabelle zufällig als erstes eingetragen ist ausliest.


Ok da war jemand schneller aber ich lass meine Lösung auch mal hier so stehen.
gepostet vor 18 Jahre, 6 Monate von gollum1990
Danke an Alle, Problem ist gelöst
gepostet vor 18 Jahre, 6 Monate von knalli
Ein weiterer Wink: Vermeide, intern mit Usernamen zu arbeiten. UserIds sind wesentlicher effektiver, einfacher, und bei der Anwendung dann auch schneller.

Der Username ist quasi als Bezeichner für die ID zu verstehen, damit die Welt nicht vor lauter Zahlen besteht.

Das geht in die Richtung Architektur - wenn du noch im Anfang bist, kannst du das Projekt noch umschreiben, je größerdesto komplexer und schwieriger wird das.

Auf diese Diskussion antworten