php formulier controleren met kleur

Status
Niet open voor verdere reacties.

Vooysssss

Gebruiker
Lid geworden
11 jan 2006
Berichten
24
php formulier controleren.

Hallo,

Ik heb een php registratieformulier gemaakt. De gegevens worden vervolgens middels
SQL in een database gezet.

Op het moment dat je een fout maakt bij het invullen en op verzenden klikt geeft hij netjes een melding weer dat niet alle velden correct zijn ingevuld.

Maar het zou mooier zijn als in het formulier zelf met de achtergrond kleur van het invoerveld zou aangeven welke velden niet goed zijn ingevuld. ik wil dus graag weten wat ik wat ik daarvoor nodig heb wat betrefd scriptalen en dergelijke. een paar links zouden ook handig zijn . Ik heb er al op gegoogled maar gebruik waarschijnlijk niet de goede zoektermen.
 
Laatst bewerkt:
Misschien kun je de code van je formulier en de validatie code even posten?
 
De achtergrondkleur van een invoerveld kan je veranderen met CSS, met "background-color".

Nu weet ik niet wat je nu hebt, maar waarschijnlijk is het het makkelijkste om het formulier opnieuw te echoen en voordat je de textvelden echoed controleren of de velden ingevuld zijn en zo niet de de "gekleurde versie" echoen.
 
Dat wilde ik ook gaan zeggen, maar het is wel handig als hij de code even post, dan kan ik ook concrete aanwijzigingen geven, of 1 veld voordoen.

Even een voorbeeld:
Je hebt een email-veld:
HTML:
<input type="text" name="email">
In je PHP gooi je alle fouten in de $fouten-array.

PHP:
echo '<input type="text" name="email" ';
if(isset($fouten['email'])){
  echo 'style="background-color:red "';
}

echo '/>'


Dit is wel een heel abstract voorbeeld, je zult zelf even moeten uitvogelen hoe je in het if-statement kijkt of de email fout is.
 
Bedankt voor de reacties.
het is mij inmiddels gelukt met de hulp van dit forum. Voor de volledigheid nog even het script zoals het nu is. Ik weet dat sommige dingen dubbel worden gecheckt en dat hij nog niet voorzien is van commentaar maar dat komt nog wel.

PHP:
<?php 

require ("connection1.php");

$pasnr = $_POST['pasnr'];
$naam = $_POST['naam'];
$adres = $_POST['adres'];
$postcode = $_POST['postcode'];
$woonplaats = $_POST['woonplaats'];

$sql = "SELECT * FROM personen WHERE pasnr='$pasnr'";
$resultaat = mysql_query($sql) OR die ("Kan geen verbinding maken met de Database (2).");

if(isset($_POST['submit'])){
if($pasnr != "" AND $naam != "" AND $adres != "" AND $postcode != "" AND $woonplaats != ""){

if(mysql_num_rows($resultaat) == 0){ 
  
	$insert = "INSERT INTO personen (pasnr, naam, adres, postcode, woonplaats) VALUES ( '$pasnr', '$naam', '$adres', '$postcode', 		
	'$woonplaats')";
	
	mysql_query($insert) OR die ("kan gegevens niet invoeren in de database.");
	echo "Gegevens zijn ingevoerd.";
	mysql_close($verbinding);
	}

else	
	{
	echo "Het gekozen pasnummer is al in gebruik.";
	
	}}
else
{
echo "niet alle velden zijn ingevuld.";
}}
?>


<form name="form1" method="post" action="<?php $_SERVER['PHP_SELF']; ?>">
  <table width="311" border="1">
    <tr>
      <td width="82">Pasnr </td>
      <td width="213"><label>
       <?
	    echo  '<input name="pasnr" type="text" id="pasnr" maxlength="4" ';
		if($pasnr == "" OR mysql_num_rows($resultaat) != 0){
		echo 'style="background-color:red "'; 
		}
		echo '/>'
   ?>
 
Laatst bewerkt door een moderator:
Bedankt voor de reacties.
het is mij inmiddels gelukt met de hulp van dit forum. Voor de volledigheid nog even het script zoals het nu is. Ik weet dat sommige dingen dubbel worden gecheckt en dat hij nog niet voorzien is van commentaar maar dat komt nog wel.

PHP:
<?php 

require ("connection1.php");

$pasnr = $_POST['pasnr'];
$naam = $_POST['naam'];
$adres = $_POST['adres'];
$postcode = $_POST['postcode'];
$woonplaats = $_POST['woonplaats'];

$sql = "SELECT * FROM personen WHERE pasnr='$pasnr'";
$resultaat = mysql_query($sql) OR die ("Kan geen verbinding maken met de Database (2).");

if(isset($_POST['submit'])){
if($pasnr != "" AND $naam != "" AND $adres != "" AND $postcode != "" AND $woonplaats != ""){

if(mysql_num_rows($resultaat) == 0){ 
  
	$insert = "INSERT INTO personen (pasnr, naam, adres, postcode, woonplaats) VALUES ( '$pasnr', '$naam', '$adres', '$postcode', 		
	'$woonplaats')";
	
	mysql_query($insert) OR die ("kan gegevens niet invoeren in de database.");
	echo "Gegevens zijn ingevoerd.";
	mysql_close($verbinding);
	}

else	
	{
	echo "Het gekozen pasnummer is al in gebruik.";
	
	}}
else
{
echo "niet alle velden zijn ingevuld.";
}}
?>

<form name="form1" method="post" action="<?php $_SERVER['PHP_SELF']; ?>">
  <table width="311" border="1">
    <tr>
      <td width="82">Pasnr </td>
      <td width="213"><label>
       <?
	    echo  '<input name="pasnr" type="text" id="pasnr" maxlength="4" ';
		if($pasnr == "" OR mysql_num_rows($resultaat) != 0){
		echo 'style="background-color:red "'; 
		}
		echo '/>'
   ?>

Ik mag vast wel even wat commentaar leveren. Zo niet, dan toch. :p

Je begint hiermee:

PHP:
$pasnr = $_POST['pasnr'];
$naam = $_POST['naam'];
$adres = $_POST['adres'];
$postcode = $_POST['postcode'];
$woonplaats = $_POST['woonplaats'];

Waarom? Er is geen reden deze waarden apart in variabelen te zetten. Kost extra rekenkracht (al merk je daar niets van), maar maakt de boel ook niet overzichtelijker. Je moet $_POST[] gewoon zien als een normale array (een associative array, om precies te zijn). Voor meer informatie hierover -> Klik

Vervolgens maak je gebruik van een query om te kijken of het pasnummer al bestaat:

PHP:
$sql = "SELECT * FROM personen WHERE pasnr='$pasnr'";

Is om meerdere reden niet helemaal correct.

- Gebruik nooit SELECT *, maar specificeer je velden. Hier kun je gewoon 'SELECT id' gebruiken, dat is afdoende.
- Alles dat je in je database propt, moet je beveiligen. Op deze manier kan ik vrij eenvoudig je database opblazen. Zie hier. Oftewel; beveiligen met 'mysql_real_escape_string()'.
- Variabelen buiten quotes. Bevordert overzichtelijkheid. Meer informatie hierover vind je hier.

Dit zou het resultaat zijn:

PHP:
$sql = "SELECT id FROM personen WHERE pasnr = ".mysql_real_escape_string($_POST['pasnr'].")";


Vervolgens voer je de query uit met deze code:

PHP:
$resultaat = mysql_query($sql) OR die ("Kan geen verbinding maken met de Database (2).");

or die() wil je in principe niet gebruiken. Wederom een linkje.


Een paar regels daaronder doe je dit:

PHP:
if(mysql_num_rows($resultaat) == 0){

Op zich correct, maar zet dit if-statement net ónder het uitvoeren van je query, en niet na het valideren van je POST-gegevens.


Om te kijken of het formulier verzonden is, doe je dit:

PHP:
if(isset($_POST['submit'])){

Dat is niet gebruikelijk en niet netjes. Een betere manier is:

PHP:
if($_SERVER['REQUEST_METHOD'] == 'POST'){

Oftewel: 'heeft mijn gebruiker met 'post' iets verzonden?'.


Dan dit stukje:


<form name="form1" method="post" action="<?php $_SERVER['PHP_SELF']; ?>">


Dat doet niets, kijk maar eens in je broncode.

Je vergeet een echo, het zou
PHP:
 echo $_SERVER['PHP_SELF'];
moeten zijn. Maar je hebt geluk; je dient PHP_SELF überhaupt niet te gebruiken. Gewoon de naam van je script invoeren, daar heeft niemand last van.
Waarom geen PHP_SELF? Hierom.


Ik hoop dat ik je hiermee op weg heb geholpen!
 
Laatst bewerkt door een moderator:
Ik ben zoals je misschien wel door hebt nog niet zolang bezig met PHP. En met beveiliging heb ik me nog helemaal niet bezig gehouden. Inder iedergeval bedankt voor de tips. In de toekomst zal ik hier zeker wat mee doen.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan