dedlfix: Code schnipsel selber fertig geschrieben

Beitrag lesen

echo $begrüßung;

Also derzeit habe ich eine recht kleine funktion, die an sich aber ziemlich gut arbeitet,
einziges Schönheitsfehler ist, das die Umleitung mit referer arbeitet,

Ja, der Nutzen des Extra-Redirect-Scripts offenbart sich mir nicht. Du hast damit zwei Redirects unmittelbar aufeinanderfolgend. Ein einzelner erfüllte auch das Ziel.

Habe es auch grade mal getestet, ob nach einem Post noch der zurück Button geht,
geht auch nicht. Nach einem absenden merkt man nicht einmal, das man umgeleitet und wieder zurück geschickt wird.

Du hast ja auch nur ein POST-und-Fertig-Formular, kein Affenformular oder eine Zwangsvorschau zwecks Verwirrung von Formular-Bots.

So wie es jetzt aussieht, ist das Script von der Funktion so einfach wie zuverlässig,
nur kann ich das natürlich nicht beurteilen, daher verlinke ich mal auf die
Scripte und Dateien, die das ganze verarbeiten.
Vielleicht kannst du ja mal drüberfliegen und schauen, ob es so in Ordnung ist.

Dein Code sieht so aus wie bei mir, als ich mit PHP anfing: unübersichtlich. Ein großes HTML-Template, das an den Stellen, an denen eine Ausgabe berechnet werden muss, unterbrochen wird. Das PHP selbst ist auch wieder mit HTML-Ausgaben versetzt. Ich habe man drübergeschaut, und mir ist nichts Kritisches aufgefallen. Das kann aber auch daran liegen, dass es sich gut in dem Wirrwar versteckt hat. Hier nur mal ein Ausschnitt, den ich kommentieren möchte.

~~~php $Kommentator = $_POST["Kommentator"];
 $Kommentar = $_POST["Kommentar"];
 $Kdateiname = $_POST["Kdateiname"];

  
Unnötiges Umkopieren. Jemand, der den Code ansehen soll, muss sich nun merken, dass in den Variablen nichts anderes als die unbehandelte Benutzeringabe steckt. Wenn du $\_POST["..."] an den Stellen nähmest, an denen du die neue Variable verwendest, sähe man sofort, was das für ein Wert ist und muss nicht erst in seinem Gedächtnis oder dem Code davor nachsehen.  
  
 ~~~php
$Kommentar = str_replace("\r", "", $Kommentar);  
 $Kommentar = str_replace("\n", "", $Kommentar);

str_replace() nimmt als Parameter auch Arrays an:

$Kommentar = str_replace(array("\r", "\n"), "", $Kommentar);

Jede Zeile weniger erhöht die Übersichtlichkeit. (Vorausgesetzt man erzeugt nicht aus vielen Zeilen eine Monsterzeile.)

$Kommentar = stripcslashes($Kommentar); // Slash ersetzen

Wieso die Variante mit dem c? Wenn es stripslashes() ohne c werden sollte, warum steht das dann erst hier und ohne zu prüfen, ob die Magic Quotes aktiv sind? Wenn du ein Problem mit den Magic Quotes hast, dann eleminiere sie einmalig am Scriptanfang.

$Kommentar = " " . $Kommentar; // Leerzeichen hinzufügen

Solche Kommentare sind überflüssig. Dass da ein Leerzeichen hinzukommt, sieht man unzweifelhaft am Code. Man sieht aber nicht, warum es hinzukommen soll. Wenn, dann wäre das kommentierungswürdig.

$Kommentar = substr($Kommentar, 0, 500); // Zeichenanzahl begrenzen

Das würde ich an der Stelle nicht tun. Wenn es dir zu lang ist, kannst du es immer noch bei deiner händischen Kontrolle kürzen. So verlierst du nur möglicherweise interessante Stellen aus dem Roman, den da vielleicht jemand eingetippt hat.

Wenn man mal vom EVA-Prinzip ausgeht, hast du bisher den V-Teil behandelt. (Und das strip(c)slashes(), das aber zum E-Teil gehört.) Nun mischst du auch noch den A-Teil in deine Variablen (die beiden rawurlencode()-Zeilen):

~~~php $datum = date("d.m.y H:i",time()); // Datum
 $Kommentar2 = $Kommentar;
 $Kommentator2 = $Kommentator;
 $Kommentar = rawurlencode ($Kommentar); // Umlaute und andere
 $Kommentator = rawurlencode ($Kommentator); // Zeichen konvertieren

  
und schreibst dann solch eine unübersichtliche Monsterzeile:  
  
 $text ="Kommentar freischalten (Link anklicken!)\r$Kommentar2\r";  
 $text .= "Datum: $datum. - Datei: \"$Kdateiname\" - Autor: $Kommentator2\n\n $url/kommentar/schreibe.php?Kdateiname=$Kdateiname&Kommentar=$Kommentar&Kommentator=$Kommentator";  
  
Das geht übersichtlicher. Alle Zeilen ab $datum kann man wie folgt ersetzen:  
  
  ~~~php
$text = [link:http://www.php.net/manual/en/function.sprintf.php@title=sprintf]([link:http://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.heredoc@title=<<<MAILTEXT]  
Kommentar freischalten (Link anklicken!)  
%s  
Datum: %s. - Datei: "%s" - Autor: %s  
  
 %s/kommentar/schreibe.php?Kdateiname=%s&Kommentar=%s&Kommentator=%s  
[link:http://www.php.net/manual/en/language.types.string.php#language.types.string.syntax.heredoc@title=MAILTEXT],  
   $Kommentar,  
   date('d.m.y H:i'),  
   $_POST['Kdateiname'],  
   $_POST['Kommentator'],  
   $url,  
   urlencode($_POST['Kdateiname']),  
   urlencode($Kommentar),  
   urlencode($_POST['Kommentator']));

urlencode() ist die an der Stelle (im Query-String) richtige Funktion. rawurlencode() kommt zum Einsatz, wenn ein Wert im Path-Teil eingefügt werden soll.

Ausgabeformatierungen gehören in die Ausgabe. Lass in deinen Variablen die Roh-Werte stehen, also die gegebenenfalls geprüften und verarbeiteten Werte, aber ohne sie einer spezifischen Ausgabeformatierung zu unterziehen. Dann sparst du dir auch soche Teile wie $variable2 = $variable; nur um den unbehandelten Wert ebenfalls noch aufzuheben. Die Ausgabeformatierung erfolgt idealerweise erst direkt zur Ausgabe und ohne Zwischenvariablen. Außerdem ist $variable2 nicht unbedingt ein sprechender Variablenname, aus dem man den Sinn dieser Variable erkennen kann.

echo "$verabschiedung $name";