isset en $_POST variabelen
Code (php)
Ik heb register globals off ingesteld. Daarom gebruik ik ook de $_POST variabelen.
Echter de functie isset() werkt dan niet. Ik krijg dan nl. niet de melding: "Vul hier uw reactie in"
Het werkt wel als ik $_POST['reactie'] verander in $reactie. Wat kan hiervan de oorzaak zijn??
Als dit niet voldoende info blijkt te zijn zal ik de tekst van het volledige php bestand meesturen.
Alvast bedankt,
Dimpie.
Zo moet het zijn
probeer eens $_POST['verzendbutton'] en $_POST['reactie'] te echo-en op je scherm, kijken wat dat weergeeft..
1. isset() toegevoegd;
2. en inhoud $_POST['reactie'] ge-echood.
ad 1. Het toevoegen van isset() maakte helaas geen verschil.
ad 2. Als ik niks invul in het veld reactie wordt er niets ge-echood. Vul ik wel wat in, dan wordt er ook wat ge-echood. Dus dat gaat wel goed.
Ik het dit script uit het boek "Leer jezelf makkelijk PHP". Ik zal het volledige script maar toevoegen voor de duidelijkheid.
In het originele script werden niet de $_POST variabelen gebruikt. Dus dat is het enige dat ik in dit script hebt gewijzigd.
<html>
<head>
<title>Mailformmulier</title>
</head>
<body>
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
function valid_mail ($str) {
return (ereg ('(^[0-9a-zA-Z_\.-]{1,}@([0-9a-zA-Z_\-]{1,}\.)+[0-9a-zA-Z_\-]{2,}$)', $str));
}
function valid_name ($str) {
return (ereg ('^[A-Za-z. -]+$', $str));
}
$_POST['naam'] = ucfirst($_POST['naam']);
if ($_POST['verzendbutton'] != "verzenden" || !valid_name($_POST['naam']) || !valid_mail($_POST['mailadres']) || !isset($_POST['reactie'])) {
?>
function valid_mail ($str) {
return (ereg ('(^[0-9a-zA-Z_\.-]{1,}@([0-9a-zA-Z_\-]{1,}\.)+[0-9a-zA-Z_\-]{2,}$)', $str));
}
function valid_name ($str) {
return (ereg ('^[A-Za-z. -]+$', $str));
}
$_POST['naam'] = ucfirst($_POST['naam']);
if ($_POST['verzendbutton'] != "verzenden" || !valid_name($_POST['naam']) || !valid_mail($_POST['mailadres']) || !isset($_POST['reactie'])) {
?>
<form action="mailform4.php" method="post">
Code (php)
Naam : <input type="text" name="naam" value=""><br>
Code (php)
E-mail : <input type="text" name="mailadres" value=""><br>
Code (php)
Uw reactie : <textarea cols="30" rows="4" name="reactie"></textarea>
<input type="submit" value="verzenden" name="verzendbutton"/>
</form>
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
</body>
</html>
Misschien hebben jullie hier wat meer in.
Alvast bedankt,
Dimpie
If checken op geldigheid.
Code (php)
1
2
3
2
3
<?
if (!$_POST['verzendbutton'] || !valid_name($_POST['naam']) || !valid_mail($_POST['mailadres']) || !$_POST['reactie'])
?>
if (!$_POST['verzendbutton'] || !valid_name($_POST['naam']) || !valid_mail($_POST['mailadres']) || !$_POST['reactie'])
?>
Verder wil ik je erop wijzen dat !isset() niet zoveel zin heeft en misschien zelfs anders werkt dan je denkt.
isset() geeft TRUE als die var bestaat en FALSE als deze niet bestaat dat !isset() is dus totaal overbodig
Edit: !isset() zal dus FALSE geven wanneer een var bestaat en TRUE als het niet zo is.
Gewijzigd op 24/06/2004 13:37:00 door Mitch X
Alleen snap ik de logica erachter nog niet helemaal.
Als ik test op !isset() krijg ik TRUE wanneer de waarde niet bestaat. Op dat moment wordt de else tak toch uitgevoerd? Dus zou het eigenlijk toch moeten werken?
Wat geeft "!" terug? Is dat geen Boolean?
Ik ben wat PHP betreft vrij nieuw. Heb ooit wel eens wat geprogrammeerd, maar dat stelde niet zo veel voor. Dus ik hoop dat ik niet al te stomme vragen stel.
Bedankt,
Dimpie
Dimpie
Quote:
Alleen snap ik de logica erachter nog niet helemaal.
Als ik test op !isset() krijg ik TRUE wanneer de waarde niet bestaat.
Als ik test op !isset() krijg ik TRUE wanneer de waarde niet bestaat.
Als isset() FALSE geeft omdat die var er niet is geeft !isset() (die ! checkt of iets niet 'bestaat') TRUE terug waardoor de if() uitgevoerd wordt.
Jullie vergeten één ding.
isset kijkt of de $_POST is verstuurd, en niet of het een waarde heeft.
je kan beter empty() of !empty() gebruiken. empty() kijkt niet of de var geset is, maar of de gesette var wel waarde bevat
Gewijzigd op 24/06/2004 19:30:00 door de VeeWee
Quote:
isset kijkt of de $_POST is verstuurd, en niet of het een waarde heeft.
De verzendknop zal altijd een waarde hebben door het value attribuut en wanneer een post var niet is geset/er niets is ingevuld zal deze als waarde null hebben waardoor het dus gewo0n werkt.
Isset test, net zoals ! of een var geset is...
http://nl.php.net/isset
Als ik dit script uitvoer, lijkt het er op dat PHPerik gelijk heeft.
Vul je nl. voor $var 0, "" o.i.d. in dan is ie wel geset, echter wel empty.
Vul je een andere waarde dan 0 in, dan is $var zowel geset als !empty.
Haal je $var helemaal weg dan is ie niet geset en natuurlijk ook empty.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Have fun with it.
Dimpie.
Voer dit script maar eens uit:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
<?
if($_POST['stuuruh'])
if(!$_POST['vakkiej'])
echo("Blaaah");
else
echo("Bleeeh");
else
{
echo("<form method=\"post\" action=\"" . $_SERVER['PHP_SELF'] . "\">");
echo("<input type=\"text\" name=\"vakkiej\" /><br />");
echo("<input type=\"submit\" name=\"stuuruh\" value=\"STuuRuH!\" />");
echo("</form>");
}
?>
if($_POST['stuuruh'])
if(!$_POST['vakkiej'])
echo("Blaaah");
else
echo("Bleeeh");
else
{
echo("<form method=\"post\" action=\"" . $_SERVER['PHP_SELF'] . "\">");
echo("<input type=\"text\" name=\"vakkiej\" /><br />");
echo("<input type=\"submit\" name=\"stuuruh\" value=\"STuuRuH!\" />");
echo("</form>");
}
?>
Als je in het invulvak niets invult krijg je Blaaah te zien, vul je wel iets in krijg je bleeeh te zien