[JS & PHP] Antwoord laten staan

Pagina: 1
Acties:

  • Paters
  • Registratie: Februari 2003
  • Niet online
In index.php wordt een vraag gesteld aan de bezoeker. Na het beantwoorden van de vraag en op de submit button gedrukt te hebben, wordt er een pagina (onder de vraag) geopend in een cel van index.php.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<SCRIPT LANGUAGE="JavaScript">

function check() 
{
if(document.form.vraag1.options[0].selected) {window.location="index.php?action=pagina1.htm";}
if(document.form.vraag1.options[1].selected) {window.location="index.php?action=pagina2.htm";}
}
</script>

<table width="570" border="0" cellpadding="0" cellspacing="0">
    <tr> 
      <td width="570" height="208" valign="top"><p> 
        <form name="form">
           <select name="vraag1">
             <option>Maak uw keuze</option>
             <option>Particulier</option>
             <option>Bedrijf</option>
           </select>
           <input name="submit" type="button" value="submit" onclick="check();" />
        </form>
      </td>
    </tr>

<tr> 
<td height="18" valign="top"> 
<?php  

$actionfile = "$action";  

if (file_exists($actionfile))  
{  
include("$actionfile");  
}  
else  
{  
include("leeg.htm");  
}  

?>
</td>
</tr>

Het werkt perfect op 1 ding na. Ik wil dat, wanneer een pagina in de cel wordt geopend, het antwoord van de bezoeker blijft staan. Het is nu namelijk zo dat index.php ververst wordt, en daardoor staat de bovenste optie ("Maak uw keuze")weer in beeld.

Ik wil liever niet gebruik maken van cookies aangezien de keuze bij een volgend bezoek nog te zien is. Tevens lijkt me ook niet heel netjes om het op te slaan op de server [php].

Is het mogelijk dat index.php niet ververst wordt terwijl er wel een pagina wordt geopend in een cel van index.php? of moet ik het toch met cookies of antwoorden opslaan op server gaan doen?

Verwijderd

Dat deel nieuwe pagina laten schrijven in een <div> element misschien ?

edit:

Dan moet je natuurlijk beide mogelijkheden reeds voorzien in je eerste pagina, aangezien je geen nieuwe gegevens meer kunt gaan halen via php ...

Mischien toch niet zo'n mooie oplossing :p

[ Voor 62% gewijzigd door Verwijderd op 17-07-2004 03:15 ]


  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 10:34
