Du bist nicht angemeldet.

1

16.02.2012, 19:42

Mysql Problem [PHP] ?

Hallo Leute, ich habe keine Ahnung was ich hier tun soll.

$server = mysql_connect('******', '*******', '*********'); $sqlCmd="SELECT * FROM `account` WHERE login = ".'$userid'." LIMIT 1"; $query = mysql_query($sqlCmd); $row = mysql_fetch_array($query); echo "Hallo ".$row['coins'];

PHP-Quellcode

 1 
 2 
 3 
 4 
 5 
 6 
 7 
$server = mysql_connect('******', '*******', '*********');
 
$sqlCmd="SELECT * FROM `account` WHERE login = ".'$userid'." LIMIT 1";
$query = mysql_query($sqlCmd);
$row = mysql_fetch_array($query);
 
echo "Hallo ".$row['coins'];


Nur irgendwie funktioniert das alles nicht, er gibt mir zwar "Hallo" aus, aber nicht die Variable Coins.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Netw0rk« (16.02.2012, 20:54) aus folgendem Grund: BB Code zur formatieren Anzeige eingefügt.


Netw0rk

King of can's.

(10)

Beiträge: 944

Beruf: Auszubildener Fachinformatiker(Anwendungentwickler)

Renommeemodifikator: 6

  • Private Nachricht senden

2

16.02.2012, 21:02

Hallo Xivo!

Lösungsvorschläge:
1. Hast du das SQL-Statement schon mal in deinem DBMS, wie beispielsweise PhpMyAdmin als Query eingegeben und das Ergebnis überprüft?
2. Warum verwendest du '$userid'? $userid ohne ' würde doch auch reichen. Darin könnte der Fehler sogar liegen.
3. Hast du es schon mal ohne Limit versucht?
4. Hast du dir schon mal $row mit print ausgeben lassen?

Tipp:
- Verwende
PHP: mysql_escape_string - Manual

Um dich vor der Allgemein gefürchteten SQL-Injection zu schützen. Es ist ein Exploit, der es dem Benutzer erlaubt SQL-Code auszuführen.

- Verwende
PHP: mysql_fetch_assoc - Manual

anstatt array.


Hoffe ich konnte dir helfen, wenn du das Problem gelöst hast, dann sag bitte bescheid und poste, wie du es gelöst hast. Danke :).

Beiträge: 292

Wohnort: Regensburg

Beruf: Bürokaufmann

Renommeemodifikator: 4

  • Private Nachricht senden

3

16.02.2012, 21:05

Dir fehlt ein Zugriff zur Datenbank!

$server = mysql_connect("host","user","passwort"); mysql_select_db("database",$server);

PHP-Quellcode

 1 
 2 
$server = mysql_connect("host","user","passwort");
mysql_select_db("database",$server);
"Zu Beleidigungen und Spam lesen Sie die Regel-Beilage, fragen Sie ihren Admin oder Moderator."

4

16.02.2012, 22:53

Danke schonmal für die Tipps, und Hilfen jedoch hat mich das kein Stück weiter gebracht, ich habe beides versucht und leider geht aber nichts von beidem :/
Vielleicht habt ihr ja noch eine Idee (:

Beiträge: 292

Wohnort: Regensburg

Beruf: Bürokaufmann

Renommeemodifikator: 4

  • Private Nachricht senden

5

17.02.2012, 00:31

Um es nochmal deutlicher zu machen, wie es komplett ausschauen sollte:

$server = mysql_connect('******', '*******', '*********'); mysql_select_db("*******",$server); $sqlCmd="SELECT * FROM account WHERE login = '".$userid."' LIMIT 1"; $query = mysql_query($sqlCmd); $row = mysql_fetch_array($query); echo "Hallo ".$row['coins'];

PHP-Quellcode

 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
$server = mysql_connect('******', '*******', '*********');
mysql_select_db("*******",$server);
 
$sqlCmd="SELECT * FROM account WHERE login = '".$userid."' LIMIT 1";
$query = mysql_query($sqlCmd);
$row = mysql_fetch_array($query);
 
echo "Hallo ".$row['coins'];


Ist die Abfrage mit login überhaupt richtig? Müsste da vll id rein oder so? ;)
p.s die Variable $userid ist nicht definiert in deiner Vorschau!
"Zu Beleidigungen und Spam lesen Sie die Regel-Beilage, fragen Sie ihren Admin oder Moderator."

6

17.02.2012, 13:39

Dankeschön, Sonnenspeer jedoch funktioniert dies auch nicht ;D

Ja, $userid ist definiert, ich habe es nicht gezeigt, jedoch ist es definiert, nämlich so :

$userid = WCF::getUser()->userID;

PHP-Quellcode

 1 
$userid = WCF::getUser()->userID;


Momentan sieht mein Code auch so aus :

{ $userid = WCF::getUser()->userID; $server = mysql_connect('asd', 'asd', 'asd'); mysql_select_db("account",$server); $sqlCmd="SELECT * FROM account WHERE login = '".$userid."' LIMIT 1"; $query = mysql_query($sqlCmd); $row = mysql_fetch_array($query); echo "Hallo ".$row['coins']; }

PHP-Quellcode

 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
 10 
 11 
 12 
 13 
{
	$userid = WCF::getUser()->userID;
 
	$server = mysql_connect('asd', 'asd', 'asd');
	mysql_select_db("account",$server);
 
	$sqlCmd="SELECT * FROM account WHERE login = '".$userid."' LIMIT 1";
	$query = mysql_query($sqlCmd);
	$row = mysql_fetch_array($query);
 
	echo "Hallo ".$row['coins'];
 
}

Beiträge: 292

Wohnort: Regensburg

Beruf: Bürokaufmann

Renommeemodifikator: 4

  • Private Nachricht senden

7

17.02.2012, 13:58

versuch mal dein Verarbeitung des Query zu ändern auf
mysql_fetch_assoc($query); // statt mysql_fetch_array();

PHP-Quellcode

 1 
mysql_fetch_assoc($query); // statt mysql_fetch_array();


Daran könnt es liegen ;)
"Zu Beleidigungen und Spam lesen Sie die Regel-Beilage, fragen Sie ihren Admin oder Moderator."

8

17.02.2012, 14:45

Leider ebenfalls sowenig erfolg :/

Jedoch habe ich glaube ich schon die Lösung, ich frage gerade ab :

WHERE login (username) = $userid, und das kann nicht stimmen da die userid keinen Namen ausließt, sondern nur die ID des Datenbankeintrages.

So sieht jetzt mein Script aus :

$userid = WCF::getUser()->username; $user = new User($userid); $server = mysql_connect('---', '', '--'); mysql_select_db("account",$server); $sqlCmd="SELECT * FROM account WHERE login = ".$user->username." LIMIT 1"; $query = mysql_query($sqlCmd); $row = mysql_fetch_assoc($query); echo "Hallo".$row['coins']; echo "$userid";

PHP-Quellcode

 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
 10 
 11 
 12 
 13 
$userid = WCF::getUser()->username;
$user = new User($userid);
 
$server = mysql_connect('---', '', '--');
mysql_select_db("account",$server);
 
$sqlCmd="SELECT * FROM account WHERE login = ".$user->username." LIMIT 1";
$query = mysql_query($sqlCmd);
$row = mysql_fetch_assoc($query);
 
echo "Hallo".$row['coins'];
 
echo "$userid";


Jedoch bekomme ich nun diesen Error :

Fatal error: Invalid SQL: SELECT user_option.*, user.* FROM wcf1_user user LEFT JOIN wcf1_user_option_value user_option ON (user_option.userID = user.userID) WHERE user.userID = xivo1244 LIMIT 1 sql error: Unknown column 'xivo1244' in 'where clause'

Quellcode

 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
Fatal error: Invalid SQL: SELECT 	user_option.*,
					user.*
				FROM 	wcf1_user user
					LEFT JOIN wcf1_user_option_value user_option ON (user_option.userID = user.userID)
				WHERE 	user.userID = xivo1244 LIMIT 1


sql error: Unknown column 'xivo1244' in 'where clause'

Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von »Sonnenspeer« (17.02.2012, 15:38)


9

18.02.2012, 13:07

Zuerst mal solltest du, wenn du denn schon die Auswahl hast, nicht den Usernamen, sondern die ID benutzen, da das um einiges schneller ist. Das heißt, die Zeile, in der du $userid setzt, bleibt so wie vorher, nur in deiner Abfrage fragst du nach WHERE id = $userid (natürlich vorausgesetzt, dass die ID in deiner Tabelle account gleich ist, wie in deiner anderen User-Tabelle).

Wenn die IDs der account Tabelle sich von der anderen User-Tabelle unterscheiden, musst du es natürlich doch mit Usernamen machen. Dann solltest du allerdings diese Abfrage, die du in der zweiten Zeile noch machst weglassen, das ist nur eine unnötige Abfrage, da du in der ersten Zeile bereits deinen Usernamen ausliest. Und dann musst du um den Usernamen einfache Anführungszeichen setzen, damit MySQL diesen als String erkennt und nicht als Schlüsselwort oder Tabelle/Spalte.
$query = mysql_query("SELECT coins FROM account WHERE login = '" . $userid . "' LIMIT 1");

PHP-Quellcode

 1 
$query = mysql_query("SELECT coins FROM account WHERE login = '" . $userid . "' LIMIT 1");


Übrigens benötigst du, wenn du den Wert einer Variablen haben willst natürlich keine Anführungszeichen zu setzen, wenn du außer der Variable nichts anderes haben willlst:
echo $userid;

PHP-Quellcode

 1 
echo $userid;

10

19.02.2012, 13:44

