Morgen zusammen,
wollte mal fragen wie ich es am besten löse, dass vorhande Accounts (egal ob über MySQL oder Dini) in einem Dialog aufgelistet werden und man diese seperat für weitere Aktionen auswählen kann (löschen etc.).
Danke im Voraus.
Morgen zusammen,
wollte mal fragen wie ich es am besten löse, dass vorhande Accounts (egal ob über MySQL oder Dini) in einem Dialog aufgelistet werden und man diese seperat für weitere Aktionen auswählen kann (löschen etc.).
Danke im Voraus.
Ich glaub bei Dini geht es nicht, aber bei MySQL könntest du eine While schleife machen.
z.B
while(mysql_retrieve_row()) //this will be running until all rows are processed
{
//you can use mysql_fetch_field and mysql_fetch_field_row here
}
Ich glaub bei Dini geht es nicht, aber bei MySQL könntest du eine While schleife machen.
z.B
while(mysql_retrieve_row()) //this will be running until all rows are processed
{
//you can use mysql_fetch_field and mysql_fetch_field_row here
}
Und daran erkennt man wieder das ich bei MySQL noch ein Einsteiger bin
Hab mich mal durch's Wiki gesucht, aber das mit dem Verstehen hat da doch nich so ganz funktioniert..
Man muss doch bei [ while(mysql_retrieve_row()) ] bestimmt noch irgendwas hinzufügen oder? Und soll ich dann [ mysql_fetch_field ] oder [ mysql_fetch_field_row ] benutzen?
Es geht bei beiden, bei dini allerdings mehr schlecht als recht.
Für dini benötigst du eine index file, in der alle Namen der anderen Spielerdateien gespeichert werden, da du sonst keinerlei Referenzen auf diese besitzt.
Bei MYSQL ist es einfacher. Du liest einfach alle Tupel aus einer Tabelle aus. Im Grunde genommen recht es dort aus den Namen auszulesen, da dies in SAMP eigentlich immer der Primärschlüssel ist.
DIese gehst du dann, je nach Plugin (BlueG oder Stricken) mit der jeweiligen Methode in einer while schleife durch
Zitat von Housefrauwhile(mysql_retrieve_row()) //this will be running until all rows are processed
{
//you can use mysql_fetch_field and mysql_fetch_field_row here
}
Ich stell' mich irgendwie zu blöd an. Hab' einfach mal alles mögliche probiert und versucht, bis am Ende sowas rauskam:
mysql_query("SELECT Name FROM samp");
mysql_store_result();
new result[512];
while(mysql_retrieve_row())
{
mysql_fetch_field_row(result,"Name");
}
mysql_free_result();
ShowPlayerDialog(playerid,temp,DIALOG_STYLE_MSGBOX,"Hi",result,"Ok","");
Leider wird der Dialog nicht angezeigt.. Will mir jemand nochmal einen Denkanstoß geben, damit ich wieder in Ruhe schlafen kann?
mysql_query("SELECT Name FROM samp");
mysql_store_result();
new result[512], string[256];
while(mysql_retrieve_row())
{
mysql_fetch_field_row("Name", result);
format(string, sizeof(string), "%s\n%s", string, result);
}
mysql_free_result();
ShowPlayerDialog(playerid,temp,DIALOG_STYLE_MSGBOX,"Hi",string,"Ok","");
Hast du einen stock der mysql_CheckAccount heißt?
Hast du einen stock der mysql_CheckAccount heißt?
Ja;
stock mysql_CheckAccount(playerid)
{
new Query[128],Name[MAX_PLAYER_NAME],count;
GetPlayerName(playerid, Name, MAX_PLAYER_NAME);
mysql_real_escape_string(Name, Name);
format(Query, sizeof(Query), "SELECT * FROM `accounts` WHERE `Name` = '%s'", Name);
mysql_query(Query);
mysql_store_result();
count = mysql_num_rows();
mysql_free_result();
return count;
}
Ich denke mal du hast einen Befehl mit dem du alle Admins abfragst..
Im Grunde machst du das genau so mit den accounts..
Du machst eine Schleife und fragst anstatt das Adminlevel ab ob ein Account der Schleife existiert.
Also:
if(mysql_Checkaccount(i) == 1)
{
...
}
Les das einfach von deinem Admins Befehl ab.
Dürfte normalerweise nicht so schwer sein
Hast du einen stock der mysql_CheckAccount heißt?
Lösch bitte deinen Beitrag. Was bringt denn diese Funktion ( Es ist eine Funktion,kein stock ) um aufzulisten, was für Accounts es alles gibt ?
Soll man jetzt etwa zufällig alle möglichen Namen ausprobieren ?
Der Beitrag von John_Hunter ist gut.
Hää?
Du kannst doch Abfragen ob der Account von i existiert?
Wenn er existiert kannst du den namen eintragen lassen...
Weiß nicht wo da das Problem sein soll, aber gut das du Sachlich bleibst und direkt rumheulen musst.
GG!
Sind denn bei dir alle Spieler auf dem Server die jemals bei dir einen Account angelegt haben ? Ich nehm die Antwort mal vorne weg,Nein.
ZitatWeiß nicht wo da das Problem sein soll, aber gut das du Sachlich bleibst und direkt rumheulen musst.
Tust du ja gerade.
Dann habe ich wohl die Frage falsch vertanden..
Er möchte Abfragen ob sich User bei ihm registriert haben und sie sollen gleichzeitig eingeloggt sein oder wie?
Dann habe ich wohl die Frage falsch vertanden..
Er möchte Abfragen ob sich User bei ihm registriert haben und sie sollen gleichzeitig eingeloggt sein oder wie?
Nein
Er soll mir einfach nur alle vorhandenen Accounts in der Datenbank auflisten, damit ich diese per Dialog löschen kann etc.
Leider funktioniert der Code von @Josh_Hunter: auch nicht ..
Entweder stehe ich gerade auf der Leitung oder ich bin gerade einfach nur zu Müde.
Ich werde das heute Abend testen und werde dir bescheid geben.
Wäre gut wenn du dich heute Abend so gegen 21:00 Uhr bei mir melden könntest
Alles anzeigenNein
Er soll mir einfach nur alle vorhandenen Accounts in der Datenbank auflisten, damit ich diese per Dialog löschen kann etc.
Leider funktioniert der Code von @Josh_Hunter: auch nicht ..
Du sollst auch nicht einfach nur kopieren.Hast du denn überhaupt eine MySQL Datenbank ? Gibt es dort die Tabelle samp und ist dort eine Spalte mit dem Namen Name ? Wird der Dialog angezeigt und ist lediglich der Inhalt leer ?
Mach doch einfach mal Debug Informationen rein:
mysql_query("SELECT Name FROM samp");
mysql_store_result();
print("debug 1");
new result[512], string[256];
while(mysql_retrieve_row())
{
print("debug 2");
mysql_fetch_field_row("Name", result);
format(string, sizeof(string), "%s\n%s", string, result);
}
print("debug 3");
mysql_free_result();
print("debug 4");
print(string);
ShowPlayerDialog(playerid,temp,DIALOG_STYLE_MSGBOX,"Hi",string,"Ok","");
// EDIT:
Hab' eben 'nen ziemlich blöden Fehler entdeckt, bei mysql_query gehört nicht "SELECT Name FROM samp" sondern "SELECT Name FROM accounts" ..
Jetzt steht im Log folgendes:
Der Dialog wird angezeigt, nur ist der Inhalt leer.
Wie du siehst,"debug 2" wird nie ausgegeben.
Der Code springt also nie in die while Schleife:
while(mysql_retrieve_row())
{
print("debug 2");
mysql_fetch_field_row("Name", result);
format(string, sizeof(string), "%s\n%s", string, result);
}
Dadurch füllt sich auch nie string und du bekommst nur (null) ausgegeben für den String. Ich gehe mal davon aus,dass es definitiv Einträge geben sollte ( Die Tabelle ist also nicht leer ).
Ich weiss jetzt nicht welches Plugin du benutzt,aber änder die mysql_store_result() Zeile in folgendes:
printf("mysql_store_result() = %d",mysql_store_result() );
http://wiki.sa-mp.com/wiki/MySQL#mysql_store_result
Je nachdem welches Plugin du verwendest,gibt es auch das Callback OnQueryError.
http://wiki.sa-mp.com/wiki/MySQL#OnQueryError
Dort könntest du eventuelle Fehler abfangen und dir per print ausgeben.
Zum Beispiel so:
public OnQueryError(errorid, error[], callback[], query[], connectionHandle)
{
printf("OnQueryError(%d,%s,%s)",errorid,error,query);
return 1;
}
//Edit:
Das oben fällt dann wohl weg.
Laut Wiki gehört mysql_fetch_field_row etwas anders.
http://wiki.sa-mp.com/wiki/MySQL#mysql_fetch_field_row
Es müssten also getausch werden bei dir in
mysql_fetch_field_row(result, "Name");
Hast du auch nur 1 Account in der Tabelle ? Sonst müsstest "debug 2" häufiger ausgegeben bekommen.
Vielen vielen vielen Dank, es geht endlich!
Ja, hatte bisher nur einen Account in der Tabelle (zum testen eben), aber es funktioniert (auch mit mehreren Accounts).
Du hast mir echt sehr geholfen, und das System mit dem OnQueryError werd' ich dann auch ab sofort nutzen bevor ich hier anfange zu posten.
Also nochmals Danke!