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.
?
Onbekende gebruiker
24-06-2004 11:17
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 />";}
?>
?
Onbekende gebruiker
24-06-2004 11:40
probeer eens $_POST['verzendbutton'] en $_POST['reactie'] te echo-en op je scherm, kijken wat dat weergeeft..
?
Onbekende gebruiker
24-06-2004 12:03
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.
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
?
Onbekende gebruiker
24-06-2004 12:53
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.
?
Onbekende gebruiker
24-06-2004 15:01
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
?
Onbekende gebruiker
24-06-2004 15:04
Ik bedoel de if then tak natuurlijk. Sorry voor de verwarring.
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