Hallo,

Op internet kom ik diversen manieren tegen om de velden te checken.


Ik ben opzoek naar een manier om ongeveer 10 velden te checken met error teruggave.
Sommige velden hebben meerdere error teruggaves bijvoorbeeld de vooraam, deze mag niet leeg zijn maar ook geen cijfers hebben.
veld is leeg "vul uw voornaam in" of cijfers "onjuiste tekens"

Daarnaast wil ik de error zelf kunnen stijlen.

Wat is nu de beste en veiligste manier om dit te doen? via javascript/jQuery of php?
Zelf gebruik ik o.a. het volgende bij validatie:


if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (empty($_POST["naam"])) {
$naamErr = "Het invullen van een naam is noodzakelijk";
} else {
$naam = test_input($_POST["naam"]);
// check if naam only contains letters and whitespace
if (!preg_match("/^[a-zA-Z ]*$/", $naam)) {
$naamErr = "Alleen letters en spaties zijn toegestaan";
}
}


Dus preg_match erbij
test_input is een functie die htmlspecialchars etc doet. Heb eerder gehoord dat deze functie misschien niet helemaal goed is dus die maar niet overnemen maar ik ben nu de eerste tijd vooral weer met andere dingen bezig. Moet eerst vooral mijn globale kennis nogal vergroten van php.

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



Voor als iemand deze code herkent, ik ben hier een klein tijdje ook geregistreerd voor kort, maar wou niet mijn hele naam op het internet hebben vandaar nu deze nicknaam.

Bovenstaande code noem ik maar erbij omdat je alleen maar lijkt te controleren op lege velden en niet erop of bijvoorbeeld een telefoonnummer alleen maar uit cijfers bestaat (terwijl in je openingspost wel staat dat je dit ook wil)

Regel 16 klopt niet trouwens
Bryan,

Let op dat je nog wel een controle doet op de correctheid van het ingevulde in PHP.
Je kijkt nu alleen of het veld leeg is.

In PHP kun je het beste dus ook nog SQL injection proberen te voorkomen.

Voorbeeldje:

<?php
if (empty($_POST["firstname"])) {
	$firstnameErr = "<label class='error'>Vul uw voornaam in</label>";
} else {
	if(HIER JE CONTROLE INVULLEN OP DE ECHTHEID == TRUE)
	{
		$firstnameok = $_POST["firstname"];
	} else {
		$firstnameErr = "<label class='error'>Ongeldige voornaam ingevuld</label>";
	}
} 
?>


Je code kan ook nog wel een stuk korter, maar zo ziet het er wel een stuk overzichtelijker uit.

Randy vsf op 26/11/2015 16:10:10

Beter maak je validatie in javascroipt(dan heb je je realtime), en voor de zekerheid check je nog een keer alles op de server, aangezien javascript uitgeschakeld of gemanipuleerd kan worden.


Dit lijkt me inderdaad de mooiste oplossing nu voor de client side check.
if (!preg_match("/^[a-zA-Z ]*$/", $naam)) {

Dan mag een naam dus alleen bestaan uit een combinatie van de 26 letters, eventueel aangevuld met een spatie

Beetje jammer voor Willem-Alexander dat het koppelteken er niet doorkomt.
Solène en François kunnen hun naam ook niet kwijt net als åsa of mensen die een ö of é in de naam hebben.
En er zijn ook wel namen te vinden met een ' erin.

Beetje jammer als zo'n controle te strikt is.
Het is belangrijker dat bepaalde tekens zeker niet in een naam voorkomen, zoals een <
Een lijst met alle toegestane letters is namelijk bijna niet te maken
@Randy vsf het is niet dat jquery voorbij is maar met angular kan je 100x meer dan jquery + je hebt jquery lite tot je beschikking in angular js.

Het blijf allebei Javascript alleen is de manier van benaderen van de DOM anders.
Maar ik zeg, bouw je validatie in Angular omdat je dan echt on the fly kan valideren en bijvoorbeeld knoppen kan verwijderen e.d om te submitten.
@rickert,

Je weet dat angular een framework is om een applicatie in te bouwen? Zonder het gebruik van angular controller en views etc.... ben je pure JS aan het schrijven....
Ik werk zelf nu een half jaar met angular, en vind dit echt een slecht advies...

Is zoiets als gebruik het hele symfony framework om alleen een hello world pagina te maken :)
Dank voor de vele reactie's :)

Ik zal mijn vraag wat duidelijker maken:
Voor de validatie wil ik realtime controle, hieronder versta ik als iemand een veld verlaat er een controle plaats vind voor dat veld.
Als iemand meerdere velden niet invult, en toch op submit klikt er voor de lege velden een error komt.
Stel er is een error en diegene vult alsnog een goede waarde in dat er een oke status komt (maak border groen).
nu kan ik natuurlijk dit doen:

$('input#firstname').blur(function()
{
    if( !$(this).val() ) {
          $(this).parents('p').addClass('error');
    }
});


Maar dan kan ik er geen verschillende teksten aanhangen, bijvoorbeeld voor een email adres.
Leeg veld: vul emailadres in
[email protected]: geen geldig email adres.

daarnaast wil zelf de meldingen kunnen stijlen en wat voor element dat het is.
Zet een span of iets onder je input, en vul die als er een foutmelding is :)
Dus in je if:
$('#spanID').html('ERROR: check input');

Die span kan je met css stylen.
<input id="firstname" data-error="custom error text" name="firstname">


$('input#firstname').blur(function()
{
    if( !$(this).val() ) {
          $(this).parents('p').addClass('error');
          $(this).parents('p').html($(this).data('error'));
    }
});

Reageren