Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

[PHP] Unterschiedliche Seiten anzeigen abhängig von Auswahl

Empfohlene Antworten

Veröffentlicht

Hallo Leute,

ich habe hier ein doch mehr oder minder seltsames Problem.

Ich habe eine Folge von Formularen, die assistenen-like per "weiter" nacheinander aufgerufen werden. Nun passiert es aber mal, dass manche Teile nicht abgefragt werden muessen. Das heisst, wenn jemand nur einen Monitor bestellt, muessen wir nicht unbedingt fragen, welche Software da drauf soll. ;)

Also habe ich ein wenig gebastelt und mit Hilfe von PHP es tatsaechlich hingebogen, dass das Formular, was nur bei der Bestellung eines Computers relevant ist, nur wirklich dann anzuzeigen, wenn eben ein Computer ausgewaehlt wurde. Das ganze fusst darauf, dass ich im Submit-Feld einen Eventhandler "onclick" verwendet habe und der Teil, der dann hinter =" kommt wird je nach Situation per Templates reingeparst. Da natuerlich eine Variable dafuer abgefragt werden muss, wird der Computer ueber einen andere Submit-Button ausgewaehlt, welcher die Seite erneut laedt und somit die Variable uebergibt. Der "weiter"-Button hat einen neuen Wert und wird schliesslich auf "weiter" geklickt, geht er, dank des Javascriptes auf die ausgewaehlte Seite.

So, das funktioniert alles. Warum schreibe ich dann, ich haette ein Problem?

Ganz einfach. Ich bin wieder an einem Punkt, an dem ich das machen muss und habe quasi die gesamte Vorgehensweise reproduziert. Im HTML-Quelltext sind auch alle Platzhalter mit den korrekten Werten gefuellt, aber mir sagt das Java-Script dauernd, dass Fehler auf der Seite waeren. Somit umgeht er den Event-Handler und greift auf das <Form action="..."> zurureck, welches auf "$_SERVER[php_SELF]" steht und somit die Seite erneut laedt.

Allerdings habe ich alles uebernommen, das Java-Script 1:1 uebernommen und auch keine syntaktischen Fehler gefunden. Was kann das sein? :confused:

Original geschrieben von Hawkeye

Im HTML-Quelltext sind auch alle Platzhalter mit den korrekten Werten gefuellt, aber mir sagt das Java-Script dauernd, dass Fehler auf der Seite waeren. Somit umgeht er den Event-Handler und greift auf das <Form action="..."> zurureck, welches auf "$_SERVER[php_SELF]" steht und somit die Seite erneut laedt.

Allerdings habe ich alles uebernommen, das Java-Script 1:1 uebernommen und auch keine syntaktischen Fehler gefunden. Was kann das sein? :confused:

*mal in die Glaskugel schau*

Hmmm... Poste doch mal den Quelltext von der Seite, wo der JavaScript Fehler ist. (weil ein Fehler muss da sein, auch der IExplorer erfindet keine...)

Vielleicht kann man dir dann helfen ;)

Hm,

ganz übler Stil. ;)

Du willst etwas Clientseitig beeinflussen, was eigentlich auf dem Server ablaufen soll.

Was ist wenn der User kein Javascript aktiviert hat oder absichtlich die falsche Seite aufruft?

Du kannst auch die Ausgabe verschiedener Screens in einem Skript handeln. Was bei massiven Gebrauch in Spaghetticode enden kann.

Oder du arbeitest mit "Redirects"

27.9. Wie erzeuge ich mit PHP einen Redirect auf eine andere Seite?

http://www.dclp-faq.de/q/q-http-redirect.html

Gruß Jaraz

  • Autor

Okay.

Hier nun erstmal die Seite in gekuerzter Form:


<!doctype html public "-//W3C//DTD HTML 4.0 //DE">
<html>
<head>
<title>Formular</title>
<script type="text/javascript">
<!--
function weiter(ziel)
{
document.main.action = ziel;
document.main.submit();
}
//-->
</script>

</head>

<body bgcolor="#FFCC66" topmargin="0" leftmargin="0">

<form action="{FORM_ACTION}" method="POST">

[...]

<table cellpadding="4" width="100%" bgcolor="#FFFF99" cellspacing="0" border="0">
<tr>
<td width="15%" bgcolor="#006666" valign="top">
<font class="drei">Sonstiges/<br>Besonderheiten:</font>
</td>
<td>
<textarea name="Sonstiges" cols="50" rows="5">{SONST}</Textarea>
</td>
</tr>
<tr>
<td width="15%" bgcolor="#006666" valign="top">
<font class="drei"> </font>
</td>
<td valign= "top">
Antragssteller = Angemeldeter Benutzer?
<input type="submit" name="BUTTON[0]" value ="Ja">
<input type="submit" name="BUTTON[1]" value ="Nein">
</td>
</tr>
</table>

<table cellpadding="5" cellspacing="0" border="0" width="100%">
<tr>
<td width="15%">
 
</td>
<td width="15%">
<input type="Reset" value=" Daten löschen ">
<td>
<input type="submit" name="BUTTON[2]" value=" weiter " onclick="{WEITER}">
</td>
</tr>
</table>

</form>
</body>
</html>
[/PHP]

So, und zum Verstaendnis noch die Dinge, die ich per PHP in {weiter} und {FORM_ACTION} parse und wie:

[php]
[...]

$tpl = new IntegratedTemplate("../templates");
$tpl->loadTemplatefile("daten.html" ,true, true);

[...]

$tpl->setVariable("FORM_ACTION", $_SERVER[PHP_SELF]);

if($_POST[BUTTON][0]=="Ja")
{
$tpl->setVariable("WEITER","weiter('../scripts/overview.php');");
}

if ($_POST[BUTTON][1]=="Nein")
{
$tpl->setVariable("WEITER","weiter('../scripts/auswahl_antr.php');");
}

$tpl->show();

[...]

Also wenn du schon mit Templates arbeitest, was natürlich die beste Lösung ist, ;) verstehe ich nich wofür der onClick Handler ist.

Gruß Jaraz

Original geschrieben von Hawkeye


document.main.action = ziel;
document.main.submit();
...
<form action="{FORM_ACTION}" method="POST">
[/php]

[/b]

hmmm... Wenn ich das richtig verstehe, sprichst du mit "document.main" dein Formular an, oder? Aber dein Formular heisst nicht so.

Probier mal folgendes:

[php]
<form name="main" action="{FORM_ACTION}" method="POST">

Sicher bin ich mir allerdings auch nicht. :confused: Falls ich mich irre, korrigiert micht bitte!

  • Autor
Original geschrieben von Jaraz

Also wenn du schon mit Templates arbeitest, was natürlich die beste Lösung ist, ;) verstehe ich nich wofür der onClick Handler ist.

Gruß Jaraz

Nunja. Wie bereits gesagt, ist das, was in die Templates geschrieben wird, abhaengig von der Auswahl. Da die natuerlich in Variablen gefuellt wird, muss gezwungenermassen die Seite nach der Auswahl neu geladen werden, da die Variablen sonst noch nicht vorhanden sind.

Wenn ich jetzt in {FORM_ACTION} die Seite reinschreiben will, die ausgewaehlt wird, wird trotzdem zu beginn immer die Seite erneut geladen und beim naechsten Druecken einen der Buttons eben die Seite geladen, die bei der Auswahl davor haette geladen werden sollen - egal, ob ich "Ja" oder "Nein" anklicke. Klar, schliesslich ist die Variable ja nach dem Reload auf "Ja" oder "Nein" gesetzt.

Auch wenn es jetzt funktioniert. Wenn du keinen Bock hast, brauchste nicht zu antworten. :D

Würde es dann nicht reichen die Auswahl nicht über Buttons, sondern Radio Buttons oder Checkboxen zu realisieren und dann je nachdem welcher Radio Button gewählt wurde auf die entsprechende Seite weiterzuleiten?

Gruß Jaraz

  • Autor
Original geschrieben von Jaraz

Auch wenn es jetzt funktioniert. Wenn du keinen Bock hast, brauchste nicht zu antworten. :D

:D :D :D

Würde es dann nicht reichen die Auswahl nicht über Buttons, sondern Radio Buttons oder Checkboxen zu realisieren und dann je nachdem welcher Radio Button gewählt wurde auf die entsprechende Seite weiterzuleiten?

Natuerlich wuerde das reichen, aber die Werte werden dann doch erst in die Variablen geschrieben, wenn das Dokument abgeschickt wird. Dass heisst, vorher kann ich keine Fallunterscheidung machen, denn er kann ja keine Werte " Auswahl='Ja' " ueberpruefen, bis ich den Submit-Button gedrueckt habe. ...und dann ist es schon zu spaet...

...oder wuesstest Du da etwas, was mir das ermoeglicht? Der Punkt ist ja, dass die Seite nach der Auswahl mind. einmal neu geladen werden muss, damit klar ist, was ausgewaehlt wurde.

Original geschrieben von Hawkeye

Der Punkt ist ja, dass die Seite nach der Auswahl mind. einmal neu geladen werden muss, damit klar ist, was ausgewaehlt wurde.

Aber wenn die Seite sowieso neu geladen wird, könntest du doch auch das Ziel des Formulars ändern, oder?

Vielleicht sollten wir da Sonntag in ner ruhigen Minute drüber sprechen. Ich glaube wir reden aneinander vorbei. :D

  • Autor
Original geschrieben von Jaraz

Vielleicht sollten wir da Sonntag in ner ruhigen Minute drüber sprechen. Ich glaube wir reden aneinander vorbei. :D

Ich vermute auch. :D

Jo, lass Sonntag da mal drueber quatschen. ;)

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.