Meer iets voor P&W, maar zelf doe ik dat soort dingen meestal zo:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
//array met alle waarden & namen van keuzelijstje
$options = array ('' => 'maak uw keuze', '1' => 'Particulier', '2' => 'Zakelijk';

echo '<select name="selectionName">';
foreach ($options as $value => $option)
 {
  /*als de postwaarde van dit formulier gelijk is aan de waarde van de optie
  dan wordt "selected" */
  $selected = ($_POST['selectionName'] == $value) ? ' selected="selected"' : '';
  /* echo de optie */
  echo '<option value="' .$value .'"' .$selected .'>' .$option ."</option>\n";
 }
echo '</select>';


[edit:
Ow ok, ik zie nu dat je niet post maar JS gebruikt om te redirecten. In dat geval moet je natuurlijk de conditie veranderen, dus:
PHP:
1
2
3
4
if ( ($option == 'Zakelijk' && $action == 'pagina1.htm') || 
     ($option == 'Particulier' && $action == 'pagina2.htm') 
   ) //* etc.
 { $selected = 'selected' )


Dit kan natuurlijk wat handiger, maar je snapt wat ik bedoel...

[ Voor 58% gewijzigd door T-MOB op 17-07-2004 08:41 ]

Regeren is vooruitschuiven


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 22:39

crisp

Devver

Pixelated

Om te beginnen je PHP: maak gebruik van de superglobals; begin met de get-parameter uitvragen bovenin je pagina:

PHP:
1
$actionfile = isset($_GET['action'])? $_GET['action'] : '';


dan je formulier; het is helemaal niet nodig om JS te gebruiken in deze opzet:

HTML:
1
2
3
4
5
6
7
8
<form action="index.php">
  <select name="action">
    <option>Maak uw keuze</option>
    <option value="pagina1.htm"<?=$actionfile=='pagina1.htm'?' selected':'';?>>Particulier</option>
    <option value="pagina2.htm"<?=$actionfile=='pagina2.htm'?' selected':'';?>>Zakelijk</option>
  </select>
  <input type="submit" value="submit" />
</form>


en dan je include; zoals je het nu doet heb je een levensgroot veiligheidsgat; ik kan nu in principe elk bestand van je harde schijf gaan opvragen.
Maak een array met daarin de mogelijke waarden en check of de opgevraagte pagina daarin voorkomt:

PHP:
1
2
3
4
5
6
$validpages = array('pagina1.htm', 'pagina2.htm');
if (in_array($actionfile, $validpages)) {
  include($actionfile);
} else {
  include('leeg.htm');  
}

Intentionally left blank


  • Paters
  • Registratie: Februari 2003
  • Niet online
ojee....mijn voorbeeld is een versimpeling van de werkelijkheid. Aangezien ik niet veel verstand heb van php, had ik gehoopt dat met een kleine aanpassing het mogelijk zou zijn dat de index.php niet zou worden ververst. Een stap later is namelijk dat er een aantal invoer velden komen te staan waar mee gerekend moet worden plus dat er een aantal pagina's moeten worden geopend. .

m.a.w. is er geen mogelijkheid om een pagina in cel van index.php te openen zonder dat index.php wordt ververst?

edit: Iig bedankt voor jullie suggesties

[ Voor 5% gewijzigd door Paters op 17-07-2004 14:39 ]


Verwijderd

Paters schreef op 17 juli 2004 @ 14:38:
m.a.w. is er geen mogelijkheid om een pagina in cel van index.php te openen zonder dat index.php wordt ververst?
Je zult moeten bepalen wat je wilt. Je wilt dat iem een keuze maakt, de keuze die gemaakt is zichtbaar blijft in een pagina die daarna getoond wordt.

Je kunt dit geheel serverside(PHP) doen of clientside(JS) of een combi.
Je manier met JS voor het doorgeven van de keuze zakelijk of particulier is totaal niet nodig als je ook PHP kunt gebruiken. zie ook de post van crisp.

Ikzelf zou kiezen voor een grotendeels PHP oplossing, omdat ik daar meer in thuis ben. Bovendien vind ik de handling van form-variabelen in PHP stukken handiger dan via JS. Wil je geen cookies of sessions oid gebruiken om data van de ene naar de andere pagina door te geven dan kun je ook heel makkelijk hidden input velden daarvoor gebruiken. Ik zou er ook niet voor kiezen om de keuze van de voorgaande pagina te laten staan, want wat gebeurt er als iem in stap 4 bv particulier op zakelijk zet en op submit klikt?

  • Paters
  • Registratie: Februari 2003
  • Niet online
Verwijderd schreef op 17 juli 2004 @ 15:31:
[...]


Je zult moeten bepalen wat je wilt. Je wilt dat iem een keuze maakt, de keuze die gemaakt is zichtbaar blijft in een pagina die daarna getoond wordt.

Je kunt dit geheel serverside(PHP) doen of clientside(JS) of een combi.
Je manier met JS voor het doorgeven van de keuze zakelijk of particulier is totaal niet nodig als je ook PHP kunt gebruiken. zie ook de post van crisp.

Ikzelf zou kiezen voor een grotendeels PHP oplossing, omdat ik daar meer in thuis ben. Bovendien vind ik de handling van form-variabelen in PHP stukken handiger dan via JS. Wil je geen cookies of sessions oid gebruiken om data van de ene naar de andere pagina door te geven dan kun je ook heel makkelijk hidden input velden daarvoor gebruiken. Ik zou er ook niet voor kiezen om de keuze van de voorgaande pagina te laten staan, want wat gebeurt er als iem in stap 4 bv particulier op zakelijk zet en op submit klikt?
Het zijn losse vragenlijstjes. voorbeeld:

vraag 1: Particulier of Bedrijf?
vraag 2: Kopen of Verkopen?
[submit]

(wanneer antwoorden zijn: Particulier en Kopen dan worden de volgende vragen geopen)
Vraag 3: Hoog BTW of Laag BTW?
Vraag 4: Aankoopbedrag?
[submit]

antwoord: Aankoopbedrag * BTW


Zoals bovenstaande moet de bezoeker uiteindelijk op zijn scherm krijgen, zonder dat zijn antwoorden verdwijnen. Wanneer de klant nu zegt dat hij wil verkopen, dan kan hij op submit drukken en wordt de pagina met vraag3 en 4 niet geladen.

[ Voor 4% gewijzigd door Paters op 19-07-2004 13:14 ]


Verwijderd

zou't niet handig zijn als je gewoon eerst de variabelen die een post formulier verstuurd te verwerken voordat je je formulier opbouwt?
Pagina: 1