Ik heb een formulier pagina. Bij submit gaat die naar de afhandeling.
Nu wil ik kijken of alle verplichten velden zijn ingevuld, op deze manier:

<?php

$input['email'] = $_POST['email'];
$input['email1'] = $_POST['email1'];
$input['email2'] = $_POST['email2'];
$input['email3'] = $_POST['email3'];
$input['email4'] = $_POST['email4'];

foreach ($_POST as $input_empty)
{
if ($input_empty == '')
{
header('Location: ../index.php?page=inschrijven');
break;
}
}
?>
Ik heb drie vragen.
-Nu kijkt die door al $_POST values maar ik wil een paar velden als optioneel
die leeg mogen zijn. Hoe kan ik in de foreach loop van hier boven
uitzondering maken voor de velden die optioneel zijn?
-Als if ($input_empty == '') waar is, wat betekend dat er een veld niet ingevuld is
moet die terug naar de formulier gaan maar hij pakt value="<?php echo $input['email']; ?> niet
hij maakt gewoon alles leeg, hij moet onthouden als ik wel wat heb ingevuld.

<?php
<label for="email">E-mail</label> <input type="text" name="email"
value="<?php echo $input['email']; ?>"><span class="error"><?php echo $error['email']; ?></span>
?>

-Als ik ipv header redirect
<?php
foreach ($_POST as $input_empty)
{
if ($input_empty == '')
{
$_GET['page'] = 'inschrijven';
include('../index.php');
?>

gebruik. Dan pakt hij wel wat ik getypt heb alleen is heel de layout weg.
Als je een redirect uitvoert dan resulteert dat in een nieuwe pagina request, met dus ook nieuwe request parameters. je POST gegevens zijn dan dus weg. Je zal dus een andere manier moeten verzinnen om de gegevens van de ene naar de andere pagina te krijgen.

Overigens, dit:
<?php
$input['email'] = $_POST['email'];
$input['email1'] = $_POST['email1'];
$input['email2'] = $_POST['email2'];
$input['email3'] = $_POST['email3'];
$input['email4'] = $_POST['email4'];
?>
is echt onnodig variabelen kopieren.
Mijn idee ...

- Je moet nooit bang zijn om logisch-samenhangende code in een functie te steken. Dan blijft alles meer overzichtelijk; blijven tijdelijke variabelen niet in het geheugen slingeren (scope); en weet je precies waar je kleine aanpassingen/aanvullingen/bugs moet regelen.

Uiteindelijk wil je 1 antwoord: "is alle required stuff ingevuld?". 1 functie geeft je daar ondubbelzinnig 1 true of false.

- <form method="post" action="">
Stuur het formulier niet naar een ander .php bestand. Laat de action leeg; verwerk alles op de zelfde pagina.
Het is gemakkelijker om pas te redirecten nadat alles okay is, dan om een pagina terug te moeten keren als iets niet in orde is.


----
Hier een mogelijke manier van werken

<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
  if (postvalues_set( array('username', 'email') )) { // alle required velden invullen
    echo 'alles okay';
    // header('location: verwerken.php');
  }
  else {
    echo 'Niet alles ingevuld';
  }
}

/**
*  => true: all required values set; false: one or more required fields not set
*/
function postvalues_set(array $required_fields) {
  foreach ($required_fields as $key=>$item) {
    if ( !isset($_POST[$item])  || strlen($_POST[$item]) == 0)  return false;
  }
  return true;
}
?>
<hr>
<form method="post" action="">
  <input name="username"  value="<?php echo isset($_POST['username']) ? htmlentities($_POST['username']) : '' ;?>"> Username *<br>
  <input name="email"     value="<?php echo isset($_POST['email']) ? htmlentities($_POST['email']) : '' ;?>"> e-mail *<br>
  <input name="phone"     value="<?php echo isset($_POST['phone']) ? htmlentities($_POST['phone']) : '' ;?>"> Telephone<br>
  <input type="submit" value="GO">
</form>
Bedankt!! ik zal hier zeker naar kijken

Reageren