Form validatie

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jelle Breusegem

Jelle Breusegem

26/09/2017 15:59:47
Quote Anchor link
Ik probeer in mijn formulier de input als volgt te valideren:

Ik verwijs naar het script "maak_account.php"
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<form action="scripts/maak_account.php" method="post">

<div class="form-group">
    <label for="naam">* Naam:</label>
    <input class="form-control" placeholder="Naam" name="naam" type="text" required>
    <span class="error">* <?php echo $naamErr;?></span>
</div>



Maar de variabele naamErr wordt niet herkend. Terwijl ik deze wel opvul in maakaccount.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<?php
// Variabele gegevens bedrijf
$rechtsvorm = $naam = $straat = $huisnr = $busnr = $postcode = $plaats = $btwnr = $telnr = $email = "";

// Variabele gegevens gebruiker
$voornaam = $achternaam = $functie = $wachtwoord = "";

// Error variablele
$naamErr="";

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    // Gegevens bedrijf
    $rechtsvorm = test_input($_POST["rechtsvorm"]);

    if (empty($_POST["naam"])) {
      $naamErr = "Naam invullen";
    }
else {
      $naam = test_input($_POST["naam"]);
    }

    
    $straat = test_input($_POST["straat"]);
    $huisnr = test_input($_POST["huisnr"]);
    $busnr = test_input($_POST["busnr"]);
    $postcode = test_input($_POST["postcode"]);
    $plaats = test_input($_POST["plaats"]);
    $btwnr = test_input($_POST["btwnr"]);
    // $telnr = test_input($_POST["telnr"]);
    // $email = test_input($_POST["email"]);

    // Gegevens gebruiker

    $voornaam = test_input($_POST["vnaam"]);
    $achternaam = test_input($_POST["naam"]);
    $functie = test_input($_POST["functie"]);
    $wachtwoord = test_input($_POST["wachtwoord"]);
}

function
test_input($data) {
  $data = trim($data);
  $data = stripslashes($data);
  $data = htmlspecialchars($data);
  return $data;
}

?>


Iemand die ziet wat ik verkeerd doe?
- Ariën -:
Gelieve in het vervolg bij code de [code][/code]-tags gebruiken.
Hier kan je meer lezen over de mogelijke opmaakcodes.
Alvast bedankt!
Gewijzigd op 26/09/2017 16:03:04 door - Ariën -
 
PHP hulp

PHP hulp

30/11/2024 00:38:44
 
- Ariën  -
Beheerder

- Ariën -

26/09/2017 16:04:41
Quote Anchor link
Maar is het formulier ook een onderdeel van scripts/maak_account.php?

Nu roep je een variabele aan, die niet nog bestaat. Je kan met isset() controleren of een variabele bestaat.
 
Jelle Breusegem

Jelle Breusegem

26/09/2017 16:17:41
Quote Anchor link
Ik heb account.php waar mijn html code in staat en als ik op de knop maak account druk
wordt het script maak_account.php aangeroepen. Kan ik variabele doorgeven of teruggeven vanwaar het script
werd aangeroepen?
 
- Ariën  -
Beheerder

- Ariën -

26/09/2017 16:52:40
Quote Anchor link
Waarom niet het gehele script in één bestand?
Eerst de PHP-code, en dan de HTML-code.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

26/09/2017 18:52:42
Quote Anchor link
Ik vind eigenlijk dat je al heel aardig bezig bent. Namelijk:
- Je begint met PHP in plaats van met HTML
- Je initialiseert netjes je variabelen
- Je test op correcte wijze of Je pagina is opgevraagd in de POST methode

Een compliment is dus op zijn plaats. Wat Ariën zegt daar ben ik het wel mee eens en ook zou ik de adviezen van Thomas uit je vorige topic ter harte nemen. Je kunt je HTML zo onder je code plaatsen

Voor de opzet voor je formulier (en code) zou ik deze volgorde aanhouden:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php

// includes en/of functies hier

// initialisatie van variabelen

// controleer of formulier verstuurd is


if ($_SERVER["REQUEST_METHOD"] == "POST") {
    // validatie

    // Indien validatie geslaagd is

    if(count($errors) == 0) {
        // verwerk het formulier hier (gegevens opslaan of mail verzenden etc)
        
        // redirect de gebruiker altijd o.a. om dubbele verwerking te voorkomen

        header('Location: where-ever.php');
        exit;
    }
}

?>

<<< HTML HIER >>>


Voor een compleet voorbeeld zie mijn reactie hier
Gewijzigd op 26/09/2017 19:43:24 door Frank Nietbelangrijk
 
Jelle Breusegem

Jelle Breusegem

27/09/2017 08:51:45
Quote Anchor link
Ik had ergens gelezen dat het properder en overzichtelijker programmeren is als je html, css, JavaScript en php in aparte files plaatst. Maar dus jullie raden mij aan php en html in zelfde file te plaatsen? Is daar een reden voor?
 
- Ariën  -
Beheerder

- Ariën -

27/09/2017 09:51:13
Quote Anchor link
Allereerst is er op die manier een goede logica. Je heb een mooi overzicht over wat er wanneer gebeurd. Ten tweede zijn er vaak ook momenten om ook na het versturen van het formulier je formulier te gebruiken. Denk bijvoorbeeld aan validatie waarbij je een veld bijv. rood wilt kleuren als deze niet goed is ingevuld.
 
Rob Doemaarwat

Rob Doemaarwat

27/09/2017 10:53:56
Quote Anchor link
Als je niet voor elke scheet van de design boys & girls (ander kleurtje, HTML een beetje schuiven, enz) je code door wilt is het inderdaad handiger om alles te scheiden. Javascript en CSS kunnen natuurlijk sowieso in hun eigen files, dat hoeft niet allemaal door je code heen te staan. Voor de rest wordt dan meestal de de MVC aanpak gekozen (met de V van view = grofweg de HTML). De meeste frameworks werken zo.

Bij de recht-toe-recht-aan methode die je nu hanteert is wat - Ariën - zegt vrij gebruikelijk. Als je je eens in een framework verdiept zul je zien dat ze daar in de ene file alle logica hebben zitten, en informatie klaarzetten die op het scherm moet komen (maar dan nog zonder opmaak info, puur de data), en in een andere file (die view) de opmaak zelf. Dan heb je echter ook te maken met het 'keurslijf' van het framework om te zorgen dat alles ook op die manier gaat werken, ne ben je dus wel een paar avondjes 'studeren' verder.
 
Jelle Breusegem

Jelle Breusegem

27/09/2017 10:57:51
Quote Anchor link
Ok bedankt voor de info. Het is altijd wat zoeken in het begin met een nieuwe taal en nieuwe omgeving. Ik plaats voortaan mijn php code bovenen mijn html.
 
- Ariën  -
Beheerder

- Ariën -

27/09/2017 11:06:41
Quote Anchor link
Ook vanwege het feit dat sommige mensen headers in PHP gebruiken halverwege hun HTML, zorgt logischerwijs voor problemen *. Daarom is het gewoon gebruikelijk om eerst de logica uit te voeren, en dan vaak op basis van een voorwaarde (als er ge-POST is, als een bepaalde waarde geset is etc..). Daarna kan je pas de output tonen.

* = Headers worden altijd uitgevoerd vóórdat de output begint. Dat is nu eenmaal de afspraak binnen het ontworpen HTTP-protocol.
Gewijzigd op 27/09/2017 11:07:14 door - Ariën -
 
Obelix Idefix

Obelix Idefix

27/09/2017 11:39:10
Quote Anchor link
Hierboven werd ook al aangegeven dat je input zo min mogelijk moet bewerken, maar ik geloof dat je een wachtwoord (bijna) nooit zou moeten bewerken. Daar horen juist ook vreemde tekens in. Zorg voor een goede controle en sla een wachtwoord gecodeerd op.
 
Thomas van den Heuvel

Thomas van den Heuvel

27/09/2017 17:03:55
Quote Anchor link
Input zou niet bewerkt mogen worden. Deze is goed of fout. Geen geautomatiseerd proces zou moeten proberen informatie te repareren die niet goed is (EDIT: uitzonderingen daar gelaten, zoals redundante datastromen met ingebouwde error-correcting code :p). Of zoals een oud-collega placht te zeggen: shit in, shit out.

Het probleem met automatisch aanpassen is dat je een machine informatie laat interpreteren. Machines zijn daar doorgaans niet zo sterk in. Daarnaast pas je mogelijk kloppende informatie aan in iets dat niet klopt, of in ieder geval iets dat afwijkt van wat een gebruiker heeft ingevoerd. Ik kan mij geen situatie voorstellen waarin dat wenselijk is.

Input mag wel geschikt gemaakt worden voor transport (naar een database) of weergave (in een webpagina). Maar daarbij wordt de oorspronkelijke input inhoudelijk niet gewijzigd.
Gewijzigd op 27/09/2017 17:15:58 door Thomas van den Heuvel
 
Frank Nietbelangrijk

Frank Nietbelangrijk

27/09/2017 17:11:40
Quote Anchor link
Jelle Breusegem op 27/09/2017 08:51:45:
Ik had ergens gelezen dat het properder en overzichtelijker programmeren is als je html, css, JavaScript en php in aparte files plaatst. Maar dus jullie raden mij aan php en html in zelfde file te plaatsen? Is daar een reden voor?


Je mag de HTML wel in een apart bestand zetten maar het belangrijkste is om de zaken gestructureerd te houden. En wat is het verschil tussen deze twee:

A:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
    // php code hier
?>

<html>
    <!-- html hier -->
</html>


en B:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
    // php code hier

    include('html_template.php');
?>

html_template.php:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<html>
    <!-- html hier -->
</html>


Het verschil is enkel dat het in twee fysiek verschillende bestanden staat. include() plempt echter de inhoud van html.template.php weer op de plek waar je die include functie aanroept. Netto resultaat is dat er qua werking geen verschil is.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.