anpera.net https://anpera.dyndns.org/phpbb3/ |
|
Verlängerte Posts https://anpera.dyndns.org/phpbb3/viewtopic.php?f=43&t=2768 |
Seite 1 von 1 |
Autor: | Auric [ Mi 16 Aug, 2006 12:57 ] |
Betreff des Beitrags: | Verlängerte Posts |
Mahlzeit! Nach einigem hin- und herüberlegen habe ich nun meine Chatlängen erweitert. Da sich zunächst das problem auftat, das in VARCHAR eben nicht mehr als 255 Zeichen reinpassen und TEXT bei irgendwelchen Scherzbolden auf dem Server seeeeehr ungemütlich werden kann und dazu auch noch weitaus unperformanter ist, kam ich dann auf die Lösung: Teilen und Zusammenfügen. Diese variante unterstützt nun etwas mehr als 500 Zeichen, also etwa doppelt so viel, wie die Ausgangslage. Allerdings lässt sich das auch im Prinzip beliebig erweitern... man braucht nur mehr Felder in der DB und muss dann die Zerlegung und Verkettung anpassen. Doch genug Theorie, hier nun also die Umsetzung für die 500-Zeichen Variante: Zunächst einmal muss ein weiteres Feld in DB, das erstellt man per: $this->bbcode_second_pass_code('', ' ALTER TABLE `commentary` ADD `comment_2` VARCHAR( 255 ) NOT NULL AFTER `comment` ;') Danach geht es an die PHP-Dateien, was auch nicht weiter wild ist, da nur die Funktionen addcommentary() und viewcommentary() in der common.php betroffen sind, also erstmal öffne common.php! Suche: [php]$sql = "INSERT INTO commentary (postdate,section,author,comment) VALUES (now(),'$section',".$session[user][acctid].",\"$commentary\")";[/php] ersetze mit: [php]if(strlen($commentary)<=255) { $sql = "INSERT INTO commentary (postdate,section,author,comment) VALUES (now(),'$section',".$session['user']['acctid'].",\"$commentary\")"; } else { $sql = "INSERT INTO commentary (postdate,section,author,comment,comment_2) VALUES (now(),'$section',".$session['user']['acctid'].",'".substr($commentary,0,255)."','".substr($commentary,255)."')"; }[/php] Damit werden die Posts zerlegt, wenn sie länger als 255 Zeichen sind... Suche: (in der funktion viewcommentary - ist direkt unter dem großen Query...) [php]$x=0; $ft="";[/php] Füge DAVOR ein: [php]$row['comment'] .= $row['comment_2'];[/php] Das setzt den Kommentar dann wieder zusammen... Suche: (ebenfalls in der viewcommentary...) [php]<input name='insertcommentary[$section]' size='40' maxlength='".(255-$tll)[/php] Ersetzte mit: [php]<input name='insertcommentary[$section]' size='40' maxlength='".(510-$tll)[/php] Das erweitert die Eingabeleiste auf die entsprechende Länge Hinweis: Hier wird nur die maximale Anzahl eingebbarerZeichen verändert, nicht aber die Größe des Eingabefeldes selbst. Das lässt sich mit dem size-Attribut ändern (wie ihr oben seht steht es so auf 40) Gut, das wäre dann schon alles... im allgemeinen eine recht simple, aber sehr effektive Modifikation, wenn man längere Texte ohne größere Risiken oder Performanceverluste haben möchte - meine User lieben es zumindest. Auric ![]() |
Autor: | Taikun14 [ Mi 16 Aug, 2006 13:26 ] |
Betreff des Beitrags: | |
Wunderbar ![]() Hattest aber n kleinen Fehler drin wenn man das ganze $sql dings wegmacht ![]() Suche: [php] $sql = "INSERT INTO commentary (postdate,section,author,comment) VALUES (now(),'$section',".$session[user][acctid].",\"$commentary\")"; db_query($sql) or die(db_error(LINK)); return true; [/php] ersetze mit: [php] if(strlen($commentary)<=255) { $sql = "INSERT INTO commentary (postdate,section,author,comment) VALUES (now(),'$section',".$session['user']['acctid'].",\"$commentary\")"; } else { $sql = "INSERT INTO commentary (postdate,section,author,comment,comment_2) VALUES (now(),'$section',".$session['user']['acctid'].",'".substr($commentary,0,255)."','".substr($commentary,255)."')"; } db_query($sql) or die(db_error(LINK)); return true; [/php] Aber sonst Perfekt, danke^^ |
Autor: | Auric [ Mi 16 Aug, 2006 13:43 ] |
Betreff des Beitrags: | |
Stimmt, da habe ich zuviel ersetzte Lassen... istz nun auch oben berichtigt! |
Autor: | Eliwood [ Mi 16 Aug, 2006 16:45 ] |
Betreff des Beitrags: | |
Auric hat geschrieben: [..] und TEXT bei irgendwelchen Scherzbolden auf dem Server seeeeehr ungemütlich werden kann [...]
*Eliwood murmelt was von "maxlenght" als Hindernis und substr als Prüfer für die zu langen Texte... ![]() Ich weiss nicht, braucht text (oder tiny, medium, long) nicht weniger Speicherplatz als die gleiche Länge in varchar nachzubauen? oO |
Autor: | Devilzimti [ Do 17 Aug, 2006 12:35 ] |
Betreff des Beitrags: | |
AUA! Wieso so kompliziert? 1. Den Datentyp auf TEXT umstellen 2. Eine kleine if-Abfrage mit strlen() oder einfach nur substring() benutzen um die maximale Laenge des Kommentars zu ermitteln. 3. das maxlength attribut hochstellen Perfomant, einfach, sauber, sicher, cool, toll, geil, hot, im Trend, wohltuend, entspannend, ergegend.... was weiss ich |
Autor: | Montekar [ Do 17 Aug, 2006 13:26 ] |
Betreff des Beitrags: | |
Das hab ich mir auch überlegt als ich den ersten Post gelesen hab... |
Autor: | Lestat [ Do 17 Aug, 2006 14:15 ] |
Betreff des Beitrags: | |
Da ist Auric wohl übers Ziel hinausgeschossen.. Manchmal sieht man eben den Wald vor lauter Bäumen nicht. Ich hab ja auch schon 'ne Funktion in die Admingrotte gebaut, um einem Spieler das goldene Ei abzunehmen.. ![]() |
Autor: | Laserian [ Mi 21 Mär, 2007 11:11 ] |
Betreff des Beitrags: | |
Ich hätte da zum Thema Postlänge noch ein kleines Problem. Erstmal die Erläuterung des Problems^^. Wir haben bei uns am Server die große Chatbox zum Auswählen. Nun die Spieler haben sich erst über die Kürze der Posts "beschwert". Daher haben wir die Chatbox reingenommen für längere Posts, allerdings ist das Problem dass die Posts nun ich glaub irgendwas um 60000 Zeichen lang werden können und das will ich begrenzen auf etwa 5000 maximal. Mit der einfachen Chatzeile ist das ja alles kein Problem, aber wie ichs bei der Chatbox einstellen kann übersteigt mein Wissen. Mfg Laserian |
Autor: | xatchemx [ So 15 Apr, 2007 17:18 ] |
Betreff des Beitrags: | |
So ich hab das eingebaut und jetzt aber einen großen fehler-.- wen dort jetzt jemand ein kommentar schreib steht dort immer: $this->bbcode_second_pass_code('', 'Spurenleser Aragorn sagt: "Wie geht es ihrer Familie werter Sir Christoph?comment') dort steht also immer ein comment hinter -.- wie bekomm ich das comment da weg? edit fehler behoben fuer alle die den gleichen haben/haben werden hier die loesung: ersetze: [php]if(strlen($commentary)<=255) { $sql = "INSERT INTO commentary (postdate,section,author,comment) VALUES (now(),'$section',".$session['user']['acctid'].",\"$commentary\")"; } else { $sql = "INSERT INTO commentary (postdate,section,author,comment,comment_2) VALUES (now(),'$section',".$session['user']['acctid'].",'".substr($commentary,0,255)."','".substr($commentary,255)."')"; } [/php] durch: [php]if(strlen($commentary)<=255) { $sql = "INSERT INTO commentary (postdate,section,author,comment_2) VALUES (now(),'$section',".$session['user']['acctid'].",\"$commentary\")"; } else { $sql = "INSERT INTO commentary (postdate,section,author,comment_2) VALUES (now(),'$section',".$session['user']['acctid'].",'".substr($commentary,0,255)."','".substr($commentary,255)."')"; } [/php] |
Autor: | Auric [ So 15 Apr, 2007 17:25 ] |
Betreff des Beitrags: | |
Sicher das du alles richig eingebaut hast? Steht das "comment" auch schon in der DB immer hintendran? In deinem Source vom Server konnte ich den Einbau gar nicht finden, so lässt sich also nix sagen, wenn du das spiel lokal oder so testes. |
Autor: | xatchemx [ So 15 Apr, 2007 17:30 ] |
Betreff des Beitrags: | |
auric ich hab nen test server deshalb kannste des auf dem wo du gekuckt hast nicht sehen weil er nicht der testserver is ![]() aber die loesung habe ich im post vor deinem schon geschrieben,, |
Autor: | Harthas [ So 15 Apr, 2007 17:47 ] |
Betreff des Beitrags: | |
xatchemx... Schreib mal mehr als 255 Zeichen und du wirst eine Fehlermeldung erhalten. Das dort oben ist garantiert keine Lösung, die den Fehler findet und entfernt. Beziehungsweise macht es nur einen weiteren Fehler. |
Autor: | Eliwood [ So 15 Apr, 2007 18:40 ] |
Betreff des Beitrags: | |
Laserian hat geschrieben: Ich hätte da zum Thema Postlänge noch ein kleines Problem.
Erstmal die Erläuterung des Problems^^. Wir haben bei uns am Server die große Chatbox zum Auswählen. Nun die Spieler haben sich erst über die Kürze der Posts "beschwert". Daher haben wir die Chatbox reingenommen für längere Posts, allerdings ist das Problem dass die Posts nun ich glaub irgendwas um 60000 Zeichen lang werden können und das will ich begrenzen auf etwa 5000 maximal. Mit der einfachen Chatzeile ist das ja alles kein Problem, aber wie ichs bei der Chatbox einstellen kann übersteigt mein Wissen. Mfg Laserian Damit: http://ch2.php.net/substr http://ch2.php.net/strlen ![]() |
Autor: | Auric [ So 15 Apr, 2007 23:25 ] |
Betreff des Beitrags: | |
Na ja, Eli - die Funktionen sind zwar für die überprüfung auf dem Server dann ganz praktisch, aber beim Client kannst du das trotzdem noch nicht regeln. Ich glaube, die möglichkeiten, die HTML biten (maxrows oder so) sind nicht ganz so präzise, so das da was verloren gehen könnte. Möglich wäre noch die überprüfung per JS... Kevz hat glaube ich mal einen "Verbleibende Zeichen"-Counter geschrieben... denn könnte man ja modifizieren/erweitern. @xatchemx: Also was der query nun genau bringen soll weiß ich auch nicht. und schreib doch für Leute, die dir helfen wollen mal nen Link zu deinem Testserver in die Sig (falls er nicht lokal ist). by the way? stand jetzt eigentlich immer "comment" in dem DB-Feld? |
Autor: | xatchemx [ Mo 16 Apr, 2007 03:25 ] |
Betreff des Beitrags: | |
den test server hab ich ya schonmal gesagt ôo is'n verbnotener deshalb bin ich da nur noch zum testen^^ Aber ich schreib ihn in die sig ôo yaya ich weis, ich bin dumm >.< oehm aber koennte mir trotzdem jemand helfen?Den bei dem test server geht die source nicht ôo |
Autor: | Auric [ Mo 16 Apr, 2007 14:55 ] |
Betreff des Beitrags: | |
Auric hat geschrieben: [...] by the way? stand jetzt eigentlich immer "comment" in dem DB-Feld?
|
Seite 1 von 1 | Alle Zeiten sind UTC + 1 Stunde |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |