[PHP] Variabelen doorgegeven tussen forms zonder database

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb verschillende stappen nodig in 1 PHP form pagina. Ik heb dit allemaal gecodeerd en geef variabelen door d.m.v. de hidden tag. Toch loopt er iets mis in de laatste stap, de formulierelementen die daar ingevuld moeten worden verschijnen niet in de automatische mail die verzonden wordt.

Ik zoek dus naar een oplossing voor de volgende situatie :

- gebruiker geeft op het formulier enkele velden in
- gebruiker klikt op volgende
- velden van de vorige stap worden bijgehouden in het script en gebruiker moet extra velden invullen
- gebruiker klikt op bevestig
- alle velden die de gebruiker in beide stappen heeft ingevuld verschijnen in de automatische mail die verzonden wordt

Hieronder de code of heeft er iemand een betere oplossing (zonder database, cookies of sessies liefst)

PHP:
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
if (!isset($submit) && !(noform_var)) {
echo "<h2>Reservatieformulier</h2>";
echo "<br>";
 } 


// als er niet op submit is gedrukt, of als er wel op is gedrukt maar niet alles ingevoerd is 
if (!$_POST['submit']  || $_POST['submit'] && (!$_POST['naam'] || !checkmail($_POST['mail'])) )
{ 
    if ($_POST['submit'] && (!$_POST['naam'] || !checkmail($_POST['mail'])))   
    { 
        echo "Je bent gegevens vergeten in te vullen. Ook kan het zijn "; 
        echo "dat je een verkeerd emailadres hebt ingevuld.<p>"; 
    } 
     if(!$_POST['bevestig']) {  // stap1
    // form + tabel 
    echo "<table width=\"400\" class=\"tekst\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">"; 
        echo "<form method=\"POST\" ACTION=\"reservatie.php\">"; 
      
    // reeds klant 
    echo "<tr><td><b>Reeds klant?</b></td></tr>"; 
    echo "<tr><td><input type=\"radio\" name=\"klant\" value=\"1\">Ja</td></tr>"; 
    echo "<tr><td>";
    echo "Klantnummer: ";
    echo "<input type=\"text\" name=\"klantnummer\" value=\"" . $_POST['klantnummer'] . "\"></td></tr>"; 
    echo "<tr><td><input type=\"radio\" name=\"klant\" value=\"2\">Nee</td></tr>"; 
      
    // space 
    echo "<tr><td>&nbsp;</td></tr>"; 
    
     // dier 
    echo "<tr><td><b>Dier dat verzorgd moet worden: </b></td></tr>"; 
    echo "<tr><td><input type=\"radio\" name=\"dier\" value=\"1\">Hond</td></tr>";  
    echo "<tr><td>";
    echo "Reeds ICare lid? (dit geeft recht op 10% korting op de uitlaatdienst en thuisoppas)<br />Lidnummer: ";
    echo "<input type=\"text\" name=\"icarenummer\" value=\"" . $_POST['icarenummer'] . "\"></td></tr>"; 
    echo "<tr><td><input type=\"radio\" name=\"dier\" value=\"2\">Kat</td></tr>"; 
    echo "<tr><td><input type=\"radio\" name=\"dier\" value=\"3\">Knaagdier</td></tr>"; 
    echo "<tr><td><input type=\"radio\" name=\"dier\" value=\"4\">Andere</td></tr>"; 
    echo "<tr><td><input type=\"text\" name=\"andere\" value=\"" . $_POST['andere'] . "\"></td></tr>"; 
      
    | KNIP andere formulierelementen |  
   
    echo "<tr><td>&nbsp;</td></tr>"; 
    echo "<tr><td><input type=\"submit\" name=\"submit\" value=\"Volgende\"></td></tr>"; 
      
    // sluit form + tabel 
    echo "</form>"; 
    echo "</table>"; 

}

} 
// stap2
else 
{      

   
             $klant = $_POST['klant'];
             $klantnummer = $_POST['klantnummer'];
             $dier = $_POST['dier'];
             $icarenummer = $_POST['icarenummer'];
             $andere = $_POST['andere'];
             ......
             $noform_var = 1;
             
             if($dier = 1) { // hond gekozen
             
             // naam 
             echo "<tr><td><b>Gegevens hond: </b></td></tr><br /><br />";
             echo "<tr><td>Ras: </td></tr><br />"; 
             echo "<tr><td><input type=\"text\" name=\"hond_ras\" value=\"" . $_POST['hond_ras'] . "\"></td></tr><br />"; 
             echo "<tr><td>Naam: </td></tr><br />"; 
             echo "<tr><td><input type=\"text\" name=\"hond_naam\" value=\"" . $_POST['hond_naam'] . "\"></td></tr><br />"; 
             echo "<tr><td>Leeftijd: </td></tr><br />"; 
             echo "<tr><td><input type=\"text\" name=\"hond_leeftijd\" value=\"" . $_POST['hond_leeftijd'] . "\"></td></tr><br /><br />";   
             echo "<tr><td>Geslacht: </td></tr><br />"; 
             echo "<tr><td><input type=\"radio\" name=\"hond_geslacht\" value=\"1\">Reu</td></tr><br />"; 
             echo "<tr><td><input type=\"radio\" name=\"hond_geslacht\" value=\"2\">Teef</td></tr><br /><br />"; 
             
             | KNIP andere formulierelementen | 
             
             
             }
            

// form + tabel 
    echo "<table width=\"400\" class=\"tekst\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">"; 
        echo "<form method=\"POST\" ACTION=\"reservatie.php\">";      

   
    // button 

    echo "<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;<input type=\"submit\" name=\"bevestig\" value=\"Bevestig\"></td></tr>"; 
?>
     
             

<input type='hidden' name='klant' value='<?php echo $_POST['klant'];?>'> 
<input type='hidden' name='klantnummer' value='<?php echo $_POST['klantnummer'];?>'> 
<input type='hidden' name='dier' value='<?php echo $_POST['dier'];?>'> 
<input type='hidden' name='icarenummer' value='<?php echo $_POST['icarenummer'];?>'> 
<input type='hidden' name='andere' value='<?php echo $_POST['andere'];?>'> 
.....
<?php
      
    // sluit form + tabel 
    echo "</form>"; 
    echo "</table>";        

} 

