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.
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!