Brombeermilchtrinker: NEUE FRAGEN

Beitrag lesen

Guten Morgen, dedlfix!

echo $begrüßung;

Ich hoffe, es steht nirgends ein $begrüßung="Nicht schon wieder dieser dumme Brombeermilchtrinker"; *g*

Vielleicht möchtest du mit den Formularwerten noch etwas anderes machen, als sie nur in der Datenbank abzulegen. Zum Beispiel auch noch anzeigen ("Folgende Daten wurden gespeichert: ...").

Wie gesagt, ich möchte derzeit nichts Spezifisches machen. Ich hab einfach angefangen, mich mit dieser PHP-MySql-Kombination auseinanderzusetzen und versuche jetzt, so gut es geht, mir die Sache autodidakt beizubringen. Deshalb bin ich ja auch, sobald es _etwas_ komplizierter wird, gleich so überfordert.

Es ist nicht immer günstig, alles auf einmal und so wie es gerade anfällt zu programmieren. Eine klare Strukturierung und Trennung/Abgrenzung der einzelnen Teilaufgaben erhöht die Wartbarkeit bei komplexer werdenden Scripten.

Das klingt logisch, ja.

Die Magic Quotes haben mit der eigentlichen Aufgabe deines Script nichts weiter zu tun. Sie zu beseitigen ist nur notwendiges Übel. Deswegen empfahl ich, sie aus dem eigentlichen Scriptverlauf auszuklammern und unabhängig von allem anderen am Scriptanfang zu erledigen.

Meinst Du damit, ich soll gleich ganz oben auf der Seite die Variablen in Kombination mit den Magic Quotes holen?

Also so? =>

  
<?php  
if(get_magic_quotes_gpc())  
 {  
 $variable1=stripslashes($_POST['variable1']);  
 $variable2=stripslashes($_POST['variable2']);  
 $variable3=stripslashes($_POST['variable3']);  
 u.s.w.  
 }  
else  
 {  
 $variable1=$_POST['variable1'];  
 $variable2=$_POST['variable2'];  
 $variable3=$_POST['variable3'];  
 }  
?>  

  
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"  
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">  
u.s.w.  

Und dann im Verlauf der Seite jenen PHP-Teil, der sich um die Weiterverarbeitung der Daten kümmert. Habe ich Dich da so richtig verstanden?

Was Dein Beispiel betrifft : Wenn ich mir meine php.info Datei ansehe, steht da : PHP Version 4.4.1, magic_quotes_gpc ON - ON, magic_quotes_runtime OFF - OFF und magic_quotes_sybase OFF - OFF. Wenn ich die Sache richtig verstanden habe, liege ich damit auf der guten/sicheren Seite.

Du musst also nicht den Aufwand treiben, bei den Benutzereingaben zwischen Zahlenwerten und Strings zu unterscheiden und sie unterschiedlich zu quoten.

OK, verstanden habe.

Vermutlich möchtest du ja dann sowieso die Benutzereingaben ignorieren und einen anderen Verlauf im Script nehmen, z.B. anstatt die Daten der Datenbank zu übergeben eine Fehlermeldung ausgeben und/oder sie per Affenformular dem Anwender wieder vor die Füße werfen.

Mit _solchen_ Spielereien muß ich mich noch auseinandersetzen.

Wenn eine neue Variable in einer bedingten Anweisung (if) angelegt wird ist es immer wichtig, alle Verzweigungen zu berücksichtigen. Oder man verwendet bei einfachen bedingten Deklarationen den ternary operator

Hui, der ist cool! :-) Kannte ich noch nicht.

Bei deinem ursprünglichen Beispiel
  $beispielwert = $_POST['beispielwert'];
  $beispielwert = strip_tags($beispielwert);
  ...
lassen sich beide Zeilen zu einer zusammenfassen.
  $beispielwert = strip_tags($_POST['beispielwert']);
  ...

Das hatte ich eh gemcht, ich hab mich auf den Teil in der ELSE-Schleife bezogen.

Warum sollen sie nicht gespeichert werden? Wenn sie jemand in einem HTML-Code-Beispiel verwendet oder Dinge schreibt, die zufällig wie Tags aussehen, müssen sie nicht unbedingt verloren gehen. Du musst nur bei der Ausgabe darauf achten, dass sie mit htmlspecialchars() HTML-gerecht umgeschrieben werden. < als &lt;, > als &gt; und " als &quot; - erledigt der Fall. Es ist eine gute Idee, sich das htmlspecialchars() für die Ausgabe aller nicht direkt im Script notierten Daten anzugewöhnen.

OK, also nimm mal an, ich möchte sowas wie ein Blog machen. Da sollen alle Leser-Kommentare gleich aussehen und ich will nicht, daß jemand mit <font size="12"> oder Ähnlichem da Unruhe stiftet. Gibt also jemand als Wert zB " <font size="9" color="red">Hallo Welt</font> ein, dann soll bei der Ausgabe einfach nur "Hallo Welt" stehen. Das muß doch gehen, oder?

Auf der anderen Seite wiederum möchte ich, daß, wenn jemand einen Kommentar schreibt und da zB. www.meineseite.com vorkommt, dies bei der Ausgabe zu einem Link wird.

Bei der Eingabe von Daten sollte im Vordergrund stehen, sie möglichst roh zu speichern, ohne irgendwelche Ausgabeformatierungen. Deswegen ist es ausreichend, die Benutzerangaben einfach mit mysql_real_escape_string() ins SQL-Statement einzubauen. Damit sind sie erstmal gegen SQL-Injection gesichert.

OK, verstanden habe.

Was zur Sicherung der Ausgabe nötig ist, wird erst bei der Ausgabe und für das dann verwendete Ausgabemedium bewertet und angewendet.
Daten in einem Newsfeed müssen sicherlich anders aufbereitet werden als wenn sie auf der Webseite gezeigt werden sollen. Es wäre ungünstig, sich bereits beim Speichern auf ein bestimmtes Ausgabemedium festzulegen.

Dann stehe ich jetzt aber spätestens dann, wenn ich die Seite für die Datensatzausgabe schreibe, vor dem selben Problem. :-)

Dazu hab ich nebenan schon was gesagt.

Ja, ich weiß. Aber ich hab nicht gewußt, wonach ich jetzt suchen soll.

Ich denke, dass sich zu dem Thema schon mal jemand einen Kopf gemacht hat und sich im Web konkretere Vorschläge als meiner finden lassen.

Ich google und surfe seit Tagen ( anstatt mich meinem Studium zu widmen, ich Tölpel ) ... habe aber bis jetzt nichts gefunden.

Für 2. und 3. kann htmlspecialchars() natürlich nicht auf den gesamten String angewendet werden, weder vorher, da du ihn ja z.B. zum Einbau des <a>-Tags zerstückeln musst, und auch nicht nachher, da sonst das <a href...> verlorenginge. Du musst das also auf die Teilstücke einzeln anwenden.

Das klingt super, aber wenn ich mir dann die entsprechenden Seiten im  PHP-manual oder Handbuch ansehe ( allgemein, nicht nur, was htmlspecialchars() betrifft ), dann muß ich leider feststellen, daß dort Sachen von Leuten erklärt werden, die sich offenbar nicht mehr in die Lage eines Menschen versetzen können, der _kein_ Technikguru ist und vielleicht noch neu in der Materie ist. :-(

Nichts desto trotz war ich gestern natürlich nicht unfleißig und habe mich mal mit preg_replace() und mit ereg_replace() erstmalig beschäftigt. Schau Dir mal meine 2 Beispielseiten an :

Seite 1

Und hier der entsprechende Auszugs-Quelltext von deiser Seite :

  
$liebesbrief=" ... ";  
echo$liebesbrief;  
$liebesbrief2=preg_replace('/Anna/','Helga',$liebesbrief);  
echo$liebesbrief2;  

sowie

  
$paar=" ... ";  
echo$paar;  
$suchmuster[]='/Adam/';  
$suchmuster[]='/Eva/';  
$ersetzung='Mensch';  
$paar2=preg_replace($suchmuster,$ersetzung,$paar);  
echo$paar2;  
$liebesbrief2=preg_replace('/Anna/','Helga',$liebesbrief);  
echo$liebesbrief2;  

Seite 2

Und hier der entsprechende Auszugs-Quelltext von deiser Seite :

  
$text1="..."  
echo $text1;  
$suchmuster='(^| )(www([-]*[.]?[a-zA-Z0-9_/-?&%])*)';  
$ersatz='<a href="http://\\2">\\2</a>';  
$text1_2=eregi_replace($suchmuster,$ersatz,$text1);  
echo$text1_2;  

Also die PHP-Anweisungen der beiden Beispiele von Seite 1 hab ich glaub ich soweit verstanden und erarbeitet. Das von Seite 2 ist einfach aus dem Web abgekupfert. Es funktioniert, ich hab aber keine Ahnung, wieso und wie der reguläre Ausdruck in der Anweisung zu deuten ist. *dummschau*

Aber Du siehst, ich bemühe mich, zu lernen. :-)

In diesem Sinne einen schönen Tag!

Liebe Grüße

Der Brombeermilchtrinker

echo "$verabschiedung $name";

Technokrat! *g* ;-)