if($_POST['bevestig']) 
{
                 
             //          
             $hond_ras = $_POST['hond_ras'];
             
      
    $inhoud_mail = "===================================================\n"; 
    $inhoud_mail .= "Ingevuld reservatieformulier\n";
    $inhoud_mail .= "===================================================\n\n"; 
    
$inhoud_mail .= "Hallo,\n\n"; 
$inhoud_mail .= "Reeds klant? \n\n";
$inhoud_mail .= "Klant: $klant\n";
if($klantnummer) {
$inhoud_mail .= "Klantnummer: $klantnummer\n\n";
}

$inhoud_mail .= "Dier dat verzorgd moet worden?\n\n";
$inhoud_mail .= "Dier: $dier\n\n";
......

$inhoud_mail .= "Gegevens hond: \n\n";
$inhoud_mail .= "ICarenummer: " . $_POST['icarenummer'] . "\n";
$inhoud_mail .= "Ras: $hond_ras" . $_POST['hond_ras'] . "\n"; 

// PROBLEEM : $hond_ras variabele wordt niet ingevuld in de mail die de ontvanger aankrijgt


    $inhoud_mail .= "===================================================\n\n"; 
    
    // -------------------- 
    // spambot protectie 
    // ------ 
    // van de tutorial: http://www.phphulp.nl/php/tutorials/10/340/ 
    // ------ 
    
    $headers = "From: " . $_POST['naam'] . " <" . $_POST['mail'] . ">";
    
// geef e-mail adres op van ontvanger 
$mail_ontv = "emailadres hier verwijderd";
     
    mail($mail_ontv, $_POST['naam'], $inhoud_mail, $headers); 
    
    echo "<p>";
    echo "<h6>Uw reservatie werd succesvol verzonden naar $mail!</h6>";    
    echo "</p>";
}

Acties:
  • 0 Henk 'm!

  • Glewellyn
  • Registratie: Januari 2001
  • Laatst online: 19-09 19:31

Glewellyn

is er ook weer.

In plaats van alles op te slaan in nieuwe hidden fields (die vervolgens weer heen en weer naar de gebruiker over het lijntje moeten) kan je beter alles in sessie variablen opslaan, en die op het einde mailen.

edit:

Eeuh.. zonder sessies... moet leren lezen :)

Maarreuuh, waarom zonder sessies?


Edit 2:
Heb je het al eens zonder underscore in de 'name' attribute van je hidden field? Ik heb daarmee weleens problemen gehad
<-- onzin

[ Voor 48% gewijzigd door Glewellyn op 06-07-2006 23:24 ]

*zucht*


Acties:
  • 0 Henk 'm!

  • ReverendBizarre
  • Registratie: December 2001
  • Laatst online: 24-03-2021
Volgens mij staat je form open tag verkeerd bij stap 2. Je echo'd eerst een stel input fields en opent daarna pas je form tag. Dan worden die input fields buiten de form tag dus niet gesubmit en komen dus nooit aan in je PHP script.

Ik vraag me trouwens inderdaad wel af waarom je dit niet gewoon met sessies doet want die zijn hier nou juist voor bedoeld. Dit is wel een erg omslachtige en ouderwetse oplossing.

[ Voor 31% gewijzigd door ReverendBizarre op 06-07-2006 23:21 ]


Acties:
  • 0 Henk 'm!

  • Glewellyn
  • Registratie: Januari 2001
  • Laatst online: 19-09 19:31

Glewellyn

is er ook weer.

Oh.. en iets meer controle op de input kan ook geen kwaad. Als iemand een HTML-mail reader gebruikt kan je hele nare scripts en andere zaken submitten. Zelfs iets simpels als strip_tags() kan een hoop ellende schelen.

*zucht*


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 21:18

crisp

Devver

Pixelated

Sowieso zou ik die HTML eens valideren, want een form-tag tussen TABLE en TR is ook in geen enkele HTML-versie toegestaan ;)

Intentionally left blank


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Bedankt allemaal. Ik heb besloten om het toch met sessies te doen, ik laat iets weten mocht dit niet lukken. De code wordt nog opgekuist dus dat komt wel goed, vroeg mij gewoon af wat de beste manier zou zijn en dat blijken dus sessies te zijn. Thanks!
Pagina: 1