- Warum deklarierst du deinen query-String dort oben? Es kann doch sein, dass du ihn garnicht brauchst. Deklariere den String erst, wenn du ihn auch tatsächlich brauchst, sonst verschwendest du Ressourcen.
- Die if-Abfrage kannst du vereinfachen (Siehe unten).
- Zu deinem INSERT-Problem: Setzte GunID als PRIMARY_KEY (Wichtig!) und verwende dann INSERT IGNORE INTO.
- Verwende nicht SpielerName(), sondern speichere den Spielernamen einmalig in eine Variable. Dann musst du den Namen nicht x-Mal getten.
- Verwende mysql_format() und %e, wenn es schon existiert! Dein Script dort oben ist gefährdet bzgl. SQL Injections!
- Warum eine Stringgröße von 200? Du brauchst doch nicht so viel! Verwende http://www.zeichenzähler.de/, um die Länge deiner Strings zu bestimmen. Hier: 81 (= Länge von String in mysql_format()) - 4 (%i + %e = 4 Zeichen) + 24 (= MAX_PLAYER_NAME) + 2 (weaponID ist max. 2 Zeichen lang) = 103.
Also:
OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) {
switch(dialogid) {
case CASE_DIALOG_BLACKLIST: {
if(response) {
if(isnumeric(inputtext)) {
new weaponID = strval(inputtext);
if(weaponID >= 1 && weaponID <= 46 && (weaponID < 19 || weaponID > 21)) {
new query[103];
mysql_format(MySQLconnection, query, sizeof(query), "INSERT IGNORE INTO `blacklisted_Guns` (`GunID`, `Adminname`) VALUES ('%i', '%e');", weaponID, SpielerName(playerid));
mysql_tquery(MySQLconnection, query, "", "");
} else {
ShowPlayerDialog(playerid,DIALOG_GUNBLACKLIST,DIALOG_STYLE_INPUT,"Gun-Blacklist","Du hast eine ungültige Waffen-ID eingegeben.\nGib eine neue, gültige Waffen-ID ein.","Fertig","Abbrechen");
}
} else {
SendClientMessage(playerid, GRAU, "* Gebe eine nummerische WaffenID ein.");
}
} else {
SendClientMessage(playerid, GRAU, "* Gun-Blacklist beendet.");
}
}
}
}