Hallo phphulp,

Ik ben voor het eerst bezig om een formulier met php in een statische website op te nemen. Ik heb hiervoor van iemand een script gekregen wat goed werkt maar nog niet helemaal zoals ik het wil.

Omschrijving:
Er wordt gebruik gemaakt van verplichte velden en wanneer er een veld niet ingevuld is komt er een melding. Deze melding komt in een niet opgemaakte pagina. Ik wil echter wanneer er een veld niet ingevuld is een redirect plaats vindt naar een andere pagina.

Wat heb ik gedaan:
Boeken aangeschaft en website's bezocht om er achter te komen hoe php en het script werkt en waar/hoe ik het moet aanpassen.
Ik heb kunnen analyseren waar de taak door het script wordt uitgevoerd maar niet wat ik moet aanpassen.

Het script:
Ik begrijp dat het onderstaande deel van het script controleerd of er lege velden zijn, zo ja dan wordt het script gestopt met die()

if ($_POST['fields']) {
$verplicht = explode(",", $_POST['fields']);
for ($nr=0; $nr < count($verplicht); $nr++) {
if (!$_POST[$verplicht[$nr]]) {
die("[Error] U heeft het veld ".$verplicht[$nr]." niet ingevuld!");

Mijn vraag:
Wat moet ik aanpassen om er voor te zorgen dat er een redirect plaatsvindt naar een andere pagina wanneer een veld niet is ingevuld.

Alvast bedankt voor het lezen
Dan kun je de laatste if statement zo aanpassen.

if (!$_POST[$verplicht[$nr]]) {
header ("Location: je_pagina.php");

Als je script werkt naar behoren en je krijgt nu een melding dat het veld niet is ingevuld als dat ook niet gedaan is, ga je ipv die error nu naar de pagina je_pagina.php.

Je geeft zeer weinig script vrij om het goed te bekijken maar nogmaals dit zou een oplossing kunnen bieden.
Hoi Chris,

Bedankt voor je reactie. Deze had ik al geprobeerd maar dan loopt het script gewoon door. Ik zet het volledige script hier onder neer.

PHP:
<?php
if(!$_POST) {

die("[Error] Dit script moet worden aangeroepen via een formulier verzending.");
}
else {

/*------------------------------------------------------------------
Emailbody en emailheader variabelen
------------------------------------------------------------------*/
$s_emailbody = "De volgende gegevens zijn verstuurd\n\n";

/*------------------------------------------------------------------
Als de verplichte velden vergeten zijn, of leeg zijn laten we een
error zien.
------------------------------------------------------------------*/
if(!isset($_POST["nextpage"])) {
die("[Error] U moet een bevestigings pagina opnemen in uw formulier.");
}
if(!isset($_POST["to"]) || $_POST["to"] == false) {
die("[Error] U dient een veld 'to' in uw formulier op te nemen met de waarde (value) [email protected]!");
}
if(!isset($_POST["subject"])) {
$subject = "Mail van uw website";
} else {
$subject = $_POST["subject"];
}
if(!isset($_POST["from"])) {
$from = "website";
} else {
$from = $_POST["from"];
}
if ($_POST['fields']) {
$verplicht = explode(",", $_POST['fields']);
for ($nr=0; $nr < count($verplicht); $nr++) {
if (!$_POST[$verplicht[$nr]]) {
die("[Error] U heeft het veld ".$verplicht[$nr]." niet ingevuld!");
}
}
}
/*------------------------------------------------------------------
Elke veldnaam en waarde toevoegen aan $s_emailbody
------------------------------------------------------------------*/
for ($i=0;$i<sizeof($_POST);$i++){

if(key($_POST) != "nextpage" && key($_POST) != "to" && key($_POST) != "subject" && key($_POST) != "fields" && key($_POST) != "from") {

$s_emailbody .= key($_POST).":\t\t";
$s_emailbody .= current($_POST)."\n";
}

next($_POST);
}

if(!@mail($_POST["to"], $subject, $s_emailbody, "From: $from")) {

die("Er is een fout opgetreden, probeert u het nog eens!");
}
else {
header("Location: ".$_POST["nextpage"]);
}
}
?>

HTML:
<form method="post" action="../mailform/mail-a-form.php">
<!--Het email adres waar het bericht naar toe verstuurd moet worden-->
<input type="hidden" name="to" value="[email protected]">
<!--De afzender -->
<input type="hidden" name="from" value="[email protected]">
<!--Verplichte velden-->
<input type="hidden" name="fields" value="naam,mailadres,bericht">
<!--Bevestigings pagina-->
<input type="hidden" name="nextpage" value="ok.html">
<input type="hidden" name="subject" value="Mail van de MT website...">
<?php
if ($_POST['fields']) {
$verplicht = explode(",", $_POST['fields']);
for ($nr=0; $nr < count($verplicht); $nr++) {
if (!$_POST[$verplicht[$nr]]) {
die("[Error] U heeft het veld ".$verplicht[$nr]." niet ingevuld!");
header ("Location: je_pagina.php");
}
?>

Mocht het bovenstaande ook niet werken, dan zal ik het eerst zelf testen. Dit kan ik nu helaas niet doen omdat ik onderweg ben.
Kijk eens naar fatsoenlijke scripts. Jouw script lijkt wel een kerkhof met al die 'die()' regels. Dit: if(!$_POST) is een controle op true/false. Beetje onzinnig. Geen @-jes gebruiken om errors te onderdrukken. Je mail() is gevoelig voor spammers doordat je de userinput niet controleert. En de headers zijn niet correct. Zie: http://phpwiki.santhe.nl/index.php/De_juiste_mailheaders
LOL, ja idd de kerkhof opmerking is een goeie ;)

Hij heeft dit script gekregen en gebruikt het. Ik heb echter geen idee of hij ook daadwerkelijk kennis van PHP heeft om het te herscrhijven.

P.S. even voor m'n eigen if (!isset()); controleerd toch of het NIET waar is?

dan is dit toch dubbelop of zit ik ernaast?
<?php
(!isset($_POST["to"]) || $_POST["to"] == false)
?>

Want
<?php
if (!isset($_POST["to"]) {}
?>

is toch hetzelfde als
<?php
if ($_POST["to"] == false) {}
?>
Hoi Chris,

Bedankt dat je zo snel reageerd. Ik heb het even uitgeprobeerd maar het werkt niet. Volgens mij komt dat om dat de "die()" voor de "header()" komt en "die()" het script afbreekt. Ik dacht zo iets van "die(header())" maar ik weet niet of dat wel kan en zo ja hoe dat te schrijven.

Gr. Erwin
@Chris: isset() kijkt of de $var bestaat, meer niet. De uitroepteken is een NOT-teken, dus inderdaad is !isset() -> niet geset. En een $_POST-waarde zal nooit true of false zijn, omdat je dat niet in een formulier kan ingeven.
Hoi SanThe en Chris,

Bedankt voor jullie reacties. Ik heb inderdaad niet genoeg kennis om het te herschrijven. Maar je moet ergens beginnen toch?

@SanThe:
Ik heb je suggestie bekeken en ondanks dat ik een leek ben zie ik dat het veel schoner en volgens mij efficiƫnter is. Ik ben niet gebakken aan mijn script maar ik heb dan wel wat uitleg nodig hoe ik dit script in mijn html formulier kan opnemen. Ik ga er ieder geval mee aan de slag.

Reageren