Schalte mal den MySQL Debug Modus an und poste was im Log steht.
Es wird irgendwo sicher nochmal ein INSERT Query auf die "accounts" Tabelle angewendet.
[SAMMELTHREAD] Kleine Scripting Fragen
- Rafelder
- Unerledigt
Dein Problem konnte durch einen User gelöst werden? Bedank dich bei ihm indem du seinen Beitrag als Hilfreich markierst sowie einen Daumen oben dalässt
Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!
Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
-
-
Hab den Fehler gefunden...
das mit den "accounts" war schon richtig aber ich hatte darunter den nächsten Query was noch in eine andere Tabelle den Spieler einfügen soll, dieses bin ich grad am umlegen.Dank dir @Jeffry, ich dachte anfangs das ich bei der MySQL Struktur etwas falsches gemacht habe
Habe noch eine Frage, vielleicht könntest dabei kurz helfen.
Ich möchte die IP adresse des Users splitten... ( bin noch neu was der Funktion split angeht...)Würde das folgendermaßen funktionieren?
Codestock SplitIP(playerid) { new SplitIP[3], ip[16]; GetPlayerIp(playerid, ip, sizeof(ip)); if(strval(SplitIP[1] && SplitIP[2] == ip)) return //was würde er returnen? }
oder wäre das mit sscanf besser?
-
gibt es eine mysql_GetString variante für R39?
-
oder wäre das mit sscanf besser?
sscanf ist hier besser, das ist auf sowas optimiert.
gibt es eine mysql_GetString variante für R39?
Kann man zwar machen, ist aber aus Performancegründen nicht zu empfehlen, da man dann am Sinn des Plugins vorbei arbeitet. Nutze lieber die Cache-Funktionen in einem separaten Callback.
-
stock LoadGlobals()
{
new strVersion[64], strGameMode[32];
format(strVersion, sizeof(strVersion), "hostname %s", Servername());
format(strGameMode, sizeof(strGameMode), "%s %s", GameModeName(), Version());
SendRconCommand(strVersion);
SetGameModeText(strGameMode);
}stock Version()
{
new str[50];
format(str, sizeof str, "%s", mysql_GetString("server", "version", "id", "1"));
mysql_format(handle, str, sizeof(str), "SELECT id FROM server WHERE version = '%e'", PlayerInfo[playerid][pName]);
return str;
}stock Servername()
{
new str[50];
format(str, sizeof str, "%s", mysql_GetString("server", "name", "id", "1"));
return str;
}wie würde man dies in R39 auslesen?
-
sscanf ist hier besser, das ist auf sowas optimiert.
Wäre das dann so?
Codenew ip[16], ergebnis[10]; GetPlayerIp(playerid, ip, sizeof(ip)); sscanf(".", "ip<i>[3]", ergebnis);
@Mystogan warum erstellst du nicht einfach paar defines?
Wäre das eventuell nicht einfacher? z.B. könntest du Version einfacher ändern und musst nicht in der Datenbank umändern... -
Wäre das dann so?
Codenew ip[16], ergebnis[10]; GetPlayerIp(playerid, ip, sizeof(ip)); sscanf(".", "ip<i>[3]", ergebnis);
@Mystogan warum erstellst du nicht einfach paar defines?
Wäre das eventuell nicht einfacher? z.B. könntest du Version einfacher ändern und musst nicht in der Datenbank umändern...
Ja hast ja recht haha
ich will aber ingesamt 32 varchars/Strings auslesen, und das waren einfach irgendwelche die ich als beispiel dar legte .. -
wie würde man dies in R39 auslesen?
Je nach dem wie genau es aussehen soll, eventuell so:
mysql_pquery(handle, "SELECT name, version FROM server WHERE id = 1;", "OnServer");Und dann in einem extra Public:
forward OnServer();
public OnServer()
{
if(cache_get_row_count() == 0) return 1;new strVersion[64], strGameMode[32];
cache_get_field_content(0, "name", strGameMode, handle);
cache_get_field_content(0, "version", strGameMode, handle);
format(strGameMode, sizeof(strGameMode), "%s %s", strGameMode, strVersion);
SetGameModeText(strGameMode);
format(strVersion, sizeof(strVersion), "hostname %s", strGameMode);
SendRconCommand(strVersion);
return 1;
}Wäre das dann so?
Warum willst du die IP eigentlich splitten?
-
Warum willst du die IP eigentlich splitten?
Weil ich die IP's aus er Datenbank vergleichen möchte und die letzten 3 Ziffern ja meist anders sind.
Deshalb möchte ich bis zum 3. Punkt gesplittet haben und aus der Datenbankvergleichen.
Nur ich habe bis jetzt nicht viele Funktion von split gescriptet, deshalb bräuchte ich da etwas hilfeKurzes beispiel:
IP-registriert: 127.0.0.1
er connected neu aber mit ner anderen ip: 127.0.0.2
bis zur rot markierten Zahl möchte ich aus der Datenbank vergleichen... -
Ok.
Splitte die IP so:
new zahl[4];
sscanf(ip, "p<.>iiii", zahl[0], zahl[1], zahl[2], zahl[3]);Dann hast du dort die einzelnen Zahlen drin stehen und kannst die vergleichen.
Bei vielen ändern sich übrigens die hinteren beiden Ranges der IP.
-
Ok.
Splitte die IP so:
new zahl[4];sscanf(ip, "p<.>iiii", zahl[0], zahl[1], zahl[2], zahl[3]);Dann hast du dort die einzelnen Zahlen drin stehen und kannst die vergleichen.
Bei vielen ändern sich übrigens die hinteren beiden Ranges der IP.
muss ich vorher format verwenden?
Wenn ich es printe werden nur "." angezeigt.Codenew query[56], zahl[4], ip[16]; GetPlayerIp(playerid, ip, sizeof(ip)); sscanf(ip, "p<.>iiii", zahl[0], zahl[1], zahl[2], zahl[3]); format(query, sizeof(query), "SELECT * FROM tabelle WHERE IP = '%s.%s.%s'", zahl[0], zahl[1], zahl[2]); mysql_function_query(dbhandle, query, true, "CheckTabelle", "i", playerid);
oder vergleiche ich den split grad komplett falsch?
//Edit:
verbessert von:
format(query, sizeof(query), "SELECT * FROM accounts WHERE IP = '%s.%s.%s'", zahl[0], zahl[1], zahl[2]);zu:
format(query, sizeof(query), "SELECT * FROM accounts WHERE IP = '%i.%i.%i'", zahl[0], zahl[1], zahl[2]);jedoch wird nun folgendes geprintet:
-
Lass dir die IP mal per print ausgeben. Ist dort eventuell auch alles 0?
Falls nicht, versuche es hiermit:
http://forum.sa-mp.com/showthread.php?t=362764Code dazu:
strexplode(zahl, ip, "."); -
Hey! Habe mal wieder eine Frage und zwar: Ich möchte z.B /kick 0000000000000000 <- diese ganzen 0 verweigern bzw. umwandeln in eine 0 nicht mehrere.
Hoffe man versteht mich.Mit freundlichen Grüßen
Ukthi -
new id = strval(params);
Das würde die 00000000 in params auf eine 0 in id reduzieren (von String auf Integer = strval).
Alternativ kannst du auch sscanf nutzen.
-
Lass dir die IP mal per print ausgeben. Ist dort eventuell auch alles 0?
Ja habe es geprintet, es wird aber nicht 0 angezeigt.
Folgendes habe ich gemacht:Codestock SpielerIP(playerid) { new getip[16]; GetPlayerIp(playerid,getip,sizeof(getip)); return getip; }
Codenew query[56], zahl[4]; sscanf(SpielerIP(playerid), "p<.>iiii", zahl[0], zahl[1], zahl[2], zahl[3]); printf("Zahl 1: %i", zahl[0]); printf("Zahl 2: %i", zahl[1]); printf("Zahl 3: %i", zahl[2]); printf("Zahl 4: %i", zahl[3]); format(query, sizeof(query), "SELECT * FROM tabelle WHERE IP = '%i.%i.%i.'", zahl[0], zahl[1], zahl[2]); printf(query); mysql_function_query(dbhandle, query, true, "NextStep", "i", playerid);
So habe ich es versucht, auch die Zahlen printen lassen aber es ist immer nur 0...
//Edit:
Habe mal was versucht, ich weiß sscanf wäre besser aber hier bekomme ich Werte und nicht ständig 0,
Codenew query[56], zahl[4][16]; split(SpielerIP(playerid), zahl, '.'); printf("Zahl 1: %i", zahl[0]); printf("Zahl 2: %i", zahl[1]); printf("Zahl 3: %i", zahl[2]); printf("Zahl 4: %i", zahl[3]); format(query, sizeof(query), "SELECT * FROM tabelle WHERE IP = '%i.%i.%i.'", zahl[0], zahl[1], zahl[2]); printf(query); mysql_function_query(dbhandle, query, true, "NextStep", "i", playerid);
Hier wird mir folgendes geprintet:
-
Hmm, aber warum Splitten ?
Als String prüft er doch auch komplett die IP also auch die letzten Zahlen. -
Als String prüft er doch auch komplett die IP also auch die letzten Zahlen.
ja wenn du aber die IP "manipulierst" oder router neustartest verändert sich meist die letzten 3 Zahlen.
So da bringt dann der stringvergleich nichts denn der würde ja prüfen ob die jetztige IP exakt mit der registrierten IP übereinstimmt. Der würde dann bei den letzten Range IP nicht mehr weiterprüfen...
Deshalb möchte ich die IP gesplittet haben und dann bis auf die letzte Range prüfen ...Nur beim splitten komme ich nicht weiter...
-
So habe ich es versucht, auch die Zahlen printen lassen aber es ist immer nur 0...
Nutzt du das Plugin?
Habe mal was versucht, ich weiß sscanf wäre besser aber hier bekomme ich Werte und nicht ständig 0,
format(query, sizeof(query), "SELECT * FROM tabelle WHERE IP = '%i.%i.%i.'", zahl[0], zahl[1], zahl[2]);
zu:
format(query, sizeof(query), "SELECT * FROM tabelle WHERE IP = '%i.%i.%i.'", strval(zahl[0]), strval(zahl[1]), strval(zahl[2]));
Da die Zahlen hier Strings sind (split-bedingt). Oder %i zu %s. -
Nutzt du das Plugin?
Nein, aber kann ich ja ändern
Das Problem hierbei ist, dass der Downloadlink down ist von sscnaf...
http://forum.sa-mp.com/showthread.php?t=570927Gibt es eine andere Seite oder so wo ich das herunterladen kann?
-
Nein, aber kann ich ja ändern
Das erklärt es. Die Funktion steht nur im Plugin zur Verfügung.
Download: http://forum.sa-mp.com/showthread.php?t=602923
Beachte, dass du dann die sscanf Funktion aus deinem Code entfernen musst.
-