Archiv verlassen und diese Seite im Standarddesign anzeigen : Fehler im Praxisbuch ?
Hallo,
ich habe den Eindruck, dass im Paxsisbuch ein Fehler ist:Praxisbuch - Gästebuch (http://www.selfphp.de/praxisbuch/praxisbuch.php?group=26)
Und zwar in folgenden Zeilen:
//Es wurde auch eine Homepageadresse angegeben - entsprechende Formatierung vornehmen
if(ereg("^([a-zA-Z0-9-]+\.)+([a-zA-Z]{2,4})$",$g_fhome)){
// fehlt in der Angabe der Adresse - hier ergänzen
if(!ereg("^//",$g_fhome)){
$g_fhome="" . $g_fhome;
}
$g_fhome="<a href=" . $g_fhome . " target=_blank>Website</a>";
} else {
$g_fhome="<a href=" . $g_fhome . " target=_blank>Website</a>";
}
Es wird die Eingabe von "http://" nicht toleriert und auch kein Fehlerhinweis erstellt...
...hm, scheint keinen weiter zu stören.
Wie müßte denn eine Validierung eines URLs mittels ereg aussehen?
Ich habe leider den Befehl nicht annähernd gerafft.
Swoosh
25.11.2006, 15:15:49
jo hasst meiner Meinung nach recht
Damir
25.11.2006, 15:41:38
Doch es stoert uns aber leider koennen wir nicht immer direkt antworten. Das Praxisbuch wird momentan überarbeitet, daher bleibt der Fehler bis zum Update auch so stehen... sorry.
Damir
Madokan
29.11.2006, 06:57:55
@RoSt: Ein Fehler ist es nicht es gibt nur keine Meldung, wenn die URL fehlerhaft ist da Sie nicht zu den Pflichangaben zählt! Aber das kann man doch durch eine Erweiterung der if-Abfrage ohne weiteres realisieren. Schau dir mal im Praxisbuch den Abschnitt zu den Kontrollstrukturen an!
Einen Ansatz, wie es aussehen könnte findest du in der E-mail Validation:
...
else {
$error_msg.="<br>Fehlerhafte E-mail!<br>";
}
...
Hinweis: Was die ereg()-Methode betrifft wäre ein gezielter Blick bei den regulären Ausdrücken angebracht!
Liebe Grüße,
Matze K.
P.S.: Sollte noch bedarf bestehen kann ich gerne die Validation, so formulieren das eine Fehlermeldung erscheint. :)
Madokan
29.11.2006, 08:08:08
So ich hab nochmal auf meinen Beispielen im Buch geschaut, da ich diese Aussage nicht wirklich glauben konnte:
Es wird die Eingabe von "http://" nicht toleriert und auch kein Fehlerhinweis erstellt...
Und siehe da im Buch ist alles einwandfrei auch http:// wird zugelassen, nur bei der Umwandlung in die Online-Fassung sind Zeichen abhanden gekommen!!!
Korrekte Origional Fassung (man Beachte den Unterschied in Zeile 2 u. 3:
//Es wurde auch eine Homepageadresse angegeben - entsprechende Formatierung vornehmen
if(ereg("^([a-zA-Z0-9-]+\.)+([a-zA-Z]{2,4})$",$g_fhome)){
//http:// fehlt in der Angabe der Adresse - hier ergänzen
if(!ereg("^http:////",$g_fhome)){
$g_fhome="http://" . $g_fhome;
}
$g_fhome="<a href=" . $g_fhome . " target=_blank>Website</a>";
} else {
$g_fhome="<a href=" . $g_fhome . " target=_blank>Website</a>";
}
Liebe Grüsse,
Matze K.
Edit: Huch ich bin verschoben, damit wird es schwierig die eigenen Posts zu finden.
Danke,
ich werd es mal so ausprobieren, obwohl ich meine, ich hätte es schon so probiert.
Melde mich dann wieder...
@Damir: für wann ist denn das Update geplant?
Nein, nein, nein,
es geht noch immer nicht.
Ich denke es liegt an dem ersten if:
if(ereg("^([a-zA-Z0-9-]+\.)+([a-zA-Z]{2,4})$",$g_fhome))
Hier werden "://" von "http://" nicht tolleriert - oder sehe ich das falsch?
Damit erfolgt die innere Prüfung ob http oder nicht gar nicht mehr, sondern ein URL mit "http://" ist immer falsch.
Madokan
01.12.2006, 17:26:25
@RoSt: Ich versuch es nun mit einem Dateianhang - nicht das im Forum Zeichen geschluckt wurden. ;)
Liebe Grüsse.
Matze K.
Damir
01.12.2006, 17:51:51
@Damir: für wann ist denn das Update geplant?
Nagel mich bitte nicht fest wenn es dann doch nicht zeitlich kommt, also SELFPHP 5.0 wird voraussichtlich Januar/Februar erscheinen. Vorher sind allerdings noch andere Projekte zu erledigen - danach kommt die 5er Version.
Madokan
01.12.2006, 21:52:05
@Damir: Yup festnageln macht auch keine Freude. ;)
Liebe Grüsse,
Matze K.
@RoSt: Ich versuch es nun mit einem Dateianhang - nicht das im Forum Zeichen geschluckt wurden. ;)
Nein, Zeichen wurden nicht geschluckt. In der Datei steht genau die gleiche Zeile wie im Post:
if(ereg("^([a-zA-Z0-9-]+\.)+([a-zA-Z]{2,4})$",$g_fhome)) {
Und deshalb hier nochmal meine bereits gestellte Frage:
Kann der gepostete ereg Ausdruck bei einem String der mit "http://" beginnt WAHR liefern?
Wenn ja, an welchem Parameter könnte ich das denn ablesen???
Wenn nein, wie müssten die Parameter aussehen, damit er ein wahr liefert.
Vielen Dank. Vorallen an Madokan, der sich sehr müht, aber ich habe den Eindruck wir posten aneinander vorbei.
Madokan
05.12.2006, 18:53:15
@RoSt: Ich verstehe es aus folgendem Grund nicht der Reguläre Ausdruck hat keine Probleme mit http:// - da er sich nicht um http:// kümmert!
Ich habe meinen Testdurchlauf, wie folgt begonnen:
1. buch.php im Browser geöffnet.
2. Auf den Hyperlink Beitrag Schreiben geklickt.
3. In die Eingabemaske die Felder ausgefüllt und beim Home-Textfeld folgenden Zeile eingetragen: http://www.domain.de
4. Eintrag wurde im Gästebuch hinterlegt und voila der Hyperlink ist auch vorhanden!
----
Nun habe ich anschließend das ganze auch ohne http:// ausgetestet und auch hier ein einwandfreies Ergebnis erhalten.
1. buch.php im Browser geöffnet.
2. Auf den Hyperlink Beitrag Schreiben geklickt.
3. In die Eingabemaske die Felder ausgefüllt und beim Home-Textfeld folgenden Zeile eingetragen: www.domain.de
4. Eintrag wurde im Gästebuch hinterlegt und voila der Hyperlink ist auch vorhanden! Das fehlende http:// wurde durch das Skript hinzugefügt bzw. hier ging es durch den regulären Ausdruck!
Abgesehen davon ist der Reguläre Ausdruck nur für folgendes zuständig:
//Es wurde auch eine Homepageadresse angegeben - entsprechende Formatierung vornehmen
Die Abfrage sollte somit nur für das hinzufügen eines möglicherweise fehlenden - http:// und sonst nichts!
Die Angabe http:// für sich gesehen erfüllt den vorliegenden regulären Ausdruck nicht! Daher geht es auch ohne Umwege in den else Abschnitt!
Siehe:
//Es wurde auch eine Homepageadresse angegeben - entsprechende Formatierung vornehmen
if(ereg("^([a-zA-Z0-9-]+\.)+([a-zA-Z]{2,4})$",$g_fhome)){
//http:// fehlt in der Angabe der Adresse - hier ergänzen
if(!ereg("^http:////",$g_fhome))
{
$g_fhome="http://" . $g_fhome;
}
$g_fhome="<a href=" . $g_fhome . " target=_blank>Website</a>";
}
else
{
$g_fhome="<a href=" . $g_fhome . " target=_blank>Website</a>";
}
//Ende - Prüfung
Hinweis: Eine Validation der Homepage-URL habe ich nicht durchgeführt, da diese Angabe nicht zu den wesentlichen Feldern gehört. Daher gibt es auch nur für die E-Mail Angabe eine exakte Überprüfung und eine entsprechende Fehlermeldung!
Was jedoch das Filtern von http:// für sich gesehen betrifft sollte es kein Problem darstellen die Abfrage anzupassen. :)
Solltest du ansonsten mit regulären Ausdrücken experimentieren wollen empfehle ich dir folgende Tools:
- Regex_Coach0.9.0
- Expresso 2.1
Hiermit lässt sich der Ausdruck übrigens auch Testen!
Liebe Grüsse,
Matze K.
Madokan
05.12.2006, 19:08:44
Regulärer Ausdruck:
^([a-zA-Z0-9-]+\.)+([a-zA-Z]{2,4})$
Erläuterung:
^ -> Anfang der Zeichenkette
([a-zA-Z0-9-]+\.) -> Zugelassene Zeichen a-zA-Z0-9 und - (muss mindestens einmal, kann aber auch wiederholt vorkommen - Beispiel: domain)
([a-zA-Z]{2,4}) -> Zugelassen Zeichen a-zA-Z (Zeichenanzahl zwischen 2 und 4 - Beispiel: de oder info)
$ -> Ende der Zeichenkette
Vielleicht kann dies eine kleine Hilfestellung sein!
Liebe Grüße,
Matze K.
Vielen Dank, jetzt ist einiges klarer.
Wenn aber keine Validierung der URL erfolgen soll, hätte dann ja auch folgendes gelangt:
//Es wurde auch eine Homepageadresse angegeben - entsprechende Formatierung vornehmen
//http:// fehlt in der Angabe der Adresse - hier ergänzen
if(!ereg("^http:////",$g_fhome))
{
$g_fhome="http://" . $g_fhome;
}
$g_fhome="<a href=" . $g_fhome . " target=_blank>Website</a>";
Ich war davon ausgegangen, dass die URL systematisch auf Gültigkeit geprüft werden soll.
Hier ist übrigens ein schönes kleines Tutorial für Unwissende wie mich in Punkto reguläre Ausdrücke. (http://www.regenechsen.de/phpwcms/index.php?regex_dt_tb)
Madokan
06.12.2006, 13:19:53
@Rost: Yup oder man schaut im Praxisbuch:
http://www.selfphp.de/praxisbuch/praxisbuch.php?group=22
;)
Zu:
Wenn aber keine Validierung der URL erfolgen soll, hätte dann ja auch folgendes gelangt:
Das ist so nicht richtig - es erfolgt eine Validierung, aber nur bei Schreibweisen ohne http://!
(Beispiel: www.domain.de - korrekt / www.. - nicht korrekt)
Liebe Grüße,
Matze K.
Ach so. Wie wäre es dann damit oder so ähnlich
if(!ereg("^http:////",strtolower($g_fhome))){
if(ereg("^([a-zA-Z0-9-]+\.)+([a-zA-Z]{2,4})$",$g_fhome)){
$g_fhome="<a href=http://" . $g_fhome . " target=_blank>Website</a>";
} else {
$error_msg.="<br>Fehlerhafte URL!<br>";
}
} else {
if(ereg("^http:////([a-z0-9-]+\.)+([a-z]{2,4})$",strtolower($g_fhome))){
$g_fhome="<a href=" . $g_fhome . " target=_blank>Website</a>";
} else {
$error_msg.="<br>Fehlerhafte URL!<br>";
}
}
...es geht bestimmt noch schöner...
Madokan
06.12.2006, 17:53:28
@RoSt: Wie ist das mit verschlimm-besserungen. ;)
Ich denke, wenn es für dich so hinhaut kannst du es so Einsätzen!
Leider lässt deine Anpassung nun keine der folgenden schreibweisen mehr durch:
http://www.domain.de
http://www.test.de
etc.
Meinst damit bist du wirklich gut beraten?
Liebe Grüsse,
Matze K.
Leider lässt deine Anpassung nun keine der folgenden schreibweisen mehr durch:
http://www.domain.de
http://www.test.de
etc.
Meinst damit bist du wirklich gut beraten?
Nein, natürlich nicht. Ich hatte gestern leider keine Gelegenheit zu testen.
Für mich sah/sieht es nicht nur logisch aus sondern auch als würde es funktionieren.
Ich tappe völlig im Dunkeln.
Ich hätte folgendes erwartet:
"^(http:////) <== validiert das http:// am Anfang (btw. müssten die "/" nicht mit "\" escaped werden ?)
([a-z0-9-]+\.)+ <== danach können Buchstaben etc. kommen im Block mit einem Punkt und das min 1x oder öfter.
([a-z]{2,4})$" <== am ende müssen 2-4 Buchstaben stehen (Top-Level-Domain)
Und warum macht er's nicht?
Madokan
08.12.2006, 14:32:49
@RoSt:
...sondern auch als würde es funktionieren.
Dem ist nicht so, wie du siehst!
Ich tappe völlig im Dunkeln.
Du solltest nochmal deine Abfragen und die reg-Ausdrücke prüfen und dir die Frage stellen, was genau die reg-Ausdrücke bewirken sollen!
Liebe Grüße,
Matze K.
vBulletin® v3.8.3, Copyright ©2000-2012, Jelsoft Enterprises Ltd.