eerste formulier
Ik ben helemaal nieuw met PHP en probeer mijn eerste scripts uit. Nu loop ik tegen het volgende aan als ik een formulier probeer te maken en ik een variable in het formulier eenvoudiger probeer te maken:
<form action="" method="post">
Het betreft een <input type="radio" name="feedback" value="vraag"> Vraag
<input type="radio" name="feedback" value="klacht"> Klacht<br><br>
Uw voornaam: <input type="text" Name="vnaam"><br><br>
Uw achternaam: <input type="text" Name="anaam"><br><br>
Commentaar: <textarea cols="60" rows="5" name="commentaar" wrap="soft"></textarea><br><br>
<input type="submit" value="versturen">
</form>
Ik wil hieraan toevoegen:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
$feedback = $_POST["feedback"];
$vnaam = $_POST["vnaam"];
$anaam = $_POST["anaam"];
$commentaar = $_POST["commentaar"];
?>
$feedback = $_POST["feedback"];
$vnaam = $_POST["vnaam"];
$anaam = $_POST["anaam"];
$commentaar = $_POST["commentaar"];
?>
Daarna krijg ik een foutmelding:
Notice: Undefined index: feedback in C:\wamp\www\php\vraagform2.php on line 6
Notice: Undefined index: vnaam in C:\wamp\www\php\vraagform2.php on line 7
Notice: Undefined index: anaam in C:\wamp\www\php\vraagform2.php on line 8
Notice: Undefined index: commentaar in C:\wamp\www\php\vraagform2.php on line 9
Ik doe zeker iets verkeerd, maar ik kom er niet uit wat het zou kunnen zijn.
Graag hoor ik wat ik verkeerd doe want ik vind het wel handig voor de rest van mijn script om $feedback in plaats van $_POST["feedback"] enz te kunnen gebruiken.
Alvast bedankt voor jullie hulp!
isset(). Verder is het kopiëren van variabelen niet echt zinnig. Het kost eigenlijk alleen maar extra geheugen.
De $_POST-vars bestaan pas nadat het formulier is gepost. Dit kun je checken met bijv. Verder is het ook altijd handig om te kijken of het formulier gepost is. Voorbeeldje:
Code (php)
Gewijzigd op 21/02/2011 11:36:44 door Wouter J
De gehele oorspronkelijke code was als volgt:
<html>
<body>
<h1>Formulier</h1><br>
<form action="vraagform.php" method="post">
Het betreft een <input type="radio" name="feedback" value="vraag"> Vraag
<input type="radio" name="feedback" value="klacht"> Klacht<br><br>
Uw voornaam: <input type="text" Name="vnaam"><br><br>
Uw achternaam: <input type="text" Name="anaam"><br><br>
Commentaar: <textarea cols="60" rows="5" name="commentaar" wrap="soft"></textarea><br><br>
<input type="submit" value="versturen">
</form>
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
if (isset($_POST["feedback"]) && isset($_POST["vnaam"]) && $_POST["vnaam"] && isset($_POST["anaam"]) && $_POST["anaam"]!="") {
echo "Beste <strong>" .($_POST["vnaam"]). " " .($_POST["anaam"]). "</strong>, U heeft een ";
if ($_POST["feedback"]=="vraag") {
echo "vraag ";
}
else {
echo "klacht ";
}
echo "over het volgende:\n<br>";
echo "<strong>" .($_POST["commentaar"]). "</strong>";
}
else {
echo "Gelieve alle velden in te vullen AUB";
}
?>
if (isset($_POST["feedback"]) && isset($_POST["vnaam"]) && $_POST["vnaam"] && isset($_POST["anaam"]) && $_POST["anaam"]!="") {
echo "Beste <strong>" .($_POST["vnaam"]). " " .($_POST["anaam"]). "</strong>, U heeft een ";
if ($_POST["feedback"]=="vraag") {
echo "vraag ";
}
else {
echo "klacht ";
}
echo "over het volgende:\n<br>";
echo "<strong>" .($_POST["commentaar"]). "</strong>";
}
else {
echo "Gelieve alle velden in te vullen AUB";
}
?>
</body>
</html>
Je moet anders beginnen te redeneren.
Om te beginnen: PHP altijd bovenaan, HTML altijd onderaan.
Onder de plaats (in de code) waar je <html> zet, zou eigenlijk geen enkele if() meer mogen staan (deze uitspraak is wat overdreven, maar hou het in gedachten).
Denk aan het reciteren van een speech. Zie dat je eerst weet wat je gaat zeggen vooraleer je begint te spreken.
Verder:
Je if () clausule klopt niet.
Wat je daar wil weten, is of er iets gepost is; niet of alles is ingevuld.
Die if (isset($_POST["feedback"]) && isset($_POST["vnaam"]) ...
vervang je door
Maar dat is al gezegd, boven mij.
Wat trouwens dit betreft:
isset($_POST["vnaam"]) && $_POST["vnaam"]
Daar bestaat een functie voor, die precies dat doet: empty. Je moet er juist wel en !empty() van maken
!empty($_POST["vnaam"])
is precies het zelfde als
isset($_POST["vnaam"]) && $_POST["vnaam"]
Gewijzigd op 21/02/2011 14:07:35 door Kris Peeters
Code (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
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
<?php
//vragen of er is gepost of niet
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
if ($_POST["feedback"] == "vraag")
{
$feedback = 'vraag';
}
else
{
$feedback = 'klacht';
}
echo 'Beste <strong>'.$_POST["vnaam"].' '.$_POST["anaam"].'</strong>,<br /> U heeft een '.$feedback.' over het volgende: <strong><br />'.$_POST["commentaar"].'</strong>';
}
//als er niet is gepost laat die het formulier zien
else
{
echo ' <form action="'.$_SERVER['PHP_SELF'].'" method="post">
Het betreft een
<input type="radio" name="feedback" value="vraag"> Vraag
<input type="radio" name="feedback" value="klacht"> Klacht<br /><br />
Uw voornaam:
<input type="text" Name="vnaam"><br /><br />
Uw achternaam:
<input type="text" Name="anaam"><br /><br />
Commentaar:
<textarea cols="60" rows="5" name="commentaar" wrap="soft"></textarea><br /><br />
<input type="submit" value="Versturen">
</form>
';
}
?>
//vragen of er is gepost of niet
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
if ($_POST["feedback"] == "vraag")
{
$feedback = 'vraag';
}
else
{
$feedback = 'klacht';
}
echo 'Beste <strong>'.$_POST["vnaam"].' '.$_POST["anaam"].'</strong>,<br /> U heeft een '.$feedback.' over het volgende: <strong><br />'.$_POST["commentaar"].'</strong>';
}
//als er niet is gepost laat die het formulier zien
else
{
echo ' <form action="'.$_SERVER['PHP_SELF'].'" method="post">
Het betreft een
<input type="radio" name="feedback" value="vraag"> Vraag
<input type="radio" name="feedback" value="klacht"> Klacht<br /><br />
Uw voornaam:
<input type="text" Name="vnaam"><br /><br />
Uw achternaam:
<input type="text" Name="anaam"><br /><br />
Commentaar:
<textarea cols="60" rows="5" name="commentaar" wrap="soft"></textarea><br /><br />
<input type="submit" value="Versturen">
</form>
';
}
?>
Misschien een beetje teveel geholpen maar zo leer je ook wat over de opmaak van je code. Op deze manier achterhaal je sneller je fouten en maak je het voor jezelf makkelijker.
Kopieer niet zomaar deze code want anders leer je er natuurlijk niks van
EDIT: Input van een gebruiker moet je nooit vertrouwen, op dit moment zou het nog niet kwaad kunnen maar stel je wilt de informatie in een database of in een mail dan voldoet het niet meer.
Gewijzigd op 21/02/2011 14:22:53 door Bram Boos
Bedankt, hier kan ik wel wat mee (ik heb de code trouwens gemaakt met hulp van een boek php in 10 minuten waar html en php gewoon door elkaar staan, misschien toch een ander boek kopen ;))
Ze moesten die mannen boetes geven ...
Tja...
EDIT; @willem;
Of geen geld uitgeven aan boeken, op PHPhulp blijven en tutorials gaan lezen. Hetzelfde materiaal maar dan beter...
Gewijzigd op 21/02/2011 16:45:26 door Bram Boos
Gewijzigd op 21/02/2011 20:23:46 door Willem Dumee