Het gaat om het volgende stukje code :
<?php
if ($_POST['verzendbutton'] && !isset($_POST['reactie'])) {
echo "<span>Vul hier uw reactie in!</span><br />";}
?>
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.
Beetje vaag gescript eerste doe je geen isset en de 2de wel :s

Zo moet het zijn
<?php
if(isset($_POST['verzendbutton']) && !isset($_POST['reactie'])) {
echo "<span>Vul hier uw reactie in!</span><br />";}
?>
probeer eens $_POST['verzendbutton'] en $_POST['reactie'] te echo-en op je scherm, kijken wat dat weergeeft..
Bedankt voor jullie reacties. Ik heb allebei gedaan:
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>
<?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'])) {
?>
<form action="mailform4.php" method="post">
<?php
if (isset($_POST['verzendbutton']) && !valid_name($_POST['naam'])) { //isset() zelf toegevoegd
echo "<font color=\"red\">Vul hier uw naam correct in!</font>";
}
?>
Naam : <input type="text" name="naam" value="<?php echo $_POST['naam'] ?>"><br>
<?php
if (isset($_POST['verzendbutton']) && !valid_mail($_POST['mailadres'])) { // isset() zelf toegevoegd
echo "<font color=\"red\">Vul hier uw mailadres correct in!</font>";
}
?>
E-mail : <input type="text" name="mailadres" value="<?php echo $_POST['mailadres'] ?>"><br>
<?php
if (isset($_POST['verzendbutton']) && !isset($_POST['reactie'])) { //isset() zelf toegevoegd
echo "<font color=\"red\">Vul hier uw reactie in!</font>";
}
?>
Uw reactie : <textarea cols="30" rows="4" name="reactie"><?php echo $_POST['reactie'] ?></textarea>
<input type="submit" value="verzenden" name="verzendbutton"/>
</form>
<?php
}
else {
$boodschap = "Naam: ".$_POST['naam']."\nCommentaar: ".$_POST['reactie'];
mail($_POST['mailadres'], "Uw reactie van de website", $boodschap);
echo "Bedankt ".$_POST['naam'].", fijn dat je mee wilde doen!";
echo "<br />REACTIE: ".$_POST['reactie']; //deze regel extra toegevoegd
}
?>
</body>
</html>

Misschien hebben jullie hier wat meer in.

Alvast bedankt,
Dimpie

verzenden en checken in 1 doe je dat niet appart :s. Miss dat het daaraan ligt. Ik doe altijd IF verzenden en dan nog een keer
If checken op geldigheid.
Je kan gewo0n ! gebruiken ipv isset() omdat ze allebei op het bestaan van een var zoeken. Verder heeft verzenden maar 1 waarde dus ook die vergelijking kan anders:
<?
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.
Door !isset() te wijzigen in ! lukt het wel. Thanks.

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
Ik bedoel de if then tak natuurlijk. Sorry voor de verwarring.

Dimpie
Alleen snap ik de logica erachter nog niet helemaal.
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.
Het is juist handiger om !isset($_POST['naam']) dan !$_POST['naam'], omdat isset hiervoor gemaakt is

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
dit kan je meestal wel checken met regexpressions

Reageren