Ich bin aufjedenfall schon ein Stück weiter gekommen, jetzt habe ich jedoch folgendes Problem :

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /var/www/vhosts/gtarealworld.com/httpdocs/ucp.php on line 8

$sqlCmd = "SELECT * FROM account.account WHERE login = ".'xivo1244'." LIMIT 1"; $sqlQry = mysql_query($sqlCmd,$server); while($getPlayers = mysql_fetch_array($sqlQry)) {

PHP-Quellcode

 1 
 2 
 3 
 4 
	$sqlCmd = "SELECT * FROM account.account WHERE login = ".'xivo1244'." LIMIT 1";
	$sqlQry = mysql_query($sqlCmd,$server);
 
	while($getPlayers = mysql_fetch_array($sqlQry)) {


$server ist natürlich definiert, habe ich jetzt aber nicht mit eingetragen wegen den Daten & so.

Thomas2500

Administrator

(23)

Beiträge: 767

Wohnort: 2500, Siegenfeld

Beruf: HTBLuVA Schüler

Renommeemodifikator: 7

  • Private Nachricht senden

11

19.02.2012, 14:20

Was ist in deinem Beispiel Zeile 8?
Mach mal hinter mysql_query(...) OR DIE(mysql_error());
MfG Thomas2500 - For science, you monster

12

19.02.2012, 14:43

Ah, dankeschön für diesen Post, jedoch sagt er mir genau das was ich vorher auch schon befürchtet hatte :

Unknown column 'xivo1244' in 'where clause'

Quellcode

 1 
Unknown column 'xivo1244' in 'where clause'


Der Code dazu sieht wie folgt aus :

$server = mysql_connect('***.***.***.***', '*********', '************'); $sqlCmd = "SELECT * FROM account.account WHERE login = ".'xivo1244'." LIMIT 1"; $sqlQry = mysql_query($sqlCmd,$server) OR DIE(mysql_error()); while($getPlayers = mysql_fetch_array($sqlQry)) { echo "<b> ".$getPlayers->login." </b>"; }

PHP-Quellcode

 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
 10 
	$server = mysql_connect('***.***.***.***', '*********', '************');
 
	$sqlCmd = "SELECT * FROM account.account WHERE login = ".'xivo1244'." LIMIT 1";
	$sqlQry = mysql_query($sqlCmd,$server) OR DIE(mysql_error());
 
	while($getPlayers = mysql_fetch_array($sqlQry)) {
 
	echo "<b> ".$getPlayers->login." </b>";	
 
	}

Beiträge: 292

Wohnort: Regensburg

Beruf: Bürokaufmann

Renommeemodifikator: 4

  • Private Nachricht senden

13

19.02.2012, 14:54

Dein Code wird immer seltsamer ;D

$server = mysql_connect('***.***.***.***', '*********', '************'); $sqlCmd = "SELECT * FROM account.account WHERE login = 'xivo1244' LIMIT 1"; // nimm die " " vor den ' ' raus, das ist ein String im String und daher passt dies so nun $sqlQry = mysql_query($sqlCmd,$server) OR DIE(mysql_error()); while($getPlayers = mysql_fetch_assoc($sqlQry)) { //für Arrays sollte man lieber mysql_fetch_assoc verwenden echo $getPlayers['login']; //du hast mysql_fetch_array verwendet, daher kannst du keinen Zeiger auf ein Objekt verwenden ($getPlayers->login)!! }

PHP-Quellcode

 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
 10 
 11 
 12 
 13 
 14 
	$server = mysql_connect('***.***.***.***', '*********', '************');
 
 
	$sqlCmd = "SELECT * FROM account.account WHERE login = 'xivo1244' LIMIT
 1"; // nimm die " " vor den ' ' raus, das ist ein String im String und 
daher passt dies so nun
	$sqlQry = mysql_query($sqlCmd,$server) OR DIE(mysql_error());
 
	while($getPlayers = mysql_fetch_assoc($sqlQry)) { //für Arrays sollte man lieber mysql_fetch_assoc verwenden
 
 
	echo $getPlayers['login'];  //du hast mysql_fetch_array verwendet, daher kannst du keinen Zeiger auf ein Objekt verwenden ($getPlayers->login)!!
 
	}


Zeig uns mal bitte die Datenbankstruktur und zumindest die Werte, welche für login = xivo1244 verwendet werden.
"Zu Beleidigungen und Spam lesen Sie die Regel-Beilage, fragen Sie ihren Admin oder Moderator."

14

19.02.2012, 14:59

Haha, das mit dem Code stimmt wohl :D Aber nun funktioniert das ganze System, und ich bekomme den Namen auch angezeigt (:

Dankeschön, hat wohl sehr gut funktioniert (:

Kennt sich wer von euch gut im WBB aus, weil wenn ich die .php Datei aufrufe funktioniert das super, wenn ich die .php jetzt aber über
includePHP include, habe ich nen riesen "Fatal Error", weil mein WBB irgendwie den Syntax verändert oO

Ähnliche Themen