Undefined index Undefined index
Ik ben een lesje uit me boek aan het maken en loop tegen de volgende foutmelding aan:
Notice: Undefined index: voornaam in C:\xampp\htdocs\site\oefeningen\formulier5.php on line 2
Notice: Undefined index: achternaam in C:\xampp\htdocs\site\oefeningen\formulier5.php on line 3
Notice: Undefined index: titel in C:\xampp\htdocs\site\oefeningen\formulier5.php on line 4
Notice: Undefined index: versturen in C:\xampp\htdocs\site\oefeningen\formulier5.php on line 5
Ik heb een formuliertje gemaakt waarbij ik gebruik maak van $_POST.. maar het is toch logisch dat wanneer ik het formuliertje open er nog geen waarde toegekend is aan de $voornaam $achternaam $titel en $versturen? want ik heb nog niks ingevult..
hoe voorkom ik dan deze fout melding?
het script:
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
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
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
<?php
$voornaam=$_POST["voornaam"];
$achternaam=$_POST["achternaam"];
$titel=$_POST["titel"];
$versturen=$_POST["versturen"];
?>
<html>
<head>
<title>werken met formulieren htmlspecialchars() </title>
</head>
<body>
Formulier met text invoer: <br />
<p>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" " method="post" class="">
Voornaam :<input type="text" name="voornaam" <?php if (isset($voornaam)) { $voornaam=htmlspecialchars($voornaam); $voornaam=stripslashes($voornaam);} echo $voornaam ?>/><br /><br />
Achternaam :<input type="text" name="achternaam" <?php if (isset($achternaam)) { $achternaam=htmlspecialchars($achternaam); $achternaam=stripslashes($achternaam);} echo $achternaam; ?> /><br /><br />
Geslacht :<i>man:</i><input name="titel" type="radio" value="m" checked="checked"
<?php if (isset($titel) && $titel == 'm') { echo "checked=\"checked\"";} ?>
/>
<i>vrouw:</i><input type="radio" name="titel" value="v"
<?php if (isset($titel) && $titel == 'v') { echo "checked=\"checked\"";} ?>
/>
<input type="submit" value="verzenden" name="versturen" /><br />
</form>
</p>
<p>
<hr /><br />
<?php
if
(isset($_POST["voornaam"]) && $_POST["voornaam"] == '')
{
echo "gelieve uw voornaam in te vullen<br /><br />";
}
if
(isset($_POST["achternaam"]) && $_POST["achternaam"] == '')
{
echo "gelieve uw achternaam in te vullen<br /><br />";
}
if
(isset($_POST["titel"]) && ($_POST["titel"]) =='')
{
echo "gelieve uw geslacht te selecteren <br /><br />";
}
if (isset($_POST["versturen"]) && $_POST["achternaam"] != '' && $_POST["voornaam"] != '')
{
echo "Hallo, " . $_POST["voornaam"] . " " . $_POST["achternaam"] . " u bent een " . $_POST["titel"] . ".";
}
else
{
if (isset($_POST["versturen"]))
{
echo "gelieve alle velden in te vullen. <br /> <br /> Klik <a href=\"javascript:history.go(-1);\">hier</a> om terug te keren";
}
}
?>
</p>
</body>
</html>
$voornaam=$_POST["voornaam"];
$achternaam=$_POST["achternaam"];
$titel=$_POST["titel"];
$versturen=$_POST["versturen"];
?>
<html>
<head>
<title>werken met formulieren htmlspecialchars() </title>
</head>
<body>
Formulier met text invoer: <br />
<p>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" " method="post" class="">
Voornaam :<input type="text" name="voornaam" <?php if (isset($voornaam)) { $voornaam=htmlspecialchars($voornaam); $voornaam=stripslashes($voornaam);} echo $voornaam ?>/><br /><br />
Achternaam :<input type="text" name="achternaam" <?php if (isset($achternaam)) { $achternaam=htmlspecialchars($achternaam); $achternaam=stripslashes($achternaam);} echo $achternaam; ?> /><br /><br />
Geslacht :<i>man:</i><input name="titel" type="radio" value="m" checked="checked"
<?php if (isset($titel) && $titel == 'm') { echo "checked=\"checked\"";} ?>
/>
<i>vrouw:</i><input type="radio" name="titel" value="v"
<?php if (isset($titel) && $titel == 'v') { echo "checked=\"checked\"";} ?>
/>
<input type="submit" value="verzenden" name="versturen" /><br />
</form>
</p>
<p>
<hr /><br />
<?php
if
(isset($_POST["voornaam"]) && $_POST["voornaam"] == '')
{
echo "gelieve uw voornaam in te vullen<br /><br />";
}
if
(isset($_POST["achternaam"]) && $_POST["achternaam"] == '')
{
echo "gelieve uw achternaam in te vullen<br /><br />";
}
if
(isset($_POST["titel"]) && ($_POST["titel"]) =='')
{
echo "gelieve uw geslacht te selecteren <br /><br />";
}
if (isset($_POST["versturen"]) && $_POST["achternaam"] != '' && $_POST["voornaam"] != '')
{
echo "Hallo, " . $_POST["voornaam"] . " " . $_POST["achternaam"] . " u bent een " . $_POST["titel"] . ".";
}
else
{
if (isset($_POST["versturen"]))
{
echo "gelieve alle velden in te vullen. <br /> <br /> Klik <a href=\"javascript:history.go(-1);\">hier</a> om terug te keren";
}
}
?>
</p>
</body>
</html>
bij voorbaat dank
Gewijzigd op 07/02/2012 22:01:38 door Raymond de graaf
Zo op het eerste gezicht wat dingen die je moet aanpassen:
- $_SERVER['PHP_SELF'] is hack gevoelig, haal dit helemaal weg
- eerste 4 regels is onnodig variabele kopiëren en zorgt voor minder geheugen, haal dit ook weg en gebruik $_POST variabele in het script
- hou PHP en HTML gescheiden. Wat betekend dat je al je PHP boven het doctype uitvoert en onder het doctype alleen een paar simpele if'jes en echo's
En dan je fout:
Je kijkt niet of er post variabele verzonden zijn en dus het formulier verzonden is. Gebruik:
Om te kijken of een formulier verzonden is.
* plaatse tussen code /code done
* $_SERVER['PHP_SELF'] staat zo beschreven in em boek, ben nog maar bij les 8 dus dit zal misschien later worden aangehaald voor nu laat ik het even wat het is.
*de eerst 4 regels had ik eerder op deze manier:
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" " method="post" class="">
Voornaam : <input type="text" name="voornaam" <?php if (isset($_POST["voornaam"])) echo $_POST["voornaam"]; ?>/><br /><br />
Achternaam : <input type="text" name="achternaam" <?php if (isset($_POST["achternaam"])) echo $_POST["achternaam"]; ?> /><br /><br />
Geslacht : <i>man:</i><input name="titel" type="radio" value="m" checked="checked" <?php if (isset($_POST["titel"]) && $_POST["titel"] == 'm') { echo "checked=\"checked\"";} ?> />
<i>vrouw:</i><input type="radio" name="titel" value="v" <?php if (isset($_POST["titel"]) && $_POST["titel"] == 'v') { echo "checked=\"checked\"";} ?>>
<input type="submit" value="verzenden" name="versturen" /><br />
</form>
Voornaam : <input type="text" name="voornaam" <?php if (isset($_POST["voornaam"])) echo $_POST["voornaam"]; ?>/><br /><br />
Achternaam : <input type="text" name="achternaam" <?php if (isset($_POST["achternaam"])) echo $_POST["achternaam"]; ?> /><br /><br />
Geslacht : <i>man:</i><input name="titel" type="radio" value="m" checked="checked" <?php if (isset($_POST["titel"]) && $_POST["titel"] == 'm') { echo "checked=\"checked\"";} ?> />
<i>vrouw:</i><input type="radio" name="titel" value="v" <?php if (isset($_POST["titel"]) && $_POST["titel"] == 'v') { echo "checked=\"checked\"";} ?>>
<input type="submit" value="verzenden" name="versturen" /><br />
</form>
denk dat je dat bedoelt? mijn boek vertelde me juist om met de 4 variabelen te werken.. wellicht word later uitgelegt dat dit meer geheugen kost.
* html en php gescheiden houden heb ik beeld bij, komt denk ik ook later aangezien er een hoofdstuk is die heet je code opruimen.
in ieder geval bedankt voor je tips!
is de $_SERVER['REQUEST_METHOD'] == 'POST' de enige? ik ga dit ondanks het niet beschreven is toch invoegen.. iritieer me aan de melding ^^
TNKS!
Gewijzigd op 07/02/2012 22:09:51 door raymond de graaf
$_SERVER['REQUEST_METHOD'] == 'POST' is niet de enige er zijn er meer
if( $_SERVER['REQUEST_METHOD'] == 'POST' )
{
echo 'form verzonden!<br /><br />';
}
toegevoegd..
dit lost de melding niet op, wanneer ik formulier5.php open blijft de melding undefined bla die bla die bla komen.. er is toch ook geen waarde aan de $variabelen? dus de melding blijft dan komen :(
wanneer ik gegevens invoer gaan de meldingen dan ook weg.. maar ik wil dus deze meldingen helemaal niet hebben. of is dat ONMOGELIJK?
Gewijzigd op 07/02/2012 22:24:19 door raymond de graaf
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
$voornaam=$_POST["voornaam"];
$achternaam=$_POST["achternaam"];
$titel=$_POST["titel"];
$versturen=$_POST["versturen"];
?>
$voornaam=$_POST["voornaam"];
$achternaam=$_POST["achternaam"];
$titel=$_POST["titel"];
$versturen=$_POST["versturen"];
?>
terwijl je vanaf regel 42 pas gaat testen of die POST variabelen wel bestaan. Dat is als eerst uit het vliegtuig springen en dan pas controleren of je wel een parachute aan hebt.... niet echt slim of wel?
Dat is helemaal niet nodig.
Even een opzetje uit de losse pols om je een idee te geven:
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
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
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
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
$errors = array();
if(!isset($_POST['voornaam']) or trim($_POST['voornaam']) == '')
{
$errors['voornaam'] = 'gelieve uw voornaam in te vullen';
}
if(!isset($_POST['achternaam']) or trim($_POST['achternaam']) == '')
{
$errors['achternaam'] = 'gelieve uw achternaam in te vullen';
}
if(!isset($_POST['titel']) or trim($_POST['titel']) == '')
{
$errors['titel'] = 'gelieve uw geslacht te selecteren';
}
}
?>
<html>
<head>
<title>werken met formulieren htmlspecialchars()</title>
</head>
<body>
Formulier met text invoer: <br />
<form action="testje.php" method="post" class="">
<?php
if(isset($errors['voornaam']))
{
echo $errors['voornaam'].'<br />';
}
?>
Voornaam :<input type="text" name="voornaam" value="<?php echo isset($_POST['voornaam']) ? htmlspecialchars($_POST['voornaam']) : '' ?>"/><br /><br />
<?php
if(isset($errors['achternaam']))
{
echo $errors['achternaam'].'<br />';
}
?>
Achternaam :<input type="text" name="achternaam" value="<?php echo isset($_POST['achternaam']) ? htmlspecialchars($_POST['achternaam']) : '' ?>" /><br /><br />
<?php
if(isset($errors['titel']))
{
echo $errors['titel'].'<br />';
}
?>
Geslacht :<i>man:</i><input name="titel" type="radio" value="m" />
<i>vrouw:</i><input type="radio" name="titel" value="v" />
<input type="submit" value="verzenden" name="versturen" /><br />
</form>
<hr /><br />
</body>
</html>
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
$errors = array();
if(!isset($_POST['voornaam']) or trim($_POST['voornaam']) == '')
{
$errors['voornaam'] = 'gelieve uw voornaam in te vullen';
}
if(!isset($_POST['achternaam']) or trim($_POST['achternaam']) == '')
{
$errors['achternaam'] = 'gelieve uw achternaam in te vullen';
}
if(!isset($_POST['titel']) or trim($_POST['titel']) == '')
{
$errors['titel'] = 'gelieve uw geslacht te selecteren';
}
}
?>
<html>
<head>
<title>werken met formulieren htmlspecialchars()</title>
</head>
<body>
Formulier met text invoer: <br />
<form action="testje.php" method="post" class="">
<?php
if(isset($errors['voornaam']))
{
echo $errors['voornaam'].'<br />';
}
?>
Voornaam :<input type="text" name="voornaam" value="<?php echo isset($_POST['voornaam']) ? htmlspecialchars($_POST['voornaam']) : '' ?>"/><br /><br />
<?php
if(isset($errors['achternaam']))
{
echo $errors['achternaam'].'<br />';
}
?>
Achternaam :<input type="text" name="achternaam" value="<?php echo isset($_POST['achternaam']) ? htmlspecialchars($_POST['achternaam']) : '' ?>" /><br /><br />
<?php
if(isset($errors['titel']))
{
echo $errors['titel'].'<br />';
}
?>
Geslacht :<i>man:</i><input name="titel" type="radio" value="m" />
<i>vrouw:</i><input type="radio" name="titel" value="v" />
<input type="submit" value="verzenden" name="versturen" /><br />
</form>
<hr /><br />
</body>
</html>
TNKS
tot de volgende probleem maar weer ^^
ps weet iemand nog een goed php boek in het nederlands? ben met deze nu halverwege maar dit is wel basis.. heb hier al veel tips gehoord waarom je bepaalde dingen NIET moet doen die wel zo worden uitgelgt in dit boek! (PHP5, tweede editie in 10 minuten van Serge Terryn)
Of ze zijn oud, of ze zijn niet volledig.
Het beste werkt de handleiding van php: http://www.php.net/
En wat actueler online materiaal bijvoorbeeld: http://www.pfz.nl/wiki/het-wiel-uitgevonden-formulieren/
EDIT en dan nog een gouden tip:
Zowel php als html lezen allemaal net zoals wij van boven naar beneden en van links naar rechts. Dus dat scheelt een hoop aan logica.
Als je nou naar jou script kijkt dan begin je bovenaan met 'wat', en ergens in het midden de rest. Dat doe je fout. Je kijkt eerst met php of er wat gepost is.
Dan maak je een lege array() aan om de fouten op te vangen. Vervolgens zet je ze met isset() en een foutmelding, en dat echo je.
Gewijzigd op 07/02/2012 23:45:32 door Bart V B
maar wat houd (!isset()) in? en dan met namen de '!' die staat niet vermeld bij mijn (isset()) functie in me boek,, dat bevestigt gelijk je verhaal over boeken!
en de functie trim() haalt de overbodige spaties weg toch?
ik ben begonnen met wat scripts te downloaden en toen ze aan te passen om het zo te leren, maar het leek me beter om eerst eens de basis te kunnen begrijpen,lezen en zelf typen. eerst kruipen en dan lopen zegmaar
zodoende maar ik zal zeker eens die site's bekijken!
$_SERVER=['PHP_SELF'] is dus hack gevoelig..
is het dan beter om bijvoorbeeld een formulier contact.php zo te doen?
<form action="contact.php" method="post" />
Gewijzigd op 08/02/2012 11:54:29 door raymond de graaf
trim() kan spaties (en andere tekens) weghalen, maar alleen aan de uiteinden: http://php.net/manual/en/function.trim.php
Overigens vind ik een nuance over boeken wel op zijn plaats. Alsof elk boek slecht is en elk tutorial of advies op een forum als dit goed. Dat is natuurlijk lariekoek. Ik zie hier ook genoeg goedbedoeld advies langskomen waar ik mijn vraagtekens bij zet. En ik ben er zeker van dat mijn adviezen ook niet altijd door iedereen met instemming worden gelezen.
Een groot deel van scripten c.q. programmeren is eigen invulling. Veel zaken zijn niet per definitie goed of slecht. Blijf dus altijd kritisch en haal die dingen eruit die jij het beste vindt. Lees advies van anderen, neem het ter harte, maar lees het niet als absolute waarheid.
Dus als ik het zou vertalen zou er staan:
als(niet gezet())
if (! isset())
Je moet altijd in je formulier een action meegeven waar hij naar toe post.
dus in jou geval zal dat <form action="contact.php" method="post" /> zijn.
De functie trim haalt inderdaad de overbodige spaties weg.
Want als je bijvoorbeeld een spatie zet dan krijg je zoiets in je $_POST ' '.
En dan is ie dus geset. ( isset() ) Dat wil je niet. want ze mogen immers niet leeg zijn.
Theorie is leuk, boeken lezen ook, maar je leer het meeste door het veel te doen.
Hoe meer errors je om je oren krijgt, hoe beter je het doet! :P
Copy/past de error in google, en vaak kom je meteen een oplossing tegen.
Misschien zie je hem niet meteen, maar daar leer je het wel echt mee.
Overschrijven kan iedereen, maar dat wil nog niet zeggen dat je het kunt. Snap je?
bedankt voor jullie reacties!
helaas is de pauze voorbij dus ben er weer weg van!