Error reporting

Status
Niet open voor verdere reacties.
Lijkt me niet zo'n goed idee om globals te gebruiken...

Het klopt inderdaad dat $registratie_fouten niet bestaat buiten de functies die validaties doen; dat heeft met scope te maken.
Wat je het beste kunt doen, is ipv iets toevoegen aan een array, de foutmelding returnen:
PHP:
function valideer_naam ( $sNaam ) {
  if ( strlen ( $sNaam ) < 3 ) {
    return 'Naam te kort!';
  }
  if ( strlen ( $sNaam ) > 20 ) {
    return 'Naam te lang!';
  }
  return true;
}

Vervolgens kun je bij het aanroepen van de functie die return waarde toevoegen aan een array in je main script:

PHP:
// valideer naam
$naam_goed = valideer_naam ( $_POST['naam'] );
// als het antwoord niet exact gelijk is aan true, voeg toe aan de array
if ( $naam_goed !== true ) {
  $registratie_fouten[] = $naam_goed;
}

Dit zal later heel veel problemen voorkomen; want als je een global gebruikt betekend het eigenlijk dat je deze validatie functies verder nergens op je website kunt gebruiken, omdat ze zo gekoppeld zijn aan 1 bepaalde variabele :)
 
Hiermee doet hij het uitstekend :thumb::D;):thumb::cool::thumb::D:):p:p:D:thumb:;):cool:
 
Er is toch nog een probleempje opgedoken. Als alles nu goed ingevuld, worden de gegevens niet geregistreert en in de plaats krijg ik een error:

Notice: Undefined variable: registratie_fouten in C:\wamp\www\Vetweb\registratie.php on line 103

PHP:
if ( count ( $registratie_fouten ) > 0 ) {

	foreach($registratie_fouten as $fout){

		echo $fout, '<br />';
	}

} else {


-> Heb dit verholpen met empty functie, MAAR
Staat een ongedefinieerde variabele niet gelijk aan nul??????
 
Laatst bewerkt:
Je moet aan het begin van dat stuk nog dit...

$registratie_fouten = array();

...plaatsen. Een ongedefinieerde variabele is niks, eerder NULL dan 0 in ieder geval.
 
Nu ben ik toch alweer een heel eind verder gekomen. Zoals je mss al zal gemerkt hebben, worden de errors gegenereerd op een andere php pagina. Nu zou ik het graag zo willen hebben dat als er een (of meerdere errors bestaan) ze op dezelfde pagina weergegeven worden, zodat ze direct opnieuw kunnen aangepast wordne.

Ik veronderstel dat dit gewoon zou moeten lukken door je gegeven te posten naar dezelfde pagina waarop men de gegevens moet invoeren. Nu is de vraag hoe doe je dit? Gebruik je hiervoor nog steeds $_POST?
 
Jep; je gebruikt post en je geeft geen action="" element op in je Form.

Dan komt ie op dezelfde pagina uit.

Als je wilt dat de pagina de gegevens ingevuld laat, moet je de inhoud van de $_POST vars als value opgeven bij je text input:

PHP:
<?php
if ( isset ( $_POST['username'] ) ) {
  $username = $_POST['username'];
}
else {
  $username = '';
}
?>
<input type="text" name="username" value="<?php echo $username ?>" />
 
Om de form en de error meldingen op dezelfde pagina te laten verschijnen zit ik nog ergens in de knoei. Als de pagina voor de eerste keer ingeladen wordt, dan mag hij natuurlijk niet alle errors te voorschijn toveren. Om dat tegen te gaan, heb ik het al geprobeerd met

if (!isset($_POST) -> wat natuurlijk niet kan werken :p

Dan heb ik effe in mijn php-boek zitten snuisteren en kwam ik de volgende functie tegen:

PHP:
function filled_out($form_vars) {
  // test that each variable has a value
  foreach ($form_vars as $key => $value) {
     if ((!isset($key)) || ($value == '')) {
        return false;
     }
  }
  return true;
}

Dit wordt voor dezelfde reden gebruikt. Het enige probleem is dat ik telkens de foutmelding krijg met $form_vars.

Die $form_vars zou dan normaal gezien alle $_POST - varialen bevatten die in mijn form voorkomen. Hoe kan ik dit nu omzeilen?
 
Je kunt de request methode checken :)

PHP:
if ( $_SERVER['REQUEST_METHOD'] == 'POST' ) {
  // formulier verzonden
}
else {
  // geen formulier verzonden
}
 
Ok, k'ben er bijna =p

Er rest nog 1 probleem die ik al eens gehad heb. Ik krijg deze foutmeldingen:

Warning: Missing argument 1 for html_registratie(), called in C:\wamp\www\Vetweb\test.php on line 223 and defined in C:\wamp\www\Vetweb\output_fns.php on line 16

Warning: Missing argument 2 for html_registratie(), called in C:\wamp\www\Vetweb\test.php on line 223 and defined in C:\wamp\www\Vetweb\output_fns.php on line 16

Warning: Missing argument 3 for html_registratie(), called in C:\wamp\www\Vetweb\test.php on line 223 and defined in C:\wamp\www\Vetweb\output_fns.php on line 16

enz. tot aan 13

Het gaat om de variablen die gebruikt worden. Het gaat hem hierom:

output_fns.php
PHP:
function html_registratie($gebruikersnaam, $wachtwoord , $wachtwoord_controle , $emailadres , $voornaam , $achternaam , $straat , $huisnummer , $bus , $gemeente , $postcode , $land , $telefoon_gsm_nummer){
?>
<h2>Een account aanmaken</h2>
<p>Met dit account heb je toegang tot alle delen op deze website en de bijbehorende toepassingen</p>
<form method = "post" action="">
<table bgcolor="#cccccc" >
<tr>
	<td colspan="2">Gelieve de volgende velden in te vullen:</td>
</tr>
<tr>
	<td>Gebruikersnaam: <br />(Tussen 2 en 16 characters)</td>
	<td><input type = "text" name = "gebruikersnaam" value = "<?php echo $gebruikersnaam; ?>" maxlength = "16"/></td>
<tr>
	<td>Wachtwoord: <br />(Minimaal 8 tekens)</td>
	<td><input type = "password" name = "wachtwoord" value = "<?php echo $wachtwoord; ?>" maxlength = "20"/></td>
</tr>
<tr>
	<td>Bevestiging wachtwoord:</td>
	<td><input type = "password" name = "wachtwoord_controle" value = "<?php echo $wachtwoord_controle; ?>" maxlength = "20"/></td>
</tr>

Vroeger stond er daar:
PHP:
function html_registratie($gebruikersnaam = "", $wachtwoord = "" , $wachtwoord_controle = "", enz){

Maar omdat er nu in mijn script het volgende staat, zou dat normaal gezien toch niet meer nodig zijn:

registratie/php
PHP:
//Aanmaak short variable gebruikersnaam
if (isset($_POST['gebruikersnaam'])){
    $gebruikersnaam = $_POST['gebruikersnaam'];
} else {
    $gebruikersnaam = '';
}

//Aanmaak short variable wachtwoord
if (isset($_POST['wachtwoord'])){
    $wachtwoord = $_POST['wachtwoord'];
} else {
    $wachtwoord = '';
}

//Aanmaak short variable wachtwoord_controle
if (isset($_POST['wachtwoord_controle'])){
    $wachtwoord_controle = $_POST['wachtwoord_controle'];
} else {
    $wachtwoord_controle = '';
}

Onderaan zit er trouwens nog een kleine foto van hoe mijn form ingeladen wordt. Volgens mij zijn variablen van beide scripts weer niet gelijk?
 

Bijlagen

  • Registratie form.jpg
    Registratie form.jpg
    86,8 KB · Weergaven: 15
Laatst bewerkt:
Hoe roep je de html_registratie() functie aan? Je moet daar nu wel alle argumenten aan meegeven namelijk, anders kan ie ze niet vinden.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan