Bestandssysteem (Maken van een gastenboek)
1. Inleiding?
2. Stap voor stap
4. Eindwoord
top
1. Inleiding
Wat moet je kunnen?
Basis kennen van PHP en loops.
HTML kennen en een simpel formpje kunnen opstellen.
Ik ga het bestandssysteem uitleggen aan de hand van een heel simpel gastenboek script.
Ik moet toegeven dat ik het idee van het zo te doen niet zelf heb gevonden, maar ergens heb gelezen.
Alle uitleg en het eigenlijke script is wel van mij.
De bedoeling is eigenlijk om geen MySQL te gebruiken om onze gegevens op te slaan.
Maar om alle gegevens in een extern bestand op te slaan.
Dus we gaan even op een rijtje zetten wat we willen doen, en daarna gaan we kijken of we dit kunnen verwezenlijken en hoe we dit gaan doen.
Stap 1: We moeten een extern bestand maken
Dit is perfect mogelijk, want er bestaat hiervoor een functie
Stap2: we gaan een formuliertje maken waar alle gegevens in worden gevoerd
HTML... niets meer
Stap3: we gaan deze gegevens verwerken
We zetten alle gegevens in 1 variabele, dan slaan we die variabele op in 1 bestand
Stap4: we gaan de gegevens aanroepen
We openen ons extern bestand en roepen doormiddel van een loop alle gegevens op/B>
top
2. Stap voor stap
Nu gaan we stap 1 tot en met Stap 4 afgaan tot we ons gastenboekje hebben.
Stap 1: We moeten een extern bestand maken
Zoals ik al zei, hier bestaat een simpele functie voor, laten we die eens bekijken.
<?php
$fp = fopen("gb.dat", "a");
?>
|
Het leuke aan deze functie is dat we die zoveel keer kunnen uitvoeren als we willen.
Enkel de eerstse keer maakt hij het bestand aan, en als het al is aangemaakt dan 'opent' de functie het bestand.
Omdat we de functie in een variabele zetten doet het eigenlijk nu niet veel, pas als we de variabele gebruiken wordt het bestand geopend.
Stap2: we gaan een formuliertje maken waar alle gegevens in worden gevoerd
Puur HTML, ik heb iets heel primitief genomen, je kan er ook vanalle andere gegevens in zetten zoals email etc.
<form method="post" action="verwerk.php" name="formuliertje">
Geef uw naam:
<input type="text" name="naam"><br />
Het bericht:
<textarea name="bericht" cols="35" rows="10"></textarea><br />
<input type="submit" value="Submit" name="submit">
</form>
|
Ik hoop dat dit voor zich spreekt, even voor de duidelijkheid: je laat een naam en een bericht ingeven, dan laat je hen op de submit knop duwen.
Als dit is gebeurd worden ze doorverbonden met verwerk.php, wat ons bij stap 3 brengt.
Slaag dit op als form.htm
Stap3: we gaan deze gegevens verwerken
Eerst het scriptje, dan volgt de uitleg.
<?php
ob_start();
$fp = fopen("gb.dat", "a");
$bericht = nl2br($_POST['bericht']);
$bericht = ereg_replace("
", "", $bericht);
//$bericht = ubb($bericht);
$gegevens = $_POST['naam'] ."___". $bericht ."
";
fwrite($fp, $gegevens);
fclose($fp);
header("location: lezen.php");
?>
|
We beginnen met ob_start(), deze functie zorgt ervoor dat we straks geen headers allready sent error krijgen.
Want als de persoon op submit heeft geklikt en de gegevens zijn verwerkt moet hij doorverbonden worden de pagina waar alles wordt weergegeven.
Dan komt er wat in stap 1 beschreven staat.
We laten het maken vh bestand opslaan in een variabele $fp (wat staat voor filepointer).
Je kna natuurlijk $fp veranderen door $iets_anders maar dan moet je dat wel overal in je script doen.
Vervolgens stellen we de waarde $bericht gelijk aan het bericht dat er is gepost ($_POST['bericht']).
We laten het filteren en de enters die zijn getypt omzetten naar html = < br >.
Zodat niet alles op 1 lijn wordt weergegeven, maar alles mooi onder elkaar.
Dan vervangen we
in het bericht door niets, omdat we
zelf voor iets anders gaat gebruiken.
En als de poster een beetje lastig doet en
gebruikt, dan is heel de layout en het script om zeep.
Ik heb het volgende als commentaar erbij gezet, omdat de functie ubb() niet bestaat, maar als je wil kan je die aanmaken.
Deze tutorial gaat echter niet om het maken van een ubb script, vandaar dat ik dat nu ook niet bespreek.
$gegevens = $_POST['naam'] ."___". $bericht ."
";
|
Dit kunnen we misschien beter iets beter gaan bekijken.
We maken een variabele $gegevens, en daarin slaan we de naam van de persoon op.
Dan zetten we drie underscores (lage streepjes) voor het onderscheiden van het bericht en de poster.
En dan komt het eigenlijke bericht.
Daarna zetten we
, dit om het onderscheid te maken tussen verschillende berichten.
Daarom hebben we ook het bericht eerst laten filteren, anders had het hier niet mooi gestaan.
Met fwrite() schrijf (write) je gegevens weg naar een bestand.
In ons geval open je eerst gb.dat (gastboek.dat) via $fp, daarna zet je er de gegevens in ($gegevens).
Dus even samengevat: met fwrite schrijf je de gegevens van de tweede parameter naar de eerste parameter.
Altijd mooi afsluiten via fclose() om errors te voorkomen.
En dan doorverbinden naar bekijken van onze ingevoerde data in lezen.php, wat ons bij stap 4 brengt.
Stap4: we gaan de gegevens aanroepen
Onze laatste stap, ik ga weer eerst het volledige script geven en dan de uitleg.
<?php
$file = "gb.dat";
if(file_exists($file)){
$fp = fopen($file, "r");
$inhoud = fread($fp, filesize($file));
$inhoud = explode("
", $inhoud);
foreach($inhoud as $gegevens){
$gegevens = explode("___", $gegevens);
?>
<table border="1">
<tr>
<td valign="top">
NAAM:
</td>
<td valign="top">
<?php
echo $gegevens['0'];
?>
</td>
</tr>
<tr>
<td valign="top">
Bericht:
</td>
<td valign="top">
<?php
echo $gegevens['1'];
?>
</td>
</tr>
</table>
<?php
}
fclose($fp);
echo "<a href="form.htm">Schrijf iets</a>";
}
else{
echo "<a href="form.htm">Schrijf iets</a>";
}
?>
|
Eerst gaan we onze file in een variabele zetten omdat we deze nogal veel gaan gebruiken.
Dan gaan we kijken of het bestaat, zoniet dan geven we een linkje naar het schrijven, zoja dan gaan we verder.
Waarom ik dit doe is simpel, mocht ik dit niet doen gaat hij proberen te lezen uit het bestand wat niet gaat omdat het nog niet is aangemaakt.
Daarna maken we in $inhoud alle gegevens die in de file staan lezen.
Even kort fread() bespreken: we lezen alle gegevens van de 2e parameter en openen het bestand via de eerste paramter, de waarde zetten we in de variabele die ervoor staat.
Nu maken we van $inhoud een rij en zetten daar elk bericht (plus de naam) in.
Zodat we nu via de foreach() loop alle gegevens kunnen onttrekken.
We maken van $gegevens een nieuwe rij, via explode, waardoor het bericht en de naam worden onderschijden.
Snap je nu waarom ik bij het wegschrijven drie underscores heb gebruikt.
Nu denk je misschien: ja, wat als de poster nu eens drie underscores heeft gebruikt in zijn bericht, wat dan?
Goede vraag, en je hebt gelijk, maar welke onozelaar gaat er nu 3 underscores na elkaar in een bericht zetten.
Of de persoon moet weten hoe je script is opgebouwd en wil het perce verstoren.
Mocht dit zo zijn, dan open je gb.dat via kladblok en edit je zijn bericht.
Nu is het enkel weergeven van gegevens.
De naam zit in de $gegevens array in het eerste gegeven, en het bericht in het tweede.
Na het weergeven van alles mooi afsluiten en ook een linkje zetten voor de mensen die willen schrijven.
top
3. Eindwoord
Meer is het eigelijk niet, je gastenboek is nu af, nu kan je extraatjes toevoegen.
Een ubb scriptje, email adres invoer mogelijkheid, en natuurlijk DE LAYOUT.
Want die van mij is ronduit belachelijk, maar het is het skelet dat ik heb gemaakt.
Nu moet jij dat skelet aankleden.
Heb je nog vragen? Stel deze dan op het forum.
|