Gegevens: |
Geschreven door: |
Dennisvb |
Moeilijkheidsgraad: |
Normaal |
Hits: |
54481 |
|
|
|
|
Formulier
1. Formulier
2. Mysql Tabel
3. Pagina: toevoegen.php (simpel)
3.1. Script
3.2. Uitleg
4. Pagina: toevoegen.php (normaal)
4.1. Script
4.2. Uitleg
5. Pagina: weergeven.php
5.1. Script
5.2. Uitleg
6. Tips bij programmeren
1. Formulier
Vanwege de verouderde code is dit de vernieuwe tutorial "Formulier"
Wanneer je de tutorials die over statements gaan hebt doorgelezen, is het tijd om een praktijkvoorbeeld te gebruiken. Voor veel mensen is deze tutorial ook een houvast.
In deze tutorial zitten twee toevoegen.php bestanden. Hiervan is er 1 een makkelijke versie en 1 is een moeilijkere versie. De moeilijkere versie is op sommige punten op een andere manier gescript en bevat ook meer mogelijkheden, zoals controleren of bepaalde velden zijn ingevuld.
Allereerst wordt het hele script van die pagina weergegeven zonder uitleg. Onder het script wordt regel voor regel uitleg over het script gegeven met verwijzing naar de bijbehoorende functies in het overzicht.
Wanneer je vragen en/of opmerkingen hebt kun je een pm naar me sturen.
top
2. Mysql Tabel
gebruik de volgende query om de mysql tabel aan te maken:
CREATE TABLE formulier (
id int(5) auto_increment,
voornaam varchar(20) not null,
achternaam varchar(20) not null,
leeftijd varchar(3) not null,
primary key(id)
)
|
top
3. Pagina: toevoegen.php (simpel)
Nu gaan we de pagina toevoegen.php maken. Hierin kunnen bezoekers van de pagina hun voornaam, achternaam en leeftijd opgeven. Er wordt niet gecontroleerd of de velden zijn ingevuld, daarvoor moet je bij de andere manier kijken.
» 3.1 Script
<?php
mysql_connect('localhost','root','');
mysql_select_db('sitemasters') or die (mysql_error());
if(isset($_POST['verzenden']))
{
$sVoornaam = addslashes($_POST['voornaam']);
$sAchternaam = addslashes($_POST['achternaam']);
$iLeeftijd = addslashes($_POST['leeftijd']);
mysql_query("INSERT INTO formulier (voornaam, achternaam, leeftijd) VALUES ('".$sVoornaam."', '".$sAchternaam."', '".$iLeeftijd."')") or die (mysql_error());
echo 'Je gegevens zijn succesvol in de database geplaatst';
}
else
{
?>
<form action="
<?=$_SERVER['PHP_SELF']?>
" method="POST">
Voornaam: <input type="text" name="voornaam"><br />
Achternaam: <input type="text" name="achternaam"><br />
Leeftijd: <input type="text" name="leeftijd"><br />
<input type="submit" name="verzenden" value="verzenden">
</form>
<?
}
?>
|
top
» 3.2 Uitleg
Hier volgt de uitleg van het script:
<?php
mysql_connect('localhost','root','');
mysql_select_db('sitemasters') or die (mysql_error());
|
We beginnen ons script met het openen van de phptag. Meteen daarna gaan we een verbinding maken met Mysql, die de database bevat waar alle gegevens in moeten komen. Dit gebeurt met mysql_connect(). Eerst plaatsen we in die functie de hostnaam (in dit geval 'localhost'). Daarna plaatsen we de gebruikersnaam en daarna komt het wachtwoord. Als je alles goed hebt ingevuld is er een verbinding met Mysql.
Nu moeten we nog de database selecteren. Dit gebeurd met de functie mysql_select_db(). Wanneer deze functie faalt zal er een error op het scherm verschijnen (Die heb je aangeroepen met de functie mysql_error() )
if(isset($_POST['verzenden']))
{
|
Hier wordt gekeken of de variabele 'verzenden' bestaat. Deze wordt met het formulier meegegeven. Wanneer de variabele bestaat, dan is er op de knop 'verzenden' geklikt, en heb je dus aangegeven dat je de gegevens in de database wilt opslaan.
$sVoornaam = addslashes($_POST['voornaam']);
$sAchternaam = addslashes($_POST['achternaam']);
$iLeeftijd = addslashes($_POST['leeftijd']);
|
Nu gaan we de variabelen ordenen die met het formulier zijn meegestuurd. We beginnen met goede variabele namen te maken. Namen zoals '$veld1' of '$ding' zijn natuurlijk lastig om mee te werken. Ik heb gekozen om elke variabele te beinnen met de letter van het soort variabele.Voornaam en Achternaam zijn allebei strings, daarom beginnen die ook met een 's'. Leeftijd is een integer (wanneer alles goed is ingevuld) en daarom beginnen we die variabele met een 'i'.
Om een Mysql Injection (Het toepassen door gebruikers van kwaadwillige codes om je database om zeep te helpen) te voorkomen, zorgen we eerst dat er geen quotes in de database kunnen komen. Dit doen we met de functie addslashes()
mysql_query("INSERT INTO formulier (voornaam, achternaam, leeftijd) VALUES ('".$sVoornaam."', '".$sAchternaam."', '".$iLeeftijd."')") or die (mysql_error());
|
Nu gaan we alles daadwerkelijk in de database zetten, aan de hand van een query. Deze roepen we aan met de functie mysql_query(). Om mysql duidelijk te maken dat we iets in de database willen zetten, gebruiken we het 'INSERT' statement. We willen alles plaatsen in de tabel 'formulier'.
Nu geven we de velden op waar iets in moet komen. We slaan het veld 'id' over, omdat Mysql die zelf invuld. We vullen de namen van de kolommen dus in, gescheiden door een komma. nu gaan we de waardes invullen. Deze komen achter 'VALUES' te staan in dezelfde volgorde als de eerdergenoemde kolommen. Plaats de variabelen buiten quotes (Klik hier voor meer informatie)
echo 'Je gegevens zijn succesvol in de database geplaatst';
}
else
{
|
Nu laten we een tekst zien dat de query gelukt is. Wanneer de query niet gelukt zou zijn, dan kwam er een foutmelding op het scherm.
We sluiten meteen de if() af en openen een else() statement. Achter else { komt alles te staan wat op het scherm moet komen als er nog niet op 'verzenden' is geklikt.
<form action="
<?=$_SERVER['PHP_SELF']?>
" method="POST">
Voornaam: <input type="text" name="voornaam"><br />
Achternaam: <input type="text" name="achternaam"><br />
Leeftijd: <input type="text" name="leeftijd"><br />
<input type="submit" name="verzenden" value="verzenden">
</form>
<?
}
?>
|
Hier komt het formulier te staan. Hier ga ik verder niks over vertellen, want dat valt allemaal na te lezen in de volgende tutorial: Formulieren
top
4 Pagina: toevoegen.php (normaal)
In dit gedeelte wordt de uitgebreidere versie besproken van toevoegen.php . Deze versie is uitgebreid met een functie die controleerd of alle velden wel zijn ingevuld. Verder zit de mysql connectie netter en veiliger in elkaar en worden er alternatieve manieren toegepast ten opzichte van de makkelijkere manier.
» 4.1 Script
<?php
if(mysql_connect('localhost','root',''))
{
mysql_select_db('sitemasters') or die(mysql_error());
}
else
{
echo 'Kan geen verbinding maken';
exit;
}
if($_SERVER['REQUEST_METHOD'] == 'POST' && !empty($_POST))
{
$aFouten = array();
if($_POST['voornaam'] == '')
{
$aFouten[] = 'Je hebt geen naam ingevuld';
}
if($_POST['achternaam'] == '')
{
$aFouten[] = 'Je hebt geen achternaam ingevuld';
}
if($_POST['leeftijd'] == '' || !is_numeric($_POST['leeftijd']))
{
$aFouten[] = 'Je hebt een ongeldige leeftijd ingevuld';
}
if(count($aFouten) != 0)
{
echo 'De volgende fouten zijn opgetreden: <br /><br />';
for($Fi = 0; $Fi < count($aFouten); $Fi++)
{
echo $aFouten[$Fi].'<br />';
}
echo '<br />Klik <a href="javascript:history.go(-1);">hier</a> om terug te keren';
}
else
{
mysql_query("INSERT INTO formulier (voornaam,achternaam,leeftijd) VALUES ('".addslashes($_POST['voornaam'])."','".addslashes($_POST['achternaam'])."','".$_POST['leeftijd']."')") or die (mysql_error());
echo 'De gegevens zijn succesvol opgeslagen in de database';
}
}
else
{
?> <form action="
<?=$_SERVER['PHP_SELF']?>
" method="POST">
Voornaam: <input type="text" name="voornaam"><br />
Achternaam: <input type="text" name="achternaam"><br />
Leeftijd: <input type="text" name="leeftijd"><br />
<input type="submit" name="verzenden" value="verzenden">
</form>
<?
}
?>
|
top
» 4.2 Uitleg
Hier volgt de uitleg van het script:
<?php
if(mysql_connect('localhost','root',''))
{
mysql_select_db('sitemasters') or die(mysql_error());
}
else
{
echo 'Kan geen verbinding maken';
exit;
}
|
Hier hebben we voor een andere verbinding gekozen dan bij de vorige manier. We openen hier eerst het if statement. Daarin voeren we de functie mysql_connect() uit. Wanneer deze functie lukt (en retourneert dus TRUE) dan gaan we verder met het selecteren van een database. Anders komt de tekst 'Kan geen verbinding maken' in beeld, en wordt het script meteen stop gezet door exit;.
if($_SERVER['REQUEST_METHOD'] == 'POST' && !empty($_POST))
{
|
Deze regel geeft aan wanneer we gebruik maken van $_POST (het formulier). Wanneer we dus op 'verzenden' hebben gedrukt, dan gaat het script verder.
$aFouten = array();
if($_POST['voornaam'] == '')
{
$aFouten[] = 'Je hebt geen naam ingevuld';
}
if($_POST['achternaam'] == '')
{
$aFouten[] = 'Je hebt geen achternaam ingevuld';
}
if($_POST['leeftijd'] == '' || !is_numeric($_POST['leeftijd']))
{
$aFouten[] = 'Je hebt een ongeldige leeftijd ingevuld';
}
|
Dit is de foutafhandeling in ons script. We willen dat de fouten netjes in een rijtje onder elkaar komen waneer ze er zijn. We zetten daarvoor alle fouten in een array. We starten de array als volgt: $aFouten = array(). Hierin staat de 'a' in aFouten voor array.
We gaan kijken of de velden zijn ingevuld. Dit doen we door ze te vergelijken met een lege string: Wanneer het veld overeen komt met die leg string is er dus niks ingevuld, en gaan we een fout aan de array toevoegen. Let er wel op dat we bij de leeftijd ook gaan controleren of de ingevoerde waarde wel een getal is. We kijken dus of er iets in is gevuld en of het nummeriek is. We scheiden deze twee eisen met OR of ||.
if(count($aFouten) != 0)
{
echo 'De volgende fouten zijn opgetreden: <br /><br />';
for($Fi = 0; $Fi < count($aFouten); $Fi++)
{
echo $aFouten[$Fi].'<br />';
}
echo '<br />Klik <a href="javascript:history.go(-1);">hier</a> om terug te keren';
|
Dit is het stukje script waar we alle fouten verzamelen en op het scherm zetten. Wanneer het aantal fouten in de array niet gelijk is aan nul (if(count($aFouten) != 0), dan zijn er dus fouten. In dat geval openen we een for-lus.
De for lus ziet er moeilijk uit maar is heel erg simpel.We beginnen in de for lus met het zeggen wat het eerste getal is. Omdat we met arrays werken is 0 het eerste getal en niet 1. Daarna gaan we het laatste getal zeggen. Dat is het totaal aantal fouten die we hebben. Tenslotte laten we zien dat er steeds 1 bij opgeteld moet worden. Nu laten we de fouten keurig op ons scherm zien.
}
else
{
mysql_query("INSERT INTO formulier (voornaam,achternaam,leeftijd) VALUES ('".addslashes($_POST['voornaam'])."','".addslashes($_POST['achternaam'])."','".$_POST['leeftijd']."')") or die (mysql_error());
echo 'De gegevens zijn succesvol opgeslagen in de database';
}
|
Nu gaan we verder wanneer er geen fouten zijn gevonden. We openen de query op dezelfde manier en we gaan op de zelfde manier te werk als in de simpele methode, alleen we voegen hier slashes toe meteen in de query in plaats van er eerst variabelen van te maken. Wanneer de query gelukt is verschijnt de tekst 'De gegevens zijn succesvol opgeslagen in de database' op het scherm.
het formulier is het zelfde als in de vorige methode, dus die behandel ik hier niet.
top
5 Pagina: weergeven.php
We zijn eindelijk aan het laatste stuk toegekomen van deze tutorial, athans, de laatste pagina van ons formulier. op deze pagina komen ale gegevens die we door middel van de 1 van de vorige scripts in de database is gezet, op het scherm.
» 5.1 Script
<?php
mysql_connect('localhost','root','');
mysql_select_db('sitemasters') or die (mysql_error());
if(mysql_result(mysql_query("SELECT COUNT(id) FROM `formulier`"),0) == 0)
{
echo 'Er staan nog geen berichten in de database';
}
else
{
?>
<table>
<tr>
<td>Voornaam:</td>
<td>Achternaam:</td>
<td>Leeftijd:</td>
</tr>
<?php
$qSelect_berichten = mysql_query('SELECT * FROM `formulier`') or die (mysql_error());
while($aBerichten = mysql_fetch_array($qSelect_berichten))
{
echo '<tr>
<td>'.$aBerichten['voornaam'].'</td>
<td>'.$aBerichten['achternaam'].'</td>
<td>'.$aBerichten['leeftijd'].'</td>
</tr>';
}
echo '</table>';
}
?>
|
top
» 5.2 Uitleg
Hier volgt de uitleg van het script:
<?php
mysql_connect('localhost','root','');
mysql_select_db('sitemasters') or die (mysql_error());
if(mysql_result(mysql_query("SELECT COUNT(id) FROM `formulier`"),0) == 0)
{
echo 'Er staan nog geen berichten in de database';
}
else
{
?>
|
We beginnen hier eerst weer met de makkelijke methode voor het maken van een database verbinding. Daaronder gaan we kijken of er wel berichten in de database staan. Dit doen we door een query uit te voeren die alle id's telt. Wanneer De functie mysql_result, die het resultaat van die query geeft, 0 retourneert, dan zitten er geen id's in de database en dus geen berichten. in dat geval komt de tekst 'Er staan nog geen berichten in de database'. Wanneer die er wel zijn, loopt het script verder.
<table>
<tr>
<td>Voornaam:</td>
<td>Achternaam:</td>
<td>Leeftijd:</td>
</tr>
|
We openen nu eerst de tabel en we maken meteen de bovenste rij aan. Deze hoeft maar 1 keer op het scherm te komen en deze heeft een statische waarde, dus hoeven we dit niet in de while te zetten.
<?php
$qSelect_berichten = mysql_query('SELECT * FROM `formulier`') or die (mysql_error());
while($aBerichten = mysql_fetch_array($qSelect_berichten))
{
echo '<tr>
<td>'.$aBerichten['voornaam'].'</td>
<td>'.$aBerichten['achternaam'].'</td>
<td>'.$aBerichten['leeftijd'].'</td>
</tr>';
}
echo '</table>';
}
?>
|
Nu gaan we alles laten zien wat er in de database staat. We voeren een query uit die alles uit de tabel 'formulier' selecteerd. Nu beginnen we een while(). We kunnen nu de waardes uit de kolommen oproepen door middel van $aBerichten[kolomnaam]. Deze while loopt door totdat alle rijen op het scherm staan. Tenslotte sluiten we de while af en ook de table.
heb je je naukeurig aan deze tutorial gehouden? Dan werkt het nu! Gefeliciteerd! Kijk ook nog onderaan deze tutorial voor handige tips bij het scripten, deze zullen je zeker helpen.
Dennis
|
Tip: Variabelen buiten quotes
|
Het is altijd het netste om je variabelen buiten quotes te zetten, maar naast variabelen ook functies, integers en superglobals, je ziet ze makkelijker en het staat netter. Probeer zoveel mogelijk gebruik te maken van enkele quotes bij echo. Hierdoor hoef je wanneer je html included nagenoeg niets te escapen. Zorg ook zoveel mogelijk dat 'statische html' buiten je php blijft, dwz. html die altijd hetzelfde blijft. Zorg ook voor goede variabele namen, bijvoorbeeld $iLeeftijd, waar de i voor integer staat of $sNaam, waar s voor string staat. Hier zijn een aantal voorbeelden van minder overzichtelijke en goede stukken script.
|
Minder Overzichtelijk:
<?php
echo "Mijn naam
is $naam zoals je al wist"; //voorbeeld 1
echo
"Zoals
je al wist is mijn naam $naam"; //voorbeeld2
echo
"$naam is mijn naam voor als
je dat niet wist"; //voorbeeld 3
$taal =
"$_POST['taal']"; //voorbeeld 4
$taal = addslashes('$_POST['taal']"); //voorbeeld 5
$taal =
"De taal is
addslashes($_POST['taal'])
geworden"; //voorbeeld 6
$getal =
"5"; //voorbeeld 7
$getal =
"5 - $waarde"; //voorbeeld 8
?>
|
Beter:
<?php
echo 'Mijn naam is '.$naam.' zoals je al wist'; //voorbeeld 1
echo 'Zoals je al wist is mijn naam'.$naam; //voorbeeld 2
echo $naam.'is mijn naam voor als je dat niet wist'; //voorbeeld 3
$taal = $_POST['taal']; //voorbeeld 4
$taal = stripslashes($_POST['taal']); //voorbeeld 5
$taal = 'De taal is '.stripslashes($_POST['taal']).' geworden'; //voorbeeld 6
$getal = 5; // voorbeeld 7
$getal = 5 - $waarde; //voorbeeld 8
?>
|
|
|