Kannst du bitte den Code posten, wie dein Haus-Kauf-Befehl aussieht, und wie du die Häuser lädst, zum Server-Start?
Beiträge von Jeffry
-
-
Lies dir bitte diesen Thread durch, damit nicht alles in einer Zeile steht:
Der Pawn BB Code - Die richtige AnwendungUnd mache bitte keine Vollzitate, die geben keinen Sinn. Danke!
Zum Problem:
Kannst du mal den Log und den Code vom Aufbau der Verbindung zur Datenbank posten? -
Hast du im scriptfiles Ordner den Ordner "Häuser" erstellt?
Übrigens ist es immer eine schlechte Idee Umlaute (ä, ö, ü) zu verwenden, das kannst du vielleicht im Code gleich ändern. -
Willkommen auf Bredfish!
Zeige doch bitte mal deinen /restart Befehl.
Grundsätzlich ist das Problem, dass du auf eine nicht existierende MySQL Verbindung zugreifen willst. -
http://www11.pic-upload.de/30.04.15/6zx9tboiir7r.png
Das ist das Bild welches du zuvor gepostet hast. Die Idee, mal die Feldlänge von "passwort" in der Tabelle zu prüfen kam mir beim Essen. Jetzt ist mir klar warum bei dir nichts geklappt hat, da muss man aber auch erst mal drauf kommen.
Dein "passwort" Feld in der Datenbank ist zu klein. Du hast da nur 25 Zeichen drin, ein MD5 ist aber 32 Zeichen lang. Deshalb geht das nicht.Wenn du das hochsetzt, dann müsste es auch ganz normal mit dem MD5('%e') im Query klappen.
Das erklärt auch, warum es ohne den Hash ging, weil dein Passwort weniger als 25 Zeichen hat. -
Wie heißt denn eigentlich die Spalte in der Tabelle?
password oder passwort? Ich habe hier jetzt nämlich beide Varianten gesehen, wenn das nicht passt, dann würde es natürlich alle Fehler erklären. Prüfe das mal. -
passwort=('%e')
Zu
passwort='%e'Beim speichern hast du möglicherweise den gleichen Fehler drin, daher speichert es die Werte nicht mehr.
-
Das darfst du nicht ins query schreiben.
mysql_format(Handle, query, sizeof(query), "SELECT * FROM user WHERE username='%e' AND passwort='%e'", Spielername(playerid), MD5_Hash(inputtext));So natürlich auch beim registrieren.
-
Ja, genau so.
Und natürlich mit einem Callback in dem du dann die Daten aus dem Cache liest. -
Hast du die Include auch drin?
Wenn du damit nicht klar kommst, hier habe ich diese Include gefunden: http://forum.sa-mp.com/showthread.php?t=68237
Ich glaube das ist das was du meinst. -
Wie sieht das Query aus, mit dem du OnPasswordResponse aufrufst?
EDIT:
Ich sehe grade, das steht ja in einer anderen Tabelle. Ich bin mir ziemlich sicher, dass du keinen INNER JOIN durchführst, daher musst du noch ein zweites Query ausführen, welches die Daten aus der prisoneduser Tabelle ausliest. -
Ich habe selbst auch noch nie damit gearbeitet, aber laut der Doku müsste es so klappen:
new query[256], md5[33];
md5(inputtext, md5);
mysql_format(Handle, query, sizeof(query), "SELECT * FROM user WHERE username='%e' AND passwort='%e'", Spielername(playerid), md5);
printf("query: %s", query);
mysql_tquery(Handle, query, "OnPasswordResponse", "i", playerid);Gleiches Prinzip natürlich beim Registrieren, bzw...kannst es ja erst mal dort noch mit dem MD5 im Query lassen, vielleicht reicht das schon so.
-
Das ist schon interessant, dass es dann geht. Na gut, du kannst das MD5 mit einem Plugin wie diesem generieren lassen:
http://forum.sa-mp.com/showthread.php?t=152682Dann kannst du es damit in die Datenbank schreiben, bzw. den Select ausführen lassen, musst halt vorher das Passwort umwandeln lassen, anstatt im Query.
(!!Achtung!! Bei solidfiles: Nutze den "Direct download link" und nicht den grünen Download-Button, da bekommst du eine .exe!)
-
Die rows drehen? Was meinst du damit?
Was du mal versuchen kannst, da gab es auch schon mal Probleme: Entferne alle die MD5's, also alle MD5('%s') bzw MD5('%e') zu: '%s' bzw '%e'
Geht es dann? -
Sorry für die späte Antwort, war beschäftigt meine Treiber auf Windows 10 zu aktualisieren.
Bin grade dabei Microsoft Edge zu testen.Debugge den Code mit diesen Prints:
if(dialogid == DIALOG_LOGIN)
{
if(!response)
{
return Kick(playerid);
}
new query[256];
mysql_format(Handle, query, sizeof(query), "SELECT * FROM user WHERE username='%e' AND passwort=MD5('%e')", Spielername(playerid), inputtext);
printf("query: %s", query);
mysql_tquery(Handle, query, "OnPasswordResponse", "i", playerid);
}forward OnPasswordResponse(playerid);
public OnPasswordResponse(playerid)
{
new num_fields, num_rows;
cache_get_data(num_rows, num_fields);
printf("rows: %d", num_rows);
if(num_rows == 0)
{
printf("Passwort falsch");
//Passwort falsch..
/* Kamerafahrt */
InterpolateCameraPos(playerid, 410.214721, -1902.890136, 1.724467, 702.832702, -1904.377319, 3.244797, 100000);
InterpolateCameraLookAt(playerid, 410.543914, -1897.903930, 1.554080, 699.028930, -1901.132202, 3.214741, 100000);
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Anmeldung - Passwort falsch", "Dein Passwort ist nicht richtig\nsolltest du es vergessen haben\nmelde dich im Forum.", "Anmelden", "Abbrechen");
SetSpawnInfo(playerid,0,0,0,0,0,0,0,0,0,0,0,0);
SpawnPlayer(playerid);
}
else
{
printf("Login");
//Passwort richtig..
SendClientMessage(playerid,gelb, "Erfolgreich eingeloggt.");
pInfo[playerid][pEingeloggt] = 1;
LoadAccount(playerid);
SpawnPlayer(playerid);
}
return 1;
}Poste dann, was im Server Log steht.
Poste außerdem einen Screenshot von der user-Tabelle aus der Datenbank, wo man die Daten sieht. -
Hm, das passt alles. Das einzigste was mir da spontan auffällt, wäre dass mysql_format vielleicht nicht mit dem %e in MD5 klar kommt.
Ändere mal:
mysql_format(Handle, query, sizeof(query), "SELECT * FROM user WHERE username='%e' AND passwort=MD5('%e')", Spielername(playerid), inputtext);
zu:
format(query, sizeof(query), "SELECT * FROM user WHERE username='%s' AND passwort=MD5('%s')", Spielername(playerid), inputtext);Klappt es dann? (Das mit dem escapen ist für den Test erst mal egal, du injectest deine eigene Datenbank ja nicht, da ändern wir dann, falls es geht.)
-
Das OnPasswordResponse ebenfalls, da geht es ja weiter.
-
Dort passt alles.
Dann poste bitte deinen Login Code und den MySQL Log der dazu kommt, wenn du dich versuchst einzuloggen. -
Zeige bitte, wie du den Spieler speicherst. Möglicherweise überschreibst du das Passwort.
Prüfe auch, ob sich der MD5 Wert in der Tabelle ändert. -
Jeffry: Warum nicht einfach mysql_format nutzen ?
Gibt sicherlich noch mehr zu ändern, aber dann kann ich ja gleich ein neues Tutorial schreiben.
Aber habe es trotzdem geändert, bezieht sich ja schon auf die neue Version. Passt.