|
|
Java-Quelltext |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
} else if(cmd.startsWith("comment")) { // Start der Funktion System.out.println(" CMD"); if(client.isAdministrator()) { // WQir splitten nun nach ":" String[] parameter = arg.split(":"); System.out.println("COUNT " + parameter.length); if(parameter.length != 2) { client.sendButlerMessage(channel.getName(), "Bitte die Funktion folgendermaßen benutzen: /comment [Nick]:[Text]"); } else { String nickname = parameter[0]; String comment = parameter[1]; // Schritt 1: Nickname überprüfen: PoolConnection pcon = ConnectionPool.getConnection(); PreparedStatement ps = null; String temp_nick = null; try { Connection con = pcon.connect(); Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery("SELECT `name` FROM `accounts` WHERE `name`='" + nickname + "' LIMIT 1"); while(rs.next()) { temp_nick = rs.getString("name"); break; } } catch(SQLException e) { if(ps != null) { try { ps.close(); } catch (SQLException ex) { /* Do Nothing */ } } pcon.close(); } if(temp_nick == null) { client.sendButlerMessage(channel.getName(), "Der angegebene Nickname existiert nicht."); } else { // Schritt 2: Comment eintragen wenn Comment-text valide // Hier könnten noch weitere überprüfungen stattfinden(?) if(comment.length() <= 5) { client.sendButlerMessage(channel.getName(), "Bitte Kommentar eingeben (Mindestens 5 Zeichen)!"); } else { SimpleDateFormat date_format = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss"); // Müsstest du ggf. noch anpassen String time = date_format.format(new Date()); pcon = ConnectionPool.getConnection(); ps = null; try { Connection con = pcon.connect(); // Warum nutzen wir hier "temp_nickname" anstatt "nickname"? // Da "nickname" über der DB geprüft wird und die richtige schreibweise bei "temp_nickname" // ausgegeben wird... So kann ein Nickname auch im Command nur klein geschrieben werden // Mom muss mal nach CONCAT() suchen / googeln ps = con.prepareStatement("UPDATE `accounts` SET `comment`=CONCAT(?, `comment`) WHERE `name`=? LIMIT 1"); ps.setString(1, "#_°>" + client.getName() + "|/w "<°_: " + comment + " (" + time + ")."); ps.setString(2, temp_nick); ps.executeUpdate(); //ps.executeQuery(); client.sendButlerMessage(channel.getName(), "Dein Kommentar wurde erfolgreich bei °>"+ temp_nick + "|/w "<° eingetragen."); } catch(SQLException e2) { e2.printStackTrace(); } finally { if(ps != null) { try { ps.close(); } catch(SQLException e3) { /* Do Nothing */ } } pcon.close(); } } } } } else { // Wenn keine Adminrechte, dann info an den Nutzer client.sendButlerMessage(channel.getName(), "Du hast nicht genügend Rechte um diesen Befehl zu benutzen."); System.out.println("Comment ERROR: Access denied"); } // ende |
Benutzer, die sich für diesen Beitrag bedankt haben:
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Blizzard« (19. Februar 2013, 12:29)
Zitat
1. Bevor man sowas postet, hätte man wenigstens Kommentare wie '// Mom
muss mal nach CONCAT() suchen / googeln' entfernen können.
Zitat
2. Ich würde mehr return;'s benutzen statt immer 'nen else. Übersichtlichkeit ftw.
Zitat
3. Wozu die umständliche Überprüfung ob der Nickname existiert? Schau dir meinen Code an.

Zitat
In deinem Code könnten keine weiteren Doppelpunkte in der Message
gemacht werden. Dann würde nämlich der Fehler erscheinen, dass man die
Funktion nicht richtig anwendet obwohl man dies tut.
Zitat
6. Beim Start werden Nickname, Passwort etc. im Server
zwischengespeichert und wenn man sich ausloggt entsprechend geupdated.
Wozu dann das Update der Datenbankverbindung? So hätteste dir auch die
Mühe/Zeit beim Ergoogeln der concat Funktion erspart.
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Blizzard« (19. Februar 2013, 12:29)
Benutzer, die sich für diesen Beitrag bedankt haben: