Ik heb een geïntegreerd met php aanmeldformulier "compleet.php" in html gemaakt, met de gebruikelijke controles op het invullen van de velden. Hier is de structuur van het script:
<?php
if (isset($_POST['submit'])) {
if ($voornaam == "") {
echo "fout1!<br/>";
} else if ($achternaam == "") {
echo "fout2!<br/>";
} else if ($adres == "") {
echo "fout3!<br/>";
} else if ($netadres == "") {
echo "fout4!<br/>";
} else if (($aanhef = "alia") && ($aanhef1 = "")) {
echo "fout5!<br/>";
} else {bewerking van ingevoerde gegevens en mail naar mij}
?>
Dan volgt het formulier in HTML met bovenstaande velden, te verzenden naar compleet.php
Als ik niets invul in het formulier en meteen naar compleet.php post, krijg ik vermelding van fout4, terwijl ik volgens mij vermelding van fout 1 zou moeten krijgen, want $voornaam == "".
Ik ben geen beginneling, maar gebruik php-html voor mijn taal Esperanto.
Kan iemand mij alsjeblieft helpen?
Die variabelen op lijn 6 t/m 19 hoe je niet aan te maken. Die $_POST['....']-variabelen kan je al direct gebruiken. Zolang je er meer oplet dat ze bestaan.
De oplossing is nabij! Het html-gedeelte moet namelijk door "print" vanuit php geschreven worden.
Wat nu alleen nog niet lukt, is dat ik de echo's, bij het posten van "compleet.php" met lege velden naar "compleet.php", op het scherm krijg, dus } else { (wat hier de functie "if (isset($_POST['submit']))" heeft
<?php if ($voornaam == "") {
echo "Vi ne plenigis vian personan nomon!<br/>";
} else if ($achternaam == "") {
echo "Vi ne plenigis vian familian nomon!<br/>";
} else if ($adres == "") {
echo "Vi ne plenigis la unuan linion de la adreso!<br/>";
} else if ($plaats == "") {
echo "Vi ne plenigis la unuan linion de la loknomo!<br/>";
} else if ($postcode == "") {
echo "Vi ne plenigis la po&#349;tkodon!<br/>";
?>

enzovoort
Johan Derks op 17/06/2015 18:46:40

Je bedoelt: Waarom begin je niet met if (!isset($_POST['submit'])) (als die syntaxis goed is) en eerst het html-gedeelte plaatsen? Ja, dat is overzichtelijker voor de lezer.

Voor welke lezer?!?

Zou overigens niet je mailadres in een topic zetten.
En haal regel 3 er nu uit.
Die heeft geen nut (meer). En nu heb je geen gezeik meer: je weet wat je wilt/nodig hebt. Meer niet.
Het nadeel van deze methode is dat je 1 voor 1 verplichte velden moet verbeteren... dat is niet erg gebruiksvriendelijk.

Daarnaast is een controle op een lege string ook makkelijk te omzeilen.

Het zou ook al gebruiksvriendelijker zijn als je op 1 of andere manier in het formulier aangeeft dat bepaalde / alle velden verplicht zijn en het is natuurlijk helemaal mooi als alle foute velden in 1x gemarkeerd worden en er ook een (extra) hint wordt gegeven wat voor geldige invoer er dan wel verwacht wordt.
Je maakt een variable aan: $alternativaricevantonomo
Maar je gebruikt 'm op deze manier: alternativaricevantonomo (op regel 72 en 73)

Daar klopt iets niet..
Goed gezien. Dit kan niet:

    if (alternativaricevantonomo !== "") {
        $doel="pagas abonon por ".alternativaricevantonomo."<br/> al Balkana Verda Stelo.";
    }

Maar die fout kan de PHP-parser zelf gewoon melden: het is (twee keer) een undefined constant. Zet dus boven in je script de foutmeldingen aan, dan heb je hier geen last meer van:

<?php
ini_set('display_errors', 'On');
error_reporting(E_ALL | E_STRICT);
?>
Ja, dat was nog een foutje. Bedankt. Maar nu:
De echo-instructies werken niet. Kennelijk is er iets niet goed met de communictie server-side - userside )Vroeger deed ik alle foutmeldingen met Javascript. Nu moet de gebruiker het formulier, wanneer het fout of niet is ingevuld, terugkrijgen, MET BEHOUD VAN WAT GOED IS INGEVULD - lijkt mij. Ik heb de structuur van het formulier als volgt samengevat:
NAAM van script: compleet.php

<?php ini_set('display_errors',1);
error_reporting(E_ALL&~E_NOTICE);
$headers  = 'MIME-Version: 1.0'."\r\n";
if (isset($_POST['submit'])) {
Hernoemen aanmeldvariabelen uit POST_array
Controle op fouten in aanmelding en toekennen van tekst aan foutvariabelen: $voornaamFt, $achternaamFt, enz.
Toekennen van waarde true of false aan variabele $foutloos.
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
</head>
<body>
<form name="personalia" method="post" action=".\compleet.php">            
Velden in tabel:
<input type="text" name="voornaam"/><?php echo $voornaamFt;?>
input type="text" name="achternaam"/><?php echo $achternaamFt;?>
enz.
Einde tabel
<input type="reset" value="Rekomencigu" />&nbsp;&nbsp;&nbsp;<input type="submit" value="Sendu" /> 
</form>  

<?php
if ($foutloos == true) {
Opmaak van leesbare tekst uit ingevulde gegevens van gebruiker, onder de variabele $enhavo 
Opmaak van onderwerpregel onder de naam $temo
mail([mijn emailadres], $temo, $enhavo, $headers);
?>

<form action="………" method="post" target="_top">
abonnementformulier op Esperanto-tijdschrift
<input type="image" src="…………." border="0" name="submit" alt="PayPal, la sekura kaj kompleta maniero por pagi enrete."/>
</form>

</body>
</html>


Wie gaat er een licht op? Mij niet. Vast bedankt.
Johan, zou je voortaan code de [code][/code]-tags gebruiken voor de codes. Dan blijft het forum overzichtelijk. Hier kan je meer lezen over de mogelijke opmaakcodes.


Je moet controleren of de waardes nog in je POST-request zitten:


<input type="text" name="voornaam" value="<?php if (isset($_POST['voornaam'])) { echo $_POST['voornaam']; } ?> />
Ik heb je verzoek, Aar, eerder gelezen, maar snap niet goed, wat je bedoelt. Ik probeer het nu hieronder toe te passen. Verder:
Als ik vooraan het script "foreach ($_POST as $key => $value) {$inhoud .= "$key: $value\n";}; print $inhoud;", levert dat niets op. Het is zelfs zo, dat alleen het onderste gedeelte van het script, namelijk

[form action="" method="post" target="_top"]
abonnementformulier op Esperanto-tijdschrift
[input type="image" src="." border="0" name="submit" alt="PayPal, la sekura kaj kompleta maniero por pagi enrete."/]
[/form]

wordt uitgevoerd.

Reageren