"Goto" funktioniert nicht richtig
Sp33dy G0nz4l3s
- php
Hi,
ich habe ein Eingabeformular. Wenn in das Eingabeformular nicht das richtige eingegeben wurde erscheint eine Fehlermeldung. Nun möchte ich, das PHP automatisch wenn es eine Fehlermeldung gibt zu dem Eingabeformular springt. Habe es so probiert:
$jump = "#fehler";
...
if ($fehler) {
$show = true;
}
...
<a name="fehler"></a>
<form action="<?php echo $_SERVER['PHP_SELF']; if ($show) { echo $jump; } ?>" method="post">
Leider funktioniert es noch nicht ganz. Und zwar geht es immer nur dann, wenn zwei mal auf Abschicken geklickt wurde. Ich weiß nicht warum... kann mir jemand weiterhelfen?
Das Script zum testen: http://www.cs-erweiterungen.de/scripts/viewcomments.php
Leider funktioniert es noch nicht ganz. Und zwar geht es immer nur dann, wenn zwei mal auf Abschicken geklickt wurde. Ich weiß nicht warum... kann mir jemand weiterhelfen?
Sieht so aus, als ob PHP kein GoTo kennt oder mag:
http://de3.php.net/manual/de/language.control-structures.php
http://de3.php.net/manual/de/control-structures.alternative-syntax.php
Hi!
Sieht so aus, als ob PHP kein GoTo kennt oder mag:
http://de3.php.net/manual/de/language.control-structures.php
http://de3.php.net/manual/de/control-structures.alternative-syntax.php
Ich glaube, du hast das Posting irgendwie nicht wirklich gelesen.
Es geht hier gar nicht um eine Goto-Funktion, also nicht um eine Sprunganweisung in einer Schleife o.ä..
Dieser Befehl (bzw. Funktion) existiert in einigen Programmiersprachen, sollte aber möglichst nicht verwendet werden, wenn man anständigen Code schreiben will. Eigentlich kann man in allen mir bekannten Sprachen auch ohne Goto auskommen.
Besonders in Basic war das Goto immer sehr schlimm. Das führte unweigerlich zu grauenhaftem Spaghetti-Code.
Hier ist ein interessanter, wenn auch alter, Artikel dazu:
Go To Statement Considered Harmful von Edsger W. Dijkstra.
http://www.acm.org/classics/oct95/
(Falls das jemand noch nicht kennen sollte.)
Schöner Gruß,
rob
Besonders in Basic war das Goto immer sehr schlimm. Das führte unweigerlich zu grauenhaftem Spaghetti-Code.
Hier ist ein interessanter, wenn auch alter, Artikel dazu:
Go To Statement Considered Harmful von Edsger W. Dijkstra.
http://www.acm.org/classics/oct95/
(Falls das jemand noch nicht kennen sollte.)
Mag sein, dass ich GoTo nur darum und deshalb zitiert habe, weil es richtig angewandt OK ist.
Warum wird GoTo daemonisiert? Richtig, weil es oft falsch angewandt wird.
Warum wird GoTo daemonisiert obwaohl es auch richtig angewendet werden kann? Richtig, das ist die Kernfrage, die mehr ueber die Ideologen, die gegen GoTo argumentieren aussagt, als denen lieb sein kann.
Letztlich ist es ein soziales Problem, wenn nicht das zentrale soziale Problem in Europa. Soll man etwas verbieten, wenn es missbraeuchlich angewandt negative Folgen zeitigt?
Soll man das Rauchen verbieten, "Islamophobie", Geschichtsfaelschung, politische Inkorrektheit, "Homophobie", Klimawandel-Skeptizismus, Erdoelkrisenleugnertum, Waldsterbenszweiflerei?
Soziale Probleme kann man nicht mit den Mitteln der IT loesen, sondern nur bearbeiten, also deren Loesungsversuche unterstuetzen.
Gott zum Gruße!
Soll man das Rauchen verbieten, "Islamophobie", Geschichtsfaelschung, politische Inkorrektheit, "Homophobie", Klimawandel-Skeptizismus, Erdoelkrisenleugnertum, Waldsterbenszweiflerei?
Und was hat das jetzt deiner Meinung nach mit der "goto-Thematik" zu tun?
Hättest du nicht wenigstens noch das Deppenwort "Gutmenschentum" irgendwo in
deinem Posting unterbringen können? Bei diesem Mangel an Zusammenhang müsste
das schon drin sein. Dann hätte ich vielleicht auch kurz gemschmunzelt.
Aber so? Na ja...
Enttäuscht, Jan
Hättest du nicht wenigstens noch das Deppenwort "Gutmenschentum" irgendwo in
deinem Posting unterbringen können?
Die Guties sind schuld, zweifelsohne.
Was war denn daran schwer zu verstehen? Dass der Zweck die Mittel heiligt oder was?
Hi!
Was war denn daran schwer zu verstehen? Dass der Zweck die Mittel heiligt oder was?
Offensichtlich waren ja alle Entwickler in den letzten 20 Jahren der Meinung,
daß das Konzept 'Sprungmarken und goto' gestrichen werden kann, weil es
dabei keinerlei Vorteile gegenüber den neueren Konzepten gibt, und es nur
unübersichtlichen Code fördert. Waren diese Entwickler jetzt alle von linken
Hippie-Pädagogen indoktriniert?
Mit deinem "Klimawandel-Erdölknappheit-Waldsterben-gibts-ja-gar-nicht-Gefasel"
,das du in jedem Posting irgendwie unterbringst, hat das überhaupt nichts zu
tun.
Jan
Hello,
also, ich finde solche Sachen, wie "Return" und "Break" und "Exit" usw mitten in Funktionen, Schleifen, Bläcken ganz klasse. Wenn man sich eine saubere Formatierung angewöhnt, kann die Nutzung der Sprungbefehle den Code extrem übersichtlich werden lassen.
Man sollte eben nur immer daran denken, dass man keine unaufgeräumten Objekte, nicht geschlossenen Dateien oder Datenbankverbindungen, volle Resultsets usw hinterlässt.
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
Man sollte eben nur immer daran denken, dass man keine unaufgeräumten Objekte, nicht geschlossenen Dateien oder Datenbankverbindungen, volle Resultsets usw hinterlässt.
Ich sehe die Diskussion auch ein wenig vor dem Hintergrund "Trend zur RAD-SW", also moeglichst billige und doofe Programmierer sollen schnellsmoeglich hochwertige SW erstellen und dabei idealerweise nichts oder nur wenig ueber die technischen Zusammenhaenge wissen.
Sie sollen modelliëren statt programmieren, heisst es da gelegentlich. LOL
Was dabei in der Praxis herauskommt, sieht man am klarsten beim oft mangelhaft entwickelten Datenzugriff und Datendesign.
Spaetestens da kommt dann alles raus.
Was war denn daran schwer zu verstehen? Dass der Zweck die Mittel heiligt oder was?
Offensichtlich waren ja alle Entwickler in den letzten 20 Jahren der Meinung,
daß das Konzept 'Sprungmarken und goto' gestrichen werden kann, weil es
dabei keinerlei Vorteile gegenüber den neueren Konzepten gibt, und es nur
unübersichtlichen Code fördert.
"Alle" Entwickler ja wohl nicht. Und "offensichtlich" ist da gar nichts. Die Perl-Gemeinde bspw. denkt da anders, die lassen den Entwickler machen und versuchen nicht ihn zu schuetzen.
Waren diese Entwickler jetzt alle von linken
Hippie-Pädagogen indoktriniert?
Moment, Hippies und Guties sind ganz andere Kaliber, Hippies sind tolerant und stehen nicht so auf Krieg, Guties dagegen wissen immer was richtig ist und wollen das anderen aufzwingen.
Die Gutie-BEwegung entstand als langsam klar wurde, dass es nichts wird mit kommunistischen und anarchistischen Ideen, da traten die Guties auf den Plan. Oft evangelisch sozialisiert haben sie ihre Wurzeln in den kirchlichen pseudo-lockeren Bewegungen der Siebziger, dazugestossen sind einige Linke, die als "Linksliberale" politische Korrektheit einbrachten.
Aber das nur um ein wenig geschichtlichen Hintergrund zu bilden, fie Sache ist natuerlich schon ein wenig komplizierter, wie alle gesellschaftlichen Gruppen nicht in zwei, drei Saetzen beschrieben werden koennen.
Mit deinem "Klimawandel-Erdölknappheit-Waldsterben-gibts-ja-gar-nicht-Gefasel"
,das du in jedem Posting irgendwie unterbringst, hat das überhaupt nichts zu
tun.
Doch, es ist dieselbe Grundhaltung.
Informier Dich hier mal ein wenig ueber die Natuerlichkeit der Sprungbefehle, habs jetzt nicht ueberprueft, aber wird schon einiges stimmen:
http://de.wikipedia.org/wiki/Sprunganweisung
Letztlich ist alles ein Sprungbefehl. Hopp!
:-
Hi!
Warum wird GoTo daemonisiert? Richtig, weil es oft falsch angewandt wird.
Wenn man allerdings sauber programmiert, dann braucht man goto überhaupt nicht.
Warum wird GoTo daemonisiert obwaohl es auch richtig angewendet werden kann? Richtig, das ist die Kernfrage, die mehr ueber die Ideologen, die gegen GoTo argumentieren aussagt, als denen lieb sein kann.
Ja, es könnte auch angewendet werden, ohne daß man damit Spaghetti-Code produziert. Der entsteht ja auch meist nur beim exzessiven Einsatz von goto.
Es handelt sich aber trotzdem um eine Funktion/Prozedur/Methode/Sprachkonstrukt, was man überhaupt nicht benötigt und womit man viel Mist machen kann.
Aus diesem Grund halte ich es auch für sinnvoll, wenn man diese Funktion bei der Entwicklung einer Programmiersprache erst gar nicht implementiert.
Es wird einfach nicht benötigt.
Das hat auch gar nichts mit Ideologie zu tun. Ich habe einfach noch keinen Fall gesehen, wo man mit Hilfe von goto etwas eleganter gelöst hätte als ohne...
Schöner Gruß,
rob
Aus diesem Grund halte ich es auch für sinnvoll, wenn man diese Funktion bei der Entwicklung einer Programmiersprache erst gar nicht implementiert.
Es wird einfach nicht benötigt.
Einfachheit ist tatsaechlich eine prima Sache, aber wird zumindest bei den Entwicklerwerkzeugen vom Markt nicht angenommen.
Warum ist das wohl der Fall?
Ist das vielleicht gut so?
if ($fehler) {
$show = true;
}...
<a name="fehler"></a>
<form action="<?php echo $_SERVER['PHP_SELF']; if ($show) { echo $jump; } ?>" method="post">
Sowas geht nicht, bearbeite PHP-seitig hochklommende Fehler in einer dafuer bereitgestellten Routine, also nicht mit echo und die.
Lass das arme FORM-Element in Ruhe.
:-
hi,
$jump = "#fehler";
...
if ($fehler) {
$show = true;
}...
<a name="fehler"></a>
<form action="<?php echo $_SERVER['PHP_SELF']; if ($show) { echo $jump; } ?>" method="post">Leider funktioniert es noch nicht ganz.
Natürlich nicht.
Du hast ein Formular an die Adresse /blubb.php geschickt. Beim prüfen fallen dir Fehler auf. Also generierst du _jetzt_ in das _neue_ Dokument, welches du als Antwort auf den Formularequest auslieferst, eine Sprungmarke hinein, und gibst diese Sprungmarke auch in der Formular-action an, /blubb.php#Sprungmarke. Und?
Dieses _neue_ Formular interessiert den Browser jetzt doch noch gar nicht.
Er hat das vorherige Formular abgeschickt, und an dessen Adresse war nichts davon zu merken, dass irgendeine Sprungmarke in der Antwortseite angesteuert werden soll.
Und zwar geht es immer nur dann, wenn zwei mal auf Abschicken geklickt wurde.
Beim zweiten Mal wird jetzt ja auch das _neue_ Formular abgeschickt, und dessen Zieladresse enthält die Information, dass in der Antwortseite eine Sprungmarke angesteuert werden soll.
Ich weiß nicht warum... kann mir jemand weiterhelfen?
Mach dir bitte klar, wie die Vorgänge sind, und warum dein Vorhaben deshalb unlogisch ist.
Wenn du in der Antwortseite eines Formulars eine Sprungmarke ansteuern willst, dann musst du diese Information schon _vorher_, beim Ausliefern eben _dieses_ Formulars, mitgegeben haben.
gruß,
wahsaga
Hello,
Wenn du in der Antwortseite eines Formulars eine Sprungmarke ansteuern willst, dann musst du diese Information schon _vorher_, beim Ausliefern eben _dieses_ Formulars, mitgegeben haben.
oder mit Weiterleitung arbeiten? Das wollte ich neulich schon testen, wo da der Pferdefuss lag...
Mit JavaScript funktioniert es auf jeden Fall
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
hi,
Wenn du in der Antwortseite eines Formulars eine Sprungmarke ansteuern willst, dann musst du diese Information schon _vorher_, beim Ausliefern eben _dieses_ Formulars, mitgegeben haben.
oder mit Weiterleitung arbeiten? Das wollte ich neulich schon testen, wo da der Pferdefuss lag...
Bin mir nicht sicher, ob die Browser dabei einen Hash-Part im URL akzeptieren - hab's auch noch nie ausprobiert.
Ich würde eher den Anker gleich von vornherein der Formular-Zieladresse hinzufügen - man kann ja einen unverfänglichen Ankernamen verwenden, sowas wie #currentpos o.ä.
Und dann wird ein solcher Ankerpunkt eben nur dann dynamisch ins Antwortdokument generiert, wenn ein Fehler vorliegt - dann springt der Browser an diese Position.
Gibt es keinen Fehler, dann auch keinen Anker - Browser springt nirgendwohin, sondern bleibt am Seitenstart.
gruß,
wahsaga
Hello,
Ich würde eher den Anker gleich von vornherein der Formular-Zieladresse hinzufügen - man kann ja einen unverfänglichen Ankernamen verwenden, sowas wie #currentpos o.ä.
Und dann wird ein solcher Ankerpunkt eben nur dann dynamisch ins Antwortdokument generiert, wenn ein Fehler vorliegt - dann springt der Browser an diese Position.
Gibt es keinen Fehler, dann auch keinen Anker - Browser springt nirgendwohin, sondern bleibt am Seitenstart.
Das ist ja eine pfiffige Idee.
Ich hatte Dich erst andersherum verstanden und gedacht, was der Blödsinn denn soll... :-)
Wie ist das denn in den HTML-Spezifikationen geregelt?
Ist es erlaubt, einen Sprungparamter zu übergeben, ohne dass das Dokument das Sprungziel enthält?
Ist sichergestellt, dass das der Browser im Dokument oben stehen bleibt, wenn das Sprungziel nicht vorhanden ist?
Der Vorteil dabei ist, es funktioniert dann ohne Weiterleitung und ohne JavaScript.
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
Bin mir nicht sicher, ob die Browser dabei einen Hash-Part im URL akzeptieren - hab's auch noch nie ausprobiert.
Habe es probiert, es funktioniert super :)
Das war echt eine sehr gute Idee.. habe mir ewig den Kopf darüber zerbrochen wie ich das hinbekommen könnte.
Vielen Dank wahsaga!
Hello,
Habe es probiert, es funktioniert super :)
Das war echt eine sehr gute Idee.. habe mir ewig den Kopf darüber zerbrochen wie ich das hinbekommen könnte.
Siehste!
Du bist gar nicht so blöd, wie wir aussehen:-))
Den Trick merk ich mir auch.
Muss nur noch die Frage der Konformität geklärt werden.
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom