Sinds een tijdje ben ik bezig met de basics van PHP en MySQL en ik ben nu bij het onderwerp formulieren en het controleren van de gegevens hiervan.
Hiervoor heb ik een proef script gemaakt om het te testen maar om de een of andere reden doet die het niet helemaal naar wens. Wat specifieker: mijn form action POST werkt niet helemaal goed. Ten eerste krijg ik deze PHP zin steeds te zien (form action checkall) na het invullen van mij formulier. Ten tweede heb ik een probleem met me action pagina (checkAll) die de gegevens niet goed controleert.
Zo heb ik er een controle voor ingevoerde velden inzitten maar als ik geeneen veld invoer dan krijg ik alleen een foutmelding te zien van één veld dat niet is ingevuld terwijl er dan (volgens mij) alle velden getoond moeten worden die niet ingevuld zijn. Daarnaast laat het programma ook niet de goede tekst zien als alle gegevens correct zijn ingevuld.
Wat overige informatie: XAMPP is geinstallaeerd en draait tijdens het testen. Hieronder volgt de gebruikte code:
Ik ga niet rechtstreeks een antwoord geven.
Maar waar je altijd moet mee beginnen (wanneer je een formulier verwerkt), is dingen in de juiste volgorde zetten.
PHP bovenaan de code
Formulier onderaan de code.
Werk altijd volgens zo'n structuur:
<?php
// eerst testen of er een POST verzoek is
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
// ... Hier verwerk je de POST variabelen
header('location: index.php'); // hier vul je de url in van het formulier. Daarmee wordt de pagina ververst en blijven de POST variabelen niet actief
}
?>
<form ...>
...
Ik ga niet rechtstreeks een antwoord geven.
Maar waar je altijd moet mee beginnen (wanneer je een formulier verwerkt), is dingen in de juiste volgorde zetten.
PHP bovenaan de code
Formulier onderaan de code.
Werk altijd volgens zo'n structuur:
<?php
// eerst testen of er een POST verzoek is
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
// ... Hier verwerk je de POST variabelen
header('location: index.php'); // hier vul je de url in van het formulier. Daarmee wordt de pagina ververst en blijven de POST variabelen niet actief
}
?>
<form ...>
...
Dankjewel voor je reactie! Ik heb de PHP en de form even geswitched en in de goede volgorde gezet. Tevens de request en de header gebruikt, hij doet het echter nog steeds niet.
Waarom zou je je formulier laten posten naar een andere pagina? laat die action gewoon leeg.
@kris ik mis de validatie nog.
<?php
// deze functie controleert of het ingevulde goed is en geeft direct de fouten in de vorm van een array terug.
function validate($name, $email)
{
$errors = array();
if($name == '')
$errors[] = 'U moet een naam opgeven.';
if(!filter_var($email, FILTER_VALIDATE_EMAIL))
$errors[] = 'U dient een GELDIG emailadres op te geven.';
return $errors;
}
// dit is een hulpfunctie om snel de $_POST variabelen in een eigen variabele te zetten
// en als de $_POST variabele niet bestaat dan geven we een beginwaarde.
function getPostValue($name, $default = '')
{
if(isset($_POST[$name]))
$default = $_POST[$name];
return $default;
}
// initialisatie van de variabelen.
$name = getPostValue('name');
$email = getPostValue('email');
// eerst testen of er een POST verzoek is
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
$errors = validate($name, $email);
if(count($errors) == 0)
{
// Als er geen errors zijn dan gegevens opslaan of verzenden per email daarna door naar een andere pagina.
header('location: thankyou.php');
exit;
}
// als we hier nog komen dan zijn er dus fouten en kunnen we die aan de gebruiker kenbaar maken
echo '<ul>';
foreach($errors as $error)
echo '<li>' . $error . '</li>';
echo '</ul>';
}
?>
<form action="" method="post">
<input type="text" id="name" name="name" value="<?php echo $name; ?>" />
<input type="text" id="email" name="email" value="<?php echo $email; ?>" />
<input type="submit" value="Verzenden" />
</form>
Uitgaande van mijn voorbeeld:
op regel 28:
<?php
$maand = getPostValue('ddlApkmaand', 'januari'); // <-- mag ook een andere maand zijn als startwaarde..
?>
Ja klopt Marcel. Het punt is dat op één van de <option>s een extra attribuut gezet moet worden dat er voor zorgt dat die option geselecteerd wordt ( <option selected="selected">test</option> ). Je weet echter niet van te voren welke van de options dat moet zijn dus zul je de - in dit geval - maanden in een array moeten plaatsen en de options door PHP moeten laten genereren. Ik heb dit werkend voorbeeldje even voor je in elkaar gezet:
<?php
// vanaf nu gebruiken we associatieve arrays om de <select>s te vullen!
$maanden = array(
'niet ingevuld' => 'maand',
'januari' => 'Januari',
'februari' => 'Februari',
'maart' => 'Maart',
'april' => 'April',
'mei' => 'Mei',
'juni' => 'Juni',
'juli' => 'Juli',
'augustus' => 'Augustus',
'september' => 'September',
'oktober' => 'Oktober',
'november' => 'November',
'december' => 'December',
);
// deze functie maakt met behulp van een opgegeven array en de standaard geselecteerde optie de HTML aan voor alle <options> van een <select>
function getOptions($array, $selected)
{
$html = '';
foreach($array as $key => $value)
{
$sel = '';
if($selected == $key)
$sel = ' selected="selected"';
$html .= '<option value="' . $key . '"' . $sel . '>' . $value . '</option>';
}
return $html;
}
// deze functie controleert of het ingevulde goed is en geeft direct de fouten in de vorm van een array terug.
function validate($name, $email, $maand)
{
$errors = array();
if($name == '')
$errors[] = 'U moet een naam opgeven.';
if(!filter_var($email, FILTER_VALIDATE_EMAIL))
$errors[] = 'U dient een GELDIG emailadres op te geven.';
if($maand == 'niet ingevuld')
$errors[] = 'U moet een MAAND selecteren.';
return $errors;
}
// dit is een hulpfunctie om snel de $_POST variabelen in een eigen variabele te zetten
// en als de $_POST variabele niet bestaat dan geven we een beginwaarde.
function getPostValue($name, $default = '')
{
if(isset($_POST[$name]))
$default = $_POST[$name];
return $default;
}
// initialisatie van de variabelen.
$name = getPostValue('name');
$email = getPostValue('email');
$maand = getPostValue('ddlApkmaand', 'niet ingevuld');
// eerst testen of er een POST verzoek is
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
$errors = validate($name, $email, $maand);
if(count($errors) == 0)
{
// Als er geen errors zijn dan gegevens opslaan of verzenden per email daarna door naar een andere pagina.
header('location: thankyou.php');
exit;
}
// als we hier nog komen dan zijn er dus fouten en kunnen we die aan de gebruiker kenbaar maken
echo '<ul>';
foreach($errors as $error)
echo '<li>' . $error . '</li>';
echo '</ul>';
}
?>
<form action="" method="post">
<input type="text" id="name" name="name" value="<?php echo $name; ?>" />
<input type="text" id="email" name="email" value="<?php echo $email; ?>" />
<select id="ddlApkmaand" name="ddlApkmaand" class="datum_maand">
<?php echo getOptions($maanden, $maand); ?>
</select>
<input type="submit" value="Verzenden" />
</form>