Tutorials
#2 Simpel Forum compleet in te bouwen V.2
In deze toturial leer ik je met HÉÉL veel commentaar op een goede manier een simpel forum te maken in je eigen geschreven php code.. [By MarViiN's]
Pagina 1
Inleiding
Hier is de versie 2 van het simpele forum. Ik heb eigenlijk nog steeds helemaal niets aan de layout gedaan omdat dat niet mijn doel is. Mijn doel is om een beginnende php’er op een makkelijke en vooral duidelijke manier te leren hoe je in dit geval met vrij weinig code (ja dan moet je weer mijn commentaar uit de code wegdenken) en niet al te veel kennis al een behoorlijk forum kan bouwen met diverse mogelijkheden. In alle stappen van de tutorial zul je bijna bij elke regel een zeer uitgebreid commentaar vinden. Dit om ervoor te zorgen dat het ook daadwerkelijk duidelijk wordt wat er gebeurd.. mocht er iets niet kloppen stuur me dan even een pm of post je reactie hieronder.. ik hoop dat ik hiermee weer een aantal mensen op weg help.
Ik heb dit forum niet helemaal uitgewerkt. Wat ik wel heb gedaan is dat ik van alle benodigde queries minstens 1 heb gebruikt zodat als je klaar bent met deze tutorial je de rest eventueel zelf kan maken, want die kennis heb je dan natuurlijk hoop ik ;-)
denk hierbij aan de queries:
[color='red']SELECT[/color], [color='red']INSERT INTO[/color] ,[color='red']UPDATE[/color], en [color='red']DELETE[/color]
Verder wil ik nog wel even zeggen dat ik er wel vanuit ga dat je al een redelijke kennis hebt van HTML. De opmaak in deze tutorial is voornamelijk tabellen. Dit omdat ik geen aandacht schenk aan de layout en daarom dus gekozen heb voor tabellen. Nogmaals als je klaar bent kun je zelf aan de slag voor een mooie bij jou site passende layout.. en onthoud.. dit is 101% beginners tutorial.. dus heel veel dingen kunnen veel sneller gedaan worden maar ik doe het zo uitgebreid mogelijk.
BELANGRIJK.. om de tutorial duidelijker te maken zal ik elke stuk code die we nodig hebben tussen 2 rode lijnen plaatsen zoals dit voorbeeld:
[color='red']==============paginanaam=================[/color]
<?php
Echo 'ik ben marvin en schrijf deze tutorial nu 19-april 03:48';
?>
[color='red']===================================[/color]
Alle code die niet tussen 2 rode strepen staan zijn puur uitleg om het duidelijker te maken. Deze stukken die buiten de strepen vallen hoef je dus niet in je script op te nemen.
Ik zou zeggen,
‘ga beginnen en veel plezier (en veel succes natuurlijk)…’
Marviins
Ik heb dit forum niet helemaal uitgewerkt. Wat ik wel heb gedaan is dat ik van alle benodigde queries minstens 1 heb gebruikt zodat als je klaar bent met deze tutorial je de rest eventueel zelf kan maken, want die kennis heb je dan natuurlijk hoop ik ;-)
denk hierbij aan de queries:
[color='red']SELECT[/color], [color='red']INSERT INTO[/color] ,[color='red']UPDATE[/color], en [color='red']DELETE[/color]
Verder wil ik nog wel even zeggen dat ik er wel vanuit ga dat je al een redelijke kennis hebt van HTML. De opmaak in deze tutorial is voornamelijk tabellen. Dit omdat ik geen aandacht schenk aan de layout en daarom dus gekozen heb voor tabellen. Nogmaals als je klaar bent kun je zelf aan de slag voor een mooie bij jou site passende layout.. en onthoud.. dit is 101% beginners tutorial.. dus heel veel dingen kunnen veel sneller gedaan worden maar ik doe het zo uitgebreid mogelijk.
BELANGRIJK.. om de tutorial duidelijker te maken zal ik elke stuk code die we nodig hebben tussen 2 rode lijnen plaatsen zoals dit voorbeeld:
[color='red']==============paginanaam=================[/color]
<?php
Echo 'ik ben marvin en schrijf deze tutorial nu 19-april 03:48';
?>
[color='red']===================================[/color]
Alle code die niet tussen 2 rode strepen staan zijn puur uitleg om het duidelijker te maken. Deze stukken die buiten de strepen vallen hoef je dus niet in je script op te nemen.
Ik zou zeggen,
‘ga beginnen en veel plezier (en veel succes natuurlijk)…’
Marviins
edit
in het bijzonder wilde ik thijs even bedanken voor zijn grondige tests op dit gemaakt forum.. er zijn een aantal foutjes uitgekomen waarvan 1 groot lek haha die is gedicht en de tutorial is er op aangepast..
Pagina 2
Database klaarmaken & scriptje voor verbinding sch
Als je een forum hebt moeten de berichten ergens opgeslagen worden.
dat doen we in de database.. voor deze tutorial maak ik gebruik van een database genaamd 'forum' ... in deze tabel vinden we 3 tabellen.. om goed
onderscheid te maken van de functies van deze 3 tabellen heb ik voor het makkelijke maar gekozen voor de namen 'topic' en 'reactie' en 'gebruiker'.. dit zodat een beginnend php'er een goed overzicht bij heeft van welke informatie in welke tabel thuishoort.
We gaan nu de database vullen met bovengenoemde tabellen. Als je niet weet hoe dit moet moet je even KLIK tutorial van Bas Kreleger bekijken. hij legt in deze tutorial helemaal uit hoe je dit doet (stap voor stap).
Als je dit kan kun je met de volgende code je database maken.
oke nu is je database klaar.. nu gaan we alvast even een klein stukje script schrijven om de verbinding met je database te maken aangezien we die een aantal keer nodig zullen hebben in de rest van het script. We maken een nieuw lege pagina en die noemen we ‘verbind.php’ de inhoud van deze pagina wordt:
[color='red']===============verbind.php================[/color]
[color='red']===================================[/color]
Nou dit was het begin. Stelt nog niet zoveel voor natuurlijk… Op naar de volgende pagina. dan gaan we een script maken om te registreren. Zonder leden kunnen we natuurlijk niets toevoegen.
dat doen we in de database.. voor deze tutorial maak ik gebruik van een database genaamd 'forum' ... in deze tabel vinden we 3 tabellen.. om goed
onderscheid te maken van de functies van deze 3 tabellen heb ik voor het makkelijke maar gekozen voor de namen 'topic' en 'reactie' en 'gebruiker'.. dit zodat een beginnend php'er een goed overzicht bij heeft van welke informatie in welke tabel thuishoort.
We gaan nu de database vullen met bovengenoemde tabellen. Als je niet weet hoe dit moet moet je even KLIK tutorial van Bas Kreleger bekijken. hij legt in deze tutorial helemaal uit hoe je dit doet (stap voor stap).
Als je dit kan kun je met de volgende code je database maken.
CREATE TABLE topic(
topic_id INT(4) NOT NULL auto_increment,
topic_titel VARCHAR(50),
gebruiker_id INT(4),
topic_bericht LONGTEXT,
topic_datumtijd DATETIME,
PRIMARY KEY (topic_id)
);
CREATE TABLE reactie (
reactie_id INT(4) NOT NULL auto_increment,
topic_id INT(4),
gebruiker_id INT(4),
reactie_bericht LONGTEXT,
reactie_datumtijd DATETIME,
PRIMARY KEY (reactie_id)
);
CREATE TABLE gebruiker (
gebruiker_id INT(4) NOT NULL auto_increment,
gebruiker_naam VARCHAR(20),
gebruiker_wachtwoord VARCHAR(32),
gebruiker_email VARCHAR(40),
gebruiker_afbeelding VARCHAR(200) default 'hier een link naar een afbeelding',
gebruiker_rank INT(1) default '3',
PRIMARY KEY (gebruiker_id)
);
oke nu is je database klaar.. nu gaan we alvast even een klein stukje script schrijven om de verbinding met je database te maken aangezien we die een aantal keer nodig zullen hebben in de rest van het script. We maken een nieuw lege pagina en die noemen we ‘verbind.php’ de inhoud van deze pagina wordt:
[color='red']===============verbind.php================[/color]
<?php
mysql_connect("localhost", "gebruikersnaam", "wachtwoord")or die("er is een foutje met de verbinding");
// hier vul je de gegevens in van je database..
mysql_select_db("forum")or die("de database kan niet gevonden worden");
// en hier de naam van je database bijvoorbeeld ‘forum’
?>
[color='red']===================================[/color]
Nou dit was het begin. Stelt nog niet zoveel voor natuurlijk… Op naar de volgende pagina. dan gaan we een script maken om te registreren. Zonder leden kunnen we natuurlijk niets toevoegen.
Pagina 3
Registratie script maken.
Als iemand wilt registreren betekent dat, dat er gegevens moeten worden toegevoegd aan de database. Zodat we de volgende keer ook nog weten dat iemand geregistreerd is en dus kan en mag inloggen.. We maken nu een pagina aan en die noemen we registreren.php ..
de opbouw van de query die hier voor nodig is ziet er als volgt uit:
[color='red']INSERT INTO[/color] [color='green']gebruiker[/color] [color='red'](gebruiker_naam, gebruiker_wachtwoord, gebruiker_email, gebruiker_afbeelding)[/color]
Dat is natuurlijk nog geen complete query want er moeten waardes in de velden gebruiker_naam, gebruiker_wachtwoord, en gebruiker_email en gebruiker_afbeelding worden gezet. De query moet als hij klaar is ongeveer deze structuur hebben:
[color='red']INSERT INTO[/color] [color='green']gebruiker[/color] [color='red'](gebruiker_naam, gebruiker_wachtwoord, gebruiker_email, gebruiker_afbeelding) VALUES ('[/color][color='green']marvin[/color][color='red']','[/color][color='green']wachtwoord[/color][color='red']','[/color][color='green']tutorial[at]marviins.nl[/color][color='red']','[/color][color='green']h**p://site.nl/plaatje.jpg[/color][color='red']');[/color]
Hoe krijgen we nou deze gewenste gegevens in die query?
dat gaan we hieronder stap voor stap doen..
Als eerste moeten we een pagina maken die uit 2 delen bestaat.. een invul deel (zodat de gebruiker iets kan invullen).. en een deel dat die gegevens verwerkt. Dat doen we met deze code:
<?php
if(isset($_POST['registreer'])){
// als er op de knop ‘registreer’ is gedrukt willen we deze helft gebruiken
// die de gegevens verwerkt
}else{
// als er geen knop in is gedrukt willen we deze helft gebruiken
// die het invulveld weergeeft
}
?>
Voordat de knop is ingedrukt moet er eerst een knop gemaakt worden die dus komt te staan in het onderste deel (want dat is het deel die we als eerste zien.. dat komt omdat we de bovenste helft natuurlijk pas zien ALS er een knop is ingedrukt die als naam heeft ‘registreer’..
we voegen de knop (inclusief invulformulier) toe aan het stukje script en dan wordt bovenstaand stukje dus gewijzigd naar:
Zo het formulier is af.. hij stuurt de ingevulde gegevens naar registreren.php (naar zichzelf dus)..
Nu moeten we de gegevens verwerken in het bovenste deel..
dat zouden we kunnen doen met deze code:
<?php
$query = "INSERT INTO gebruiker (gebruiker_naam, gebruiker_wachtwoord, gebruiker_email, gebruiker_afbeelding)
VALUES('".$_POST['gebruikersnaam']."','".$_POST['wachtwoord1']."','".$_POST['emailadres']."');";
// de gegevens kunnen we opvangen door de $_POST te gebruiken met als naam de naam van het formulier
// veldje.. kijk maar naar het formulier van net.
$sql = mysql_query($query)or die(mysql_error());
// we voeren de query uit
echo 'U bent succesvol aangemeld. Hieronder kunt u inloggen:';
// en we zijn aangemeld..
?>
er is 1 HELE GROTE MAAAAR.. dit is totaal niet veilig.. want jij en ik weten allebei niet wat iemand intikt in het formulier..je moet vanaf dit moment voor ALTIJD onthouden dat je geen enkele variabele (bijvoorbeeld $_POST['gebruikersnaam']) rechtsreeks in je database stopt.. we moeten deze ALTIJD eerst controleren.
dit kun je doen met verschillende redenen:
- html codes eruit filteren
- tekens die je sql code kunnen beïnvloeden zoals ' en " eruit filteren
controleren kun je ook doen omdat je wil kijken of een email adres wel echt een email adres is en niet zomaar een willekeurige tekst.
in het registratie formulier gaan we diverse dingen controleren..
we beginnen met het email adres, daarvoor gebruiken we deze functie voor (van phphulp):
<?php
function email_validator($email){
// hierboven staat $email, als we de functie aanroepen met email_validator('[email protected]')
// dan heeft $email dus de waarde [email protected]. de variabele $email is alleen maar geldig
// binnen deze functie dus hierbuiten is $email niet meer bekend
if (eregi("^[0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\\.[a-z]{2,4}$",$email)){
// als de invoer voldoet aan bovenstaande eisen van een emailadres
// denk hierbij aan of er wel een @ in staat.. en of hij eindigd met minimaal 2, maximaal 4
// tekens na de laatste . dus bijvoorbeeld .com, .nl. eu, .fr dan wordt $geldig 'ja'
// en zoniet 'nee'
$geldig = 'ja';
}else{
$geldig = 'nee';
}
return $geldig;
// hiermee stuurt hij de waarde van $geldig terug naar de plaats waar de functie is aangeroepen
// dat zien we zometeen
}
?>
dat was nog niet zo moeilijk toch?
Ook moeten we kijken of de ingevulde gebruikersnaam al bezet is want dubbele namen willen we niet.
dat doen we met deze functie:
<?php
function gebruikersnaam_check($gebruikersnaam){
// de input ($gebruikersnaam) is weer de waarde die meegestuurd wordt met het vragen naar de functie
$gebruikersnaam_query = "SELECT gebruiker_naam FROM gebruiker WHERE gebruiker_naam='".$gebruikersnaam."';";
// we maken gewoon een query die alle gebruikers als uitkomst geeft die die naam hebben
$gebruikersnaam_sql = mysql_query($gebruikersnaam_query)or die(mysql_error());
// we voeren de qeury uit
if(mysql_num_rows($gebruikersnaam_sql) == 0){
// als het resultaat 0 is (dus niemand heet zo) dan zeggen we dat hij niet bezet is
$bezet = 'nee' ;
}else{
// als de uitkomst geen 0 is heeft iemand deze naam dus al en dan zeggen we dat hij bezet is
$bezet = 'ja';
}
return $bezet;
we sturen ja of nee terug naar de aanroep
}
?>
misschien denk je nu hoe je deze functies aan moet roepen maar dat wordt zometeen helemaal duidelijk..
we hebben n al 2 functies gemaakt.. er komt een 3e daarmee kijken we of het emailadres misschien al
gebruikt is want het is niet leuk als iemand zich 100 keer aanmeld.. dat doen we met een functie die bijna
hetzelfde is als de gebruikersnaam_check maar dan zoeken we op email adres.
<?
function email_check($email){
$email_query = "SELECT gebruiker_email FROM gebruiker WHERE gebruiker_email='".$email."';";
$email_sql = mysql_query($email_query)or die(mysql_error());
if(mysql_num_rows($email_sql) == 0){
$bezet = 'nee';
}else{
$bezet = 'ja' ;
}
return $bezet;
}
?>
bij deze geef ik geen uitleg.. dit spreekt voor zich als je de vorige gebruikerscheck al hebt gezien.
dit waren voor het registreren eigenlijk de allerbelangrijkste checks..
nu gaan we door middel van een best lang stukje php alle gegevens bekijken voordat we het opslaan.
lees het commentaar en dan snap je het wel. lees het desnoods 2x
<?php
if(trim($_POST['gebruikersnaam']) == ""){
// we willen geen legen velden hebben in de database
// dus hier kijken we of het veldje gebruikersnaam uit
// het formulier van net wel ingevuld is.. trim haalt alles
// spaties voor en achter de string weg. dit is noodzakelijk
// want hierboven checken we of de string leeg is,
// als iemand daar alleen een spatie intikt is die niet meer leeg
// en komt die dus door de check terwijl die voor ons wel leeg
// lijkt dus daarom doen we trim erover heen dan kan dit truukje
// niet meer, maarja als die WEL ECHT ingevuld is gaat die
// naar de volgende zoniet krijg je deze melding:
echo 'U heeft geen gebruikersnaam ingevuld';
}elseif(gebruikersnaam_check($_POST['gebruikersnaam']) == 'ja'){
// kijk hier in deze regel roep je de functie die je net
// gemaakt heb aan. je zegt dan ga naar de functie
// gebruikersnaam_check en geef als input waarde $_POST['gebruikersnaam']
// de functie zal dus $_POST['gebruikersnaam'] in die
// $gebruikersnaam stoppen binnen de functie en dan krijgt hij
// die return waarde terug. als dit Ja is (dus bezet) dan deze melding:
echo 'Deze gebruikersnaam is al in gebruik, kies a.u.b een ander.';
}elseif($_POST['wachtwoord1'] != $_POST['wachtwoord2']){
// hier kijken we gewoon heel simpel of wachtwoord 1 en 2
// wel hetzelfde zijn ingetypt.. zoniet weer een melding:
echo 'De opgegeven wachtwoorden komen niet overeen';
}elseif($_POST['wachtwoord1'] == ""){
// als wachtwoord 1 leeg is moeten we ook een melding geven
// misschien denk je waarom ik dit niet bij wachtwoord 2 ook
// doe maar dat is niet nodig.. als wachtwoord1 leeg is
// krijg je toch al een melding. en als hij niet leeg is
// en wachtwoord2 wel.. dan zijn ze niet gelijk dus krijg
// je ook een melding, snapje?
echo 'Er zijn geen wachtwoord<b>en</b> opgegeven';
}elseif(email_validator($_POST['emailadres']) == 'nee'){
// hier roepen we weer een functie aan om het emailadres
// te controleren. als de return 'nee' is voldoet het adres
// niet aan de eisen die wij in de functie hebben vastgelegd
echo 'Het ingevulde emailadres is niet geldig';
}elseif(email_check($_POST['emailadres']) == 'ja'){
// nogmaals een functie aanroepen om te kijken of die
// misschien al bezet is..
echo 'Er is al iemand geregistreerd met dit emailadres.';
}else{
// en mocht nou ALLES hierboven goedgegaan zijn DAN (ja eindelijk)
// DAN mag het in de database gezet worden.
// hieronder volgt de query
$query = "
INSERT INTO gebruiker
(gebruiker_naam, gebruiker_wachtwoord, gebruiker_email)
VALUES
('".mysql_real_escape_string(trim($_POST['gebruikersnaam']))."',
'".md5($_POST['wachtwoord1'])."',
'".$_POST['emailadres']."');";
// mysql_real_escape_string gebruiken we om dingen als ' en "
// 'veilig' te maken voor de query (en database) mysql_real_escape_string
// maakt van een ' een \' en van " een \" dan weet de database
// dat het een speciaal teken is en geen SQL code.
// de md5() gebruiken we om het opgegeven wachtwoord te coderen
// met md5.. dit is veel veiliger in de database te zetten als het letterlijke
// wachtwoord
$sql = mysql_query($query)or die(mysql_error());
// we voeren de query uit en voila gebruiker is toegevoegd
echo 'U bent succesvol aangemeld. Hieronder kunt u inloggen:';
include('inloggen.php');
// als je bent geregistreerd mag je inloggen dus laten
// we de inlog pagina includen (die er nog niet is maar
// die gaan we nu maken...
}
?>
zo snap je het nog?
de registratie pagina is klaar en die komt er dus zo uit te zien
[color='red']=============registreren.php================[/color]
[color='red']===================================[/color]
op naar de volgende pagina ;-)
de opbouw van de query die hier voor nodig is ziet er als volgt uit:
[color='red']INSERT INTO[/color] [color='green']gebruiker[/color] [color='red'](gebruiker_naam, gebruiker_wachtwoord, gebruiker_email, gebruiker_afbeelding)[/color]
Dat is natuurlijk nog geen complete query want er moeten waardes in de velden gebruiker_naam, gebruiker_wachtwoord, en gebruiker_email en gebruiker_afbeelding worden gezet. De query moet als hij klaar is ongeveer deze structuur hebben:
[color='red']INSERT INTO[/color] [color='green']gebruiker[/color] [color='red'](gebruiker_naam, gebruiker_wachtwoord, gebruiker_email, gebruiker_afbeelding) VALUES ('[/color][color='green']marvin[/color][color='red']','[/color][color='green']wachtwoord[/color][color='red']','[/color][color='green']tutorial[at]marviins.nl[/color][color='red']','[/color][color='green']h**p://site.nl/plaatje.jpg[/color][color='red']');[/color]
Hoe krijgen we nou deze gewenste gegevens in die query?
dat gaan we hieronder stap voor stap doen..
Als eerste moeten we een pagina maken die uit 2 delen bestaat.. een invul deel (zodat de gebruiker iets kan invullen).. en een deel dat die gegevens verwerkt. Dat doen we met deze code:
<?php
if(isset($_POST['registreer'])){
// als er op de knop ‘registreer’ is gedrukt willen we deze helft gebruiken
// die de gegevens verwerkt
}else{
// als er geen knop in is gedrukt willen we deze helft gebruiken
// die het invulveld weergeeft
}
?>
Voordat de knop is ingedrukt moet er eerst een knop gemaakt worden die dus komt te staan in het onderste deel (want dat is het deel die we als eerste zien.. dat komt omdat we de bovenste helft natuurlijk pas zien ALS er een knop is ingedrukt die als naam heeft ‘registreer’..
we voegen de knop (inclusief invulformulier) toe aan het stukje script en dan wordt bovenstaand stukje dus gewijzigd naar:
<?php
if(isset($_POST['registreer'])){
// als er op de knop ‘registreren’ is gedrukt willen we deze helft gebruiken
}else{
?>
<form action="registreren.php" method="POST">
Gebruikersnaam:<input type="text" name="gebruikersnaam">
Wachtwoord:<input type="password" name="wachtwoord1">
Wachtwoord nogmaals:<input type="password" name="wachtwoord2">
Emailadres:<input type="text" name="emailadres">
<input type="submit" name="registreer" value="Aanmelden">
</form>
<?php
}
?>
Zo het formulier is af.. hij stuurt de ingevulde gegevens naar registreren.php (naar zichzelf dus)..
Nu moeten we de gegevens verwerken in het bovenste deel..
dat zouden we kunnen doen met deze code:
<?php
$query = "INSERT INTO gebruiker (gebruiker_naam, gebruiker_wachtwoord, gebruiker_email, gebruiker_afbeelding)
VALUES('".$_POST['gebruikersnaam']."','".$_POST['wachtwoord1']."','".$_POST['emailadres']."');";
// de gegevens kunnen we opvangen door de $_POST te gebruiken met als naam de naam van het formulier
// veldje.. kijk maar naar het formulier van net.
$sql = mysql_query($query)or die(mysql_error());
// we voeren de query uit
echo 'U bent succesvol aangemeld. Hieronder kunt u inloggen:';
// en we zijn aangemeld..
?>
er is 1 HELE GROTE MAAAAR.. dit is totaal niet veilig.. want jij en ik weten allebei niet wat iemand intikt in het formulier..je moet vanaf dit moment voor ALTIJD onthouden dat je geen enkele variabele (bijvoorbeeld $_POST['gebruikersnaam']) rechtsreeks in je database stopt.. we moeten deze ALTIJD eerst controleren.
dit kun je doen met verschillende redenen:
- html codes eruit filteren
- tekens die je sql code kunnen beïnvloeden zoals ' en " eruit filteren
controleren kun je ook doen omdat je wil kijken of een email adres wel echt een email adres is en niet zomaar een willekeurige tekst.
in het registratie formulier gaan we diverse dingen controleren..
we beginnen met het email adres, daarvoor gebruiken we deze functie voor (van phphulp):
<?php
function email_validator($email){
// hierboven staat $email, als we de functie aanroepen met email_validator('[email protected]')
// dan heeft $email dus de waarde [email protected]. de variabele $email is alleen maar geldig
// binnen deze functie dus hierbuiten is $email niet meer bekend
if (eregi("^[0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\\.[a-z]{2,4}$",$email)){
// als de invoer voldoet aan bovenstaande eisen van een emailadres
// denk hierbij aan of er wel een @ in staat.. en of hij eindigd met minimaal 2, maximaal 4
// tekens na de laatste . dus bijvoorbeeld .com, .nl. eu, .fr dan wordt $geldig 'ja'
// en zoniet 'nee'
$geldig = 'ja';
}else{
$geldig = 'nee';
}
return $geldig;
// hiermee stuurt hij de waarde van $geldig terug naar de plaats waar de functie is aangeroepen
// dat zien we zometeen
}
?>
dat was nog niet zo moeilijk toch?
Ook moeten we kijken of de ingevulde gebruikersnaam al bezet is want dubbele namen willen we niet.
dat doen we met deze functie:
<?php
function gebruikersnaam_check($gebruikersnaam){
// de input ($gebruikersnaam) is weer de waarde die meegestuurd wordt met het vragen naar de functie
$gebruikersnaam_query = "SELECT gebruiker_naam FROM gebruiker WHERE gebruiker_naam='".$gebruikersnaam."';";
// we maken gewoon een query die alle gebruikers als uitkomst geeft die die naam hebben
$gebruikersnaam_sql = mysql_query($gebruikersnaam_query)or die(mysql_error());
// we voeren de qeury uit
if(mysql_num_rows($gebruikersnaam_sql) == 0){
// als het resultaat 0 is (dus niemand heet zo) dan zeggen we dat hij niet bezet is
$bezet = 'nee' ;
}else{
// als de uitkomst geen 0 is heeft iemand deze naam dus al en dan zeggen we dat hij bezet is
$bezet = 'ja';
}
return $bezet;
we sturen ja of nee terug naar de aanroep
}
?>
misschien denk je nu hoe je deze functies aan moet roepen maar dat wordt zometeen helemaal duidelijk..
we hebben n al 2 functies gemaakt.. er komt een 3e daarmee kijken we of het emailadres misschien al
gebruikt is want het is niet leuk als iemand zich 100 keer aanmeld.. dat doen we met een functie die bijna
hetzelfde is als de gebruikersnaam_check maar dan zoeken we op email adres.
<?
function email_check($email){
$email_query = "SELECT gebruiker_email FROM gebruiker WHERE gebruiker_email='".$email."';";
$email_sql = mysql_query($email_query)or die(mysql_error());
if(mysql_num_rows($email_sql) == 0){
$bezet = 'nee';
}else{
$bezet = 'ja' ;
}
return $bezet;
}
?>
bij deze geef ik geen uitleg.. dit spreekt voor zich als je de vorige gebruikerscheck al hebt gezien.
dit waren voor het registreren eigenlijk de allerbelangrijkste checks..
nu gaan we door middel van een best lang stukje php alle gegevens bekijken voordat we het opslaan.
lees het commentaar en dan snap je het wel. lees het desnoods 2x
<?php
if(trim($_POST['gebruikersnaam']) == ""){
// we willen geen legen velden hebben in de database
// dus hier kijken we of het veldje gebruikersnaam uit
// het formulier van net wel ingevuld is.. trim haalt alles
// spaties voor en achter de string weg. dit is noodzakelijk
// want hierboven checken we of de string leeg is,
// als iemand daar alleen een spatie intikt is die niet meer leeg
// en komt die dus door de check terwijl die voor ons wel leeg
// lijkt dus daarom doen we trim erover heen dan kan dit truukje
// niet meer, maarja als die WEL ECHT ingevuld is gaat die
// naar de volgende zoniet krijg je deze melding:
echo 'U heeft geen gebruikersnaam ingevuld';
}elseif(gebruikersnaam_check($_POST['gebruikersnaam']) == 'ja'){
// kijk hier in deze regel roep je de functie die je net
// gemaakt heb aan. je zegt dan ga naar de functie
// gebruikersnaam_check en geef als input waarde $_POST['gebruikersnaam']
// de functie zal dus $_POST['gebruikersnaam'] in die
// $gebruikersnaam stoppen binnen de functie en dan krijgt hij
// die return waarde terug. als dit Ja is (dus bezet) dan deze melding:
echo 'Deze gebruikersnaam is al in gebruik, kies a.u.b een ander.';
}elseif($_POST['wachtwoord1'] != $_POST['wachtwoord2']){
// hier kijken we gewoon heel simpel of wachtwoord 1 en 2
// wel hetzelfde zijn ingetypt.. zoniet weer een melding:
echo 'De opgegeven wachtwoorden komen niet overeen';
}elseif($_POST['wachtwoord1'] == ""){
// als wachtwoord 1 leeg is moeten we ook een melding geven
// misschien denk je waarom ik dit niet bij wachtwoord 2 ook
// doe maar dat is niet nodig.. als wachtwoord1 leeg is
// krijg je toch al een melding. en als hij niet leeg is
// en wachtwoord2 wel.. dan zijn ze niet gelijk dus krijg
// je ook een melding, snapje?
echo 'Er zijn geen wachtwoord<b>en</b> opgegeven';
}elseif(email_validator($_POST['emailadres']) == 'nee'){
// hier roepen we weer een functie aan om het emailadres
// te controleren. als de return 'nee' is voldoet het adres
// niet aan de eisen die wij in de functie hebben vastgelegd
echo 'Het ingevulde emailadres is niet geldig';
}elseif(email_check($_POST['emailadres']) == 'ja'){
// nogmaals een functie aanroepen om te kijken of die
// misschien al bezet is..
echo 'Er is al iemand geregistreerd met dit emailadres.';
}else{
// en mocht nou ALLES hierboven goedgegaan zijn DAN (ja eindelijk)
// DAN mag het in de database gezet worden.
// hieronder volgt de query
$query = "
INSERT INTO gebruiker
(gebruiker_naam, gebruiker_wachtwoord, gebruiker_email)
VALUES
('".mysql_real_escape_string(trim($_POST['gebruikersnaam']))."',
'".md5($_POST['wachtwoord1'])."',
'".$_POST['emailadres']."');";
// mysql_real_escape_string gebruiken we om dingen als ' en "
// 'veilig' te maken voor de query (en database) mysql_real_escape_string
// maakt van een ' een \' en van " een \" dan weet de database
// dat het een speciaal teken is en geen SQL code.
// de md5() gebruiken we om het opgegeven wachtwoord te coderen
// met md5.. dit is veel veiliger in de database te zetten als het letterlijke
// wachtwoord
$sql = mysql_query($query)or die(mysql_error());
// we voeren de query uit en voila gebruiker is toegevoegd
echo 'U bent succesvol aangemeld. Hieronder kunt u inloggen:';
include('inloggen.php');
// als je bent geregistreerd mag je inloggen dus laten
// we de inlog pagina includen (die er nog niet is maar
// die gaan we nu maken...
}
?>
zo snap je het nog?
de registratie pagina is klaar en die komt er dus zo uit te zien
[color='red']=============registreren.php================[/color]
<?php
error_reporting(E_ALL);
include('verbind.php');
if(isset($_POST['registreer'])){
function email_validator($email){
if (eregi("^[0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\\.[a-z]{2,4}$",$email))
{$geldig = 'ja'; }
else{$geldig = 'nee';}
return $geldig;
}
function email_check($email){
$email_query = "SELECT gebruiker_email FROM gebruiker WHERE gebruiker_email='".$email."';";
$email_sql = mysql_query($email_query)or die(mysql_error());
if(mysql_num_rows($email_sql) == 0)
{$bezet = 'nee';}
else{$bezet = 'ja' ;}
return $bezet;
}
function gebruikersnaam_check($gebruikersnaam){
$gebruikersnaam_query = "SELECT gebruiker_naam FROM gebruiker WHERE gebruiker_naam='".$gebruikersnaam."';";
$gebruikersnaam_sql = mysql_query($gebruikersnaam_query)or die(mysql_error());
if(mysql_num_rows($gebruikersnaam_sql) == 0)
{$bezet = 'nee' ;}
else{$bezet = 'ja';}
return $bezet;
}
if(trim($_POST['gebruikersnaam']) == ""){
echo 'U heeft geen gebruikersnaam ingevuld';
}elseif(gebruikersnaam_check($_POST['gebruikersnaam']) == 'ja'){
echo 'Deze gebruikersnaam is al in gebruik, kies a.u.b een ander.';
}elseif($_POST['wachtwoord1'] != $_POST['wachtwoord2']){
echo 'De opgegeven wachtwoorden komen niet overeen';
}elseif($_POST['wachtwoord1'] == ""){
echo 'Er zijn geen wachtwoord<b>en</b> opgegeven';
}elseif(email_validator($_POST['emailadres']) == 'nee'){
echo 'Het ingevulde emailadres is niet geldig';
}elseif(email_check($_POST['emailadres']) == 'ja'){
echo 'Er is al iemand geregistreerd met dit emailadres.';
}else{
$query = "INSERT INTO gebruiker
(gebruiker_naam, gebruiker_wachtwoord, gebruiker_email)
VALUES
('".mysql_real_escape_string($_POST['gebruikersnaam'])."',
'".md5($_POST['wachtwoord1'])."',
'".$_POST['emailadres']."');";
$sql = mysql_query($query)or die(mysql_error());
echo 'U bent succesvol aangemeld. Hieronder kunt u inloggen:';
include('inloggen.php');
}
}else{
?>
<form action="registreren.php" method="POST">
<table>
<tr><td>Gebruikersnaam:</td><td><input type="text" name="gebruikersnaam" value=""></td></tr>
<tr><td>Wachtwoord:</td><td><input type="password" name="wachtwoord1" value=""></td></tr>
<tr><td>Wachtwoord nogmaals:</td><td><input type="password" name="wachtwoord2" value=""></td></tr>
<tr><td>Emailadres:</td><td><input type="text" name="emailadres" value=""></td></tr>
<tr><td></td><td><input type="submit" name="registreer" value="Aanmelden">
</table>
</form>
<?php
}
?>
[color='red']===================================[/color]
op naar de volgende pagina ;-)
Pagina 4
Inlogpagina maken
eigenlijk is de inlogpagina ook een beetje hetzelfde als de registratie pagina..
we moeten weer 2 delen hebben..
dus nu weet je hoe het moet en dan zul je uitkomen op deze basis:
<?php
if(isset($_POST['inloggen'])){
// verwerking
}else{
// inlog formulier
}
?>
het invulformulier moet de volgende velden bevatten:
- gebruikersnaam
- wachtwoord
- inlog knop
(aan het einde van de pagina in het resultaat script zie je dit formulier, je kan hem natuurlijk ook zelf maken om te oefenen)
de verwerking is ook niet zo heel moeilijk..
zie hier het verwerk stukje:
<?php
$gebruiker_query = "SELECT * FROM gebruiker WHERE gebruiker_naam = '".mysql_real_escape_string(trim($_POST['gebruikersnaam']))."';";
//we maken een query die de gebruiker ophaalt met de ingegeven
//gebruikersnaam. zodat we daar het md5 gecodeerde wachtwoord van de
// database kunnen 'lenen' om te kijken of die hetzelfde is als de ingevulde.
// zoja dan weten we dat het de goede gebruiker is
$gebruiker_sql = mysql_query($gebruiker_query)or die(mysql_error());
// uitvoeren van de query
$gebruiker_tellen= mysql_num_rows($gebruiker_sql);
// even kijken OF er wel een user bestaat dus tellen we de resultaten
if ($gebruiker_tellen == 1){
// als het resultaat 1 is hebben we dus een gebruiker met de opgegeven naam
// en dan gaan we verder in deze 'if' als het resultaat 0 is slaat hij de hele if
// over
$rij = mysql_fetch_array($gebruiker_sql);
// de gegevens uit de query slaan we op in een array genaamd $rij
if(md5($_POST['wachtwoord']) == $rij['gebruiker_wachtwoord']){
// we coderen het ingegeven wachtwoord met md5 .. als het goede wachtwoord
// is ingetikt moet de md5 code PRECIES hetzelfde zijn als die in de database
// als dat het geval is maken we sessies aan.
session_start();
// deze regel is belangrijk hiermee zorg je dat je sessies kan gaan gebruiken
$_SESSION['gebruiker_id'] = $rij['gebruiker_id'];
$_SESSION['gebruiker_naam'] = $rij['gebruiker_naam'];
$_SESSION['gebruiker_rank'] = $rij['gebruiker_rank'];
// hierboven zetten we de gegevens die we nog nodig hebben in de rest van
// het systeem in sessies.
// dit werkt alvolgt:
// $_SESSION['tekst'] = "hoi marvin!";
// echo $_SESSION['tekst'];
// geeft: hoi marvin!
header('Location: index.php');
// als de sessies zijn aangemaakt laten we ons vanzelf doorsturen naar index.php
}else{
// als het wachtwoord niet overeen komt willen we een melding:
echo 'Fout bij het inloggen. Probeer het opnieuw';
}
}else{
// als er geen resultaten uit de query komen willen we deze melding:
echo 'Fout bij het inloggen. Probeer het opnieuw';
// eigenlijk KAN hier staan 'er zijn geen gebruikers met deze naam'
// maar dit is niet handig natuurlijk..
}
?>
het resultaat zal er ongeveer zo uitzien:
[color='red']=============inloggen.php=================[/color]
<?php
error_reporting(E_ALL);
include('verbind.php');
// bovenstaan is om alle foutmeldingen op het beeldscherm te zetten.
// en we moeten natuurlijk de verbind.php include omdat we verbinding willen
// met de database
if(isset($_POST['inloggen']))
{
$gebruiker_query = "SELECT * FROM gebruiker WHERE gebruiker_naam = '".mysql_real_escape_string(trim($_POST['gebruikersnaam']))."';";
$gebruiker_sql = mysql_query($gebruiker_query)or die(mysql_error());
$gebruiker_tellen= mysql_num_rows($gebruiker_sql);
if ($gebruiker_tellen == 1){
$rij = mysql_fetch_array($gebruiker_sql);
if(md5($_POST['wachtwoord']) == $rij['gebruiker_wachtwoord']){
session_start();
$_SESSION['gebruiker_id'] = $rij['gebruiker_id'];
$_SESSION['gebruiker_naam'] = $rij['gebruiker_naam'];
$_SESSION['gebruiker_rank'] = $rij['gebruiker_rank'];
header('Location: index.php');
}else{
echo 'Fout bij het inloggen. Probeer het opnieuw';
}
}else{
echo 'Fout bij het inloggen. Probeer het opnieuw';
}
}else{
echo '<table align="center"><form method="POST" action="inloggen.php">';
echo '<tr><td><input type="text" name="gebruikersnaam" value="gebruikersnaam"></td>';
echo '<td><input type="password" name="wachtwoord" value="wachtwoord"></td>';
echo '<td><input type="submit" name="inloggen" value="Inloggen"></td>';
echo '<td><a href="?registreren">registreren</a></td></tr></form></table>';
}
?>
[color='red']===================================[/color]
we moeten weer 2 delen hebben..
dus nu weet je hoe het moet en dan zul je uitkomen op deze basis:
<?php
if(isset($_POST['inloggen'])){
// verwerking
}else{
// inlog formulier
}
?>
het invulformulier moet de volgende velden bevatten:
- gebruikersnaam
- wachtwoord
- inlog knop
(aan het einde van de pagina in het resultaat script zie je dit formulier, je kan hem natuurlijk ook zelf maken om te oefenen)
de verwerking is ook niet zo heel moeilijk..
zie hier het verwerk stukje:
<?php
$gebruiker_query = "SELECT * FROM gebruiker WHERE gebruiker_naam = '".mysql_real_escape_string(trim($_POST['gebruikersnaam']))."';";
//we maken een query die de gebruiker ophaalt met de ingegeven
//gebruikersnaam. zodat we daar het md5 gecodeerde wachtwoord van de
// database kunnen 'lenen' om te kijken of die hetzelfde is als de ingevulde.
// zoja dan weten we dat het de goede gebruiker is
$gebruiker_sql = mysql_query($gebruiker_query)or die(mysql_error());
// uitvoeren van de query
$gebruiker_tellen= mysql_num_rows($gebruiker_sql);
// even kijken OF er wel een user bestaat dus tellen we de resultaten
if ($gebruiker_tellen == 1){
// als het resultaat 1 is hebben we dus een gebruiker met de opgegeven naam
// en dan gaan we verder in deze 'if' als het resultaat 0 is slaat hij de hele if
// over
$rij = mysql_fetch_array($gebruiker_sql);
// de gegevens uit de query slaan we op in een array genaamd $rij
if(md5($_POST['wachtwoord']) == $rij['gebruiker_wachtwoord']){
// we coderen het ingegeven wachtwoord met md5 .. als het goede wachtwoord
// is ingetikt moet de md5 code PRECIES hetzelfde zijn als die in de database
// als dat het geval is maken we sessies aan.
session_start();
// deze regel is belangrijk hiermee zorg je dat je sessies kan gaan gebruiken
$_SESSION['gebruiker_id'] = $rij['gebruiker_id'];
$_SESSION['gebruiker_naam'] = $rij['gebruiker_naam'];
$_SESSION['gebruiker_rank'] = $rij['gebruiker_rank'];
// hierboven zetten we de gegevens die we nog nodig hebben in de rest van
// het systeem in sessies.
// dit werkt alvolgt:
// $_SESSION['tekst'] = "hoi marvin!";
// echo $_SESSION['tekst'];
// geeft: hoi marvin!
header('Location: index.php');
// als de sessies zijn aangemaakt laten we ons vanzelf doorsturen naar index.php
}else{
// als het wachtwoord niet overeen komt willen we een melding:
echo 'Fout bij het inloggen. Probeer het opnieuw';
}
}else{
// als er geen resultaten uit de query komen willen we deze melding:
echo 'Fout bij het inloggen. Probeer het opnieuw';
// eigenlijk KAN hier staan 'er zijn geen gebruikers met deze naam'
// maar dit is niet handig natuurlijk..
}
?>
het resultaat zal er ongeveer zo uitzien:
[color='red']=============inloggen.php=================[/color]
<?php
error_reporting(E_ALL);
include('verbind.php');
// bovenstaan is om alle foutmeldingen op het beeldscherm te zetten.
// en we moeten natuurlijk de verbind.php include omdat we verbinding willen
// met de database
if(isset($_POST['inloggen']))
{
$gebruiker_query = "SELECT * FROM gebruiker WHERE gebruiker_naam = '".mysql_real_escape_string(trim($_POST['gebruikersnaam']))."';";
$gebruiker_sql = mysql_query($gebruiker_query)or die(mysql_error());
$gebruiker_tellen= mysql_num_rows($gebruiker_sql);
if ($gebruiker_tellen == 1){
$rij = mysql_fetch_array($gebruiker_sql);
if(md5($_POST['wachtwoord']) == $rij['gebruiker_wachtwoord']){
session_start();
$_SESSION['gebruiker_id'] = $rij['gebruiker_id'];
$_SESSION['gebruiker_naam'] = $rij['gebruiker_naam'];
$_SESSION['gebruiker_rank'] = $rij['gebruiker_rank'];
header('Location: index.php');
}else{
echo 'Fout bij het inloggen. Probeer het opnieuw';
}
}else{
echo 'Fout bij het inloggen. Probeer het opnieuw';
}
}else{
echo '<table align="center"><form method="POST" action="inloggen.php">';
echo '<tr><td><input type="text" name="gebruikersnaam" value="gebruikersnaam"></td>';
echo '<td><input type="password" name="wachtwoord" value="wachtwoord"></td>';
echo '<td><input type="submit" name="inloggen" value="Inloggen"></td>';
echo '<td><a href="?registreren">registreren</a></td></tr></form></table>';
}
?>
[color='red']===================================[/color]
Pagina 5
Maak topic
We hebben nu ons user systeempje gemaakt. je bent bijna op de helft hoor..
nu willen we de mogelijkheid om een topic aan te maken..
dit bestaat uit 2 pagina's (of 2 delen op 1 pagina..maar net wat je zelf het fijnst vind)
eerst maken we hier het html formulier die de gegevens gaat sturen naar het verwerk gedeelte..
dit is natuurlijk gewoon html en daar is deze tutorial niet voor..
nu zul je denken: 'maar nu kan iedereen op deze pagina komen..'
ja dat klopt.. daarom moeten we nu een stukje code schrijven die alleen toegang geeft aan mensen die ingelogd zijn..
dat doen we met dit stukje:
<?php
session_start();
if(!(isset($_SESSION['gebruiker_id']))){
// als er GEEN sessie bestaat met de naam 'gebruiker_id'
// dan stoppen we het script lekker en laten we automatisch
// doorsturen naar index.php (die we nog moeten maken)
// als iemand namelijk WEL ingelogd is MOET deze sessie
// bestaan dat hebben we net geschreven
header('Location: index.php');
}else{
// het script
}
?>
(eigenlijk best simpel hè?)
het resultaat wordt dus:
[color='red']============maak_topic.php==================[/color]
[color='red']===================================[/color]
nu willen we de mogelijkheid om een topic aan te maken..
dit bestaat uit 2 pagina's (of 2 delen op 1 pagina..maar net wat je zelf het fijnst vind)
eerst maken we hier het html formulier die de gegevens gaat sturen naar het verwerk gedeelte..
<form action="toevoegen_topic.php" method="POST">
<table width="400" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC">
<tr><td>
<table width="100%" border="0" cellpadding="3" cellspacing="1" bgcolor="#FFFFFF">
<tr>
<td colspan="3" bgcolor="#E6E6E6"><strong>Maak Nieuw Topic</strong></td>
</tr><tr>
<td width="14%"><strong>Titel</strong></td>
<td width="2%">:</td>
<td width="84%"><input name="topic" type="text" maxlength="50" size="50" /></td>
</tr><tr>
<td valign="top"><strong>Bericht</strong></td>
<td valign="top">:</td>
<td><textarea name="bericht" cols="50" rows="10"></textarea></td>
</tr><tr>
<td></td><td></td>
<td><input type="submit" name="toevoegen" value="Toevoegen" /><input type="reset" value="Wis velden" /></td>
</tr>
</table>
</td>
</tr>
</table>
</form>
dit is natuurlijk gewoon html en daar is deze tutorial niet voor..
nu zul je denken: 'maar nu kan iedereen op deze pagina komen..'
ja dat klopt.. daarom moeten we nu een stukje code schrijven die alleen toegang geeft aan mensen die ingelogd zijn..
dat doen we met dit stukje:
<?php
session_start();
if(!(isset($_SESSION['gebruiker_id']))){
// als er GEEN sessie bestaat met de naam 'gebruiker_id'
// dan stoppen we het script lekker en laten we automatisch
// doorsturen naar index.php (die we nog moeten maken)
// als iemand namelijk WEL ingelogd is MOET deze sessie
// bestaan dat hebben we net geschreven
header('Location: index.php');
}else{
// het script
}
?>
(eigenlijk best simpel hè?)
het resultaat wordt dus:
[color='red']============maak_topic.php==================[/color]
<?php
session_start();
if(!(isset($_SESSION['gebruiker_id']))){
header('Location: index.php');
}
?>
<form action="toevoegen_topic.php" method="POST">
<table width="400" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC">
<tr><td>
<table width="100%" border="0" cellpadding="3" cellspacing="1" bgcolor="#FFFFFF">
<tr>
<td colspan="3" bgcolor="#E6E6E6"><strong>Maak Nieuw Topic</strong></td>
</tr><tr>
<td width="14%"><strong>Titel</strong></td>
<td width="2%">:</td>
<td width="84%"><input name="topic" type="text" maxlength="50" size="50" /></td>
</tr><tr>
<td valign="top"><strong>Bericht</strong></td>
<td valign="top">:</td>
<td><textarea name="bericht" cols="50" rows="10"></textarea></td>
</tr><tr>
<td></td><td></td>
<td><input type="submit" name="toevoegen" value="Toevoegen" /><input type="reset" value="Wis velden" /></td>
</tr>
</table>
</td>
</tr>
</table>
</form>
[color='red']===================================[/color]
Pagina 6
Voeg topic toe
Als iemand het topic wilt aanmaken, vult hij/zij eerst het formulier in van net en dan moeten wij het weer opvangen en verwerken met diverse beveiligingschecks er in..
dat doen we hier op deze pagina wel even..
wat we willen is eigenlijk:
als er op EEN knop gedrukt is,en die knop is toevallig 'toevoegen',
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST'){
if(isset($_POST['toevoegen']))
?>
dan kijken of het topictitel is ingevuld
trim haalt de spaties voor en achter de string vandaan.
dus 10spaties wordt gezien als niets ingevuld ;)
<?php
if(trim($_POST['topic']) == ""){
echo 'topictitel vergeten?
}
?>
ook even kijken of er een bericht is ingetikt
<?php
if(trim($_POST['bericht']) == ""){
echo 'bericht vergeten?
}
?>
en als dit hierboven allemaal klopt
<?php
else{
// 'toevoegen' aan de database, toevoegen staat tussen quotes omdat
// we natuurlijk eerst even moeten checken of er geen ongewenste dingen
// instaan
}
?>
hoe gaan we dit checken dan?
nou als eerste moeten we zorgen dat weer die ' en " wegzijn..
hoe deden we dit net? ja met de mysql_real_escape_string
dat kan nu dus ook, op zowel de topictitel als het bericht
<?php
$topic = mysql_real_escape_string($_POST['topic']);
// ' en " -> 'beveiligen'
?>
ook moeten nog even de spaties voor en achter de string verwijderd worden want anders tikt iemand 50spaties in en denken wij dat het tekst is..
<?php
$topic = mysql_real_escape_string($_POST['topic']);
// ' en " -> 'beveiligen'
$topic = trim($topic);
//spaties weghalen voor en achter string
?>
maar wacht.. we willen ook dat sommige html codes weg moeten
want als iemand intikt <br /><br /><br/ > en dan 100 x is me forum
lelijk geworden.. dus we doen het net iets anders:
<?php
$topic = mysql_real_escape_string($_POST['topic']);
// ' en " -> 'beveiligen'
$topic = trim($topic);
//spaties weghalen voor en achter string
$topic = htmlentities($topic);
// ongewenste html code weghalen
?>
o maar wat nu als iemand een woord aan elkaar schrijft van 200 tekens..
ja dan is me forum ook niet mooi meer.. nou dan doen we het TOCH nog even net iets anders:
<?php
$topic = wordwrap($_POST['topic'], 100, "\n", true);
// er mogen max 100 tekens per regel komen te staan en
// daarna moet er een enter geplaats worden (vanzelf)
$topic = trim($topic);
//spaties weghalen voor en achter string
$topic = mysql_real_escape_string($topic);
// ' en " -> 'beveiligen'
$topic = htmlentities($topic);
// ongewenste html code weghalen
?>
zo nu hebben we toch wel redelijk wat we willen..
dit doe je precies hetzelfde voor het bericht..
dan zal het eindresultaat er ongeveer uitzien als:
[color='red']===========toevoegen_topic.php==============[/color]
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST'){
if(isset($_POST['toevoegen'])){
if(trim($_POST['topic']) == ""){
echo 'Je bent de topic titel vergeten';
}elseif(trim($_POST['bericht']) == ""){
echo 'Je bent het bericht vergeten';
}else{
session_start();
include('verbind.php');
$topic = trim($_POST['topic']);
$topic = wordwrap($topic, 100, "\n", true);
$topic = mysql_real_escape_string($topic);
$topic = htmlentities($topic);
$bericht = trim($_POST['bericht']);
$bericht = wordwrap($bericht, 100, "\n", true);
$bericht = mysql_real_escape_string($bericht);
$bericht = htmlentities($bericht);
$sqlcode = "INSERT INTO topic
(topic_titel, topic_bericht, gebruiker_id, topic_datumtijd)
VALUES
('".$topic."','".$bericht."','".$_SESSION['gebruiker_id']."',now())";
// now() gebruiken we om de huidige tijd en datum te gebruiken
$resultaat = mysql_query($sqlcode)or die(mysql_error());
if($resultaat){
echo "Toevoegen Gelukt!!<BR>";
echo "<a href='index.php'>Topic Overzicht</a>";
}else{
echo "Toevoegen Mislukt";
}
}
}else{
echo 'Deze actie is niet toegestaan keer <a href="?pagina=forum_overzicht">terug</a> naar het forum.';
}
}else{
echo 'Deze actie is niet toegestaan keer <a href="?pagina=forum_overzicht">terug</a> naar het forum.';
}
?>
[color='red']===================================[/color]
dat doen we hier op deze pagina wel even..
wat we willen is eigenlijk:
als er op EEN knop gedrukt is,en die knop is toevallig 'toevoegen',
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST'){
if(isset($_POST['toevoegen']))
?>
dan kijken of het topictitel is ingevuld
trim haalt de spaties voor en achter de string vandaan.
dus 10spaties wordt gezien als niets ingevuld ;)
<?php
if(trim($_POST['topic']) == ""){
echo 'topictitel vergeten?
}
?>
ook even kijken of er een bericht is ingetikt
<?php
if(trim($_POST['bericht']) == ""){
echo 'bericht vergeten?
}
?>
en als dit hierboven allemaal klopt
<?php
else{
// 'toevoegen' aan de database, toevoegen staat tussen quotes omdat
// we natuurlijk eerst even moeten checken of er geen ongewenste dingen
// instaan
}
?>
hoe gaan we dit checken dan?
nou als eerste moeten we zorgen dat weer die ' en " wegzijn..
hoe deden we dit net? ja met de mysql_real_escape_string
dat kan nu dus ook, op zowel de topictitel als het bericht
<?php
$topic = mysql_real_escape_string($_POST['topic']);
// ' en " -> 'beveiligen'
?>
ook moeten nog even de spaties voor en achter de string verwijderd worden want anders tikt iemand 50spaties in en denken wij dat het tekst is..
<?php
$topic = mysql_real_escape_string($_POST['topic']);
// ' en " -> 'beveiligen'
$topic = trim($topic);
//spaties weghalen voor en achter string
?>
maar wacht.. we willen ook dat sommige html codes weg moeten
want als iemand intikt <br /><br /><br/ > en dan 100 x is me forum
lelijk geworden.. dus we doen het net iets anders:
<?php
$topic = mysql_real_escape_string($_POST['topic']);
// ' en " -> 'beveiligen'
$topic = trim($topic);
//spaties weghalen voor en achter string
$topic = htmlentities($topic);
// ongewenste html code weghalen
?>
o maar wat nu als iemand een woord aan elkaar schrijft van 200 tekens..
ja dan is me forum ook niet mooi meer.. nou dan doen we het TOCH nog even net iets anders:
<?php
$topic = wordwrap($_POST['topic'], 100, "\n", true);
// er mogen max 100 tekens per regel komen te staan en
// daarna moet er een enter geplaats worden (vanzelf)
$topic = trim($topic);
//spaties weghalen voor en achter string
$topic = mysql_real_escape_string($topic);
// ' en " -> 'beveiligen'
$topic = htmlentities($topic);
// ongewenste html code weghalen
?>
zo nu hebben we toch wel redelijk wat we willen..
dit doe je precies hetzelfde voor het bericht..
dan zal het eindresultaat er ongeveer uitzien als:
[color='red']===========toevoegen_topic.php==============[/color]
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST'){
if(isset($_POST['toevoegen'])){
if(trim($_POST['topic']) == ""){
echo 'Je bent de topic titel vergeten';
}elseif(trim($_POST['bericht']) == ""){
echo 'Je bent het bericht vergeten';
}else{
session_start();
include('verbind.php');
$topic = trim($_POST['topic']);
$topic = wordwrap($topic, 100, "\n", true);
$topic = mysql_real_escape_string($topic);
$topic = htmlentities($topic);
$bericht = trim($_POST['bericht']);
$bericht = wordwrap($bericht, 100, "\n", true);
$bericht = mysql_real_escape_string($bericht);
$bericht = htmlentities($bericht);
$sqlcode = "INSERT INTO topic
(topic_titel, topic_bericht, gebruiker_id, topic_datumtijd)
VALUES
('".$topic."','".$bericht."','".$_SESSION['gebruiker_id']."',now())";
// now() gebruiken we om de huidige tijd en datum te gebruiken
$resultaat = mysql_query($sqlcode)or die(mysql_error());
if($resultaat){
echo "Toevoegen Gelukt!!<BR>";
echo "<a href='index.php'>Topic Overzicht</a>";
}else{
echo "Toevoegen Mislukt";
}
}
}else{
echo 'Deze actie is niet toegestaan keer <a href="?pagina=forum_overzicht">terug</a> naar het forum.';
}
}else{
echo 'Deze actie is niet toegestaan keer <a href="?pagina=forum_overzicht">terug</a> naar het forum.';
}
?>
[color='red']===================================[/color]
Pagina 7
Forum overzicht
Oke beter..
we hebben nu een topic toevoeg mogelijkheid.. eigenlijk zou het wel makkelijk zijn als we ook nog een overzicht krijgen van alle topics..
ook dit is niet moeilijk en een kwestie van heel weinig php en best wat html..
hier ga ik geen verhaal bij zetten.. lees het commentaar in de code maar..
[color='red']=========forum.php===================[/color]]
<?php
echo
'<table width="90%" border="0" align="center" cellpadding="3" cellspacing="1" bgcolor="#CCCCCC">
<tr><td width="3%" align="center" bgcolor="#E6E6E6"><strong>#</strong></td>
<td width="53%" align="center" bgcolor="#E6E6E6"><strong>Topic</strong></td>
<td width="5%" align="center" bgcolor="#E6E6E6"><strong>Reacties</strong></td>
<td width="13%" align="center" bgcolor="#E6E6E6"><strong>Aangemaakt op</strong></td>
</tr>';
include('verbind.php');
$sql = "SELECT topic_id, topic_titel, topic_datumtijd FROM topic ORDER BY topic_id DESC";
// we maken een query die alle topics ophaalt met hun gegevens
$resultaat = mysql_query($sql)or die(mysql_error());
// die query voeren we uit
while($rij = mysql_fetch_array($resultaat)){
// hierboven slaan we alle resultaten op in een array genaamd rij
$sql2 = mysql_query("SELECT reactie_id FROM reactie WHERE topic_id = ".$rij['topic_id'].";")or die(mysql_error());
// hierboven gaan we per topic het aantal reacties ophalen zodat we netjes
// weer kunnne geven hoeveel reacties er zijn.. dit doen we door simpelweg alle
// reactie_id te tellen waar topic_id het betreffende topic_id is (zie database
// structuur hoe dit zit)
$reacties = mysql_num_rows($sql2);
// hier tellen we de resultaten en slaan dit op in $reacties
echo
'<tr>
<td bgcolor="#FFFFFF">'.$rij['topic_id'].'</td>
<td bgcolor="#FFFFFF"><a href="?bekijktopic='.$rij['topic_id'].'">'.stripslashes($rij['topic_titel']).'</a></td>
<td align="center" bgcolor="#FFFFFF">'.$reacties.'</td>
<td align="center" bgcolor="#FFFFFF">'.$rij['topic_datumtijd'].'</td>
</tr>';
//hierboven zorgen we dat alles word weergegeven in een tabelletje
}
echo '<tr>
<td colspan="5" align="right" bgcolor="#E6E6E6"><a href="?maaktopic">Maak een nieuw Topic aan</a></td>
</tr>
</table>';
?>
[color='red']===================================[/color]
zo het overzicht is ook klaar..
volgende pagina dan maar?
we hebben nu een topic toevoeg mogelijkheid.. eigenlijk zou het wel makkelijk zijn als we ook nog een overzicht krijgen van alle topics..
ook dit is niet moeilijk en een kwestie van heel weinig php en best wat html..
hier ga ik geen verhaal bij zetten.. lees het commentaar in de code maar..
[color='red']=========forum.php===================[/color]]
<?php
echo
'<table width="90%" border="0" align="center" cellpadding="3" cellspacing="1" bgcolor="#CCCCCC">
<tr><td width="3%" align="center" bgcolor="#E6E6E6"><strong>#</strong></td>
<td width="53%" align="center" bgcolor="#E6E6E6"><strong>Topic</strong></td>
<td width="5%" align="center" bgcolor="#E6E6E6"><strong>Reacties</strong></td>
<td width="13%" align="center" bgcolor="#E6E6E6"><strong>Aangemaakt op</strong></td>
</tr>';
include('verbind.php');
$sql = "SELECT topic_id, topic_titel, topic_datumtijd FROM topic ORDER BY topic_id DESC";
// we maken een query die alle topics ophaalt met hun gegevens
$resultaat = mysql_query($sql)or die(mysql_error());
// die query voeren we uit
while($rij = mysql_fetch_array($resultaat)){
// hierboven slaan we alle resultaten op in een array genaamd rij
$sql2 = mysql_query("SELECT reactie_id FROM reactie WHERE topic_id = ".$rij['topic_id'].";")or die(mysql_error());
// hierboven gaan we per topic het aantal reacties ophalen zodat we netjes
// weer kunnne geven hoeveel reacties er zijn.. dit doen we door simpelweg alle
// reactie_id te tellen waar topic_id het betreffende topic_id is (zie database
// structuur hoe dit zit)
$reacties = mysql_num_rows($sql2);
// hier tellen we de resultaten en slaan dit op in $reacties
echo
'<tr>
<td bgcolor="#FFFFFF">'.$rij['topic_id'].'</td>
<td bgcolor="#FFFFFF"><a href="?bekijktopic='.$rij['topic_id'].'">'.stripslashes($rij['topic_titel']).'</a></td>
<td align="center" bgcolor="#FFFFFF">'.$reacties.'</td>
<td align="center" bgcolor="#FFFFFF">'.$rij['topic_datumtijd'].'</td>
</tr>';
//hierboven zorgen we dat alles word weergegeven in een tabelletje
}
echo '<tr>
<td colspan="5" align="right" bgcolor="#E6E6E6"><a href="?maaktopic">Maak een nieuw Topic aan</a></td>
</tr>
</table>';
?>
[color='red']===================================[/color]
zo het overzicht is ook klaar..
volgende pagina dan maar?
Pagina 8
Index maken
We zijn de index pagina 'vergeten'
we gaan deze maar even maken dan..
wat moet hierop komen?
eigenlijk niets.. de index gebruiken we alleen voor het aanleveren van de juiste pagina's.. het is dus de bedoeling dat we op de index de volgende situatie realiseren.
Als er niet is ingelogd -> inlogscherm weergeven
Als er wel is ingelogd
-> en de knop registreren is ingedrukt -> registreren.php weergeven
-> en de knop bekijktopic is ingedrukt -> bekijktopic.php weergeven
-> en de knop gebruiker is ingedrukt -> gebruiker.php weergeven
-> en er niets ingedrukt is -> forum.php weergeven
etc..
dat doen we zo:
<?php
if(isset($_SESSION['gebruiker_id'])){
if(isset($_GET['registreren'])){
include('registreren.php');
}elseif(isset($_GET['bekijktopic'])){
include('bekijk_topic.php');
}
}elseif(isset($_GET['registreren'])){
include('registreren.php');
}else{
include('inloggen.php');
}
?>
in het resultaatscript helemaal onderaan de pagina zie je een uitlogknop.
om deze aanvraag op te vangen gebruiken we dit stukje code:
<?php
session_start();
if(isset($_GET['uitloggen'])){
// als er uitloggen is ingedrukt
session_unset();
// gooit hij alle informatie weg UIT
// de bestaande sessies
// wij gebruiken unset omdat in onze
// checks wordt gekeken of ze leeg zijn
// als we zouden checken of ze bestaan
// (dus niet leeg zijn maar of ze bestaan)
//dan kan je session_destroy gebruiken
//dan wordt de sessie 'vergeten door de server'
//maar wij willen ze niet weggooien maar alleen
//even leegmaken.. dus session_unset
header('Location: index.php');
// en we sturen onzelf naar de index.php
// na het uitloggen
//
// een weetje: op index kijkt hij weer
// of je een gevulde sessie heb.. zoniet..
// ja dan was je uitgelogd en laat hij
// weer het inlogscherm zien ;) zo
// simpel is het nou
}
?>
het eindresultaat wordt dus:
[color='red']===============index.php================[/color]
<?php
session_start();
if(isset($_GET['uitloggen'])){
session_unset();
header('Location: index.php');
}
if(isset($_SESSION['gebruiker_id'])){
echo '<div align="center">';
echo '<a href="?gebruiker='.$_SESSION['gebruiker_id'].'" target="_self" alt="klik">'.$_SESSION['gebruiker_naam'].'</a>';
echo ' <a href="index.php">forum</a>';
echo ' <a href="?uitloggen">uitloggen</a></div>';
if(isset($_GET['bekijktopic'])){
include('bekijk_topic.php');
}elseif(isset($_GET['maaktopic'])){
include('maak_topic.php');
}elseif(isset($_GET['gebruiker'])){
include('gebruiker.php');
}elseif(isset($_GET['verwijdertopic'])){
include('verwijder.php');
}elseif(isset($_GET['verwijderreactie'])){
include('verwijder.php');
}elseif(isset($_GET['verwijdergebruiker'])){
include('verwijder.php');
}else{
include('forum.php');
}
}elseif(isset($_GET['registreren'])){
include('registreren.php');
}else{
include('inloggen.php');
}
?>
[color='red']===================================[/color]
we gaan deze maar even maken dan..
wat moet hierop komen?
eigenlijk niets.. de index gebruiken we alleen voor het aanleveren van de juiste pagina's.. het is dus de bedoeling dat we op de index de volgende situatie realiseren.
Als er niet is ingelogd -> inlogscherm weergeven
Als er wel is ingelogd
-> en de knop registreren is ingedrukt -> registreren.php weergeven
-> en de knop bekijktopic is ingedrukt -> bekijktopic.php weergeven
-> en de knop gebruiker is ingedrukt -> gebruiker.php weergeven
-> en er niets ingedrukt is -> forum.php weergeven
etc..
dat doen we zo:
<?php
if(isset($_SESSION['gebruiker_id'])){
if(isset($_GET['registreren'])){
include('registreren.php');
}elseif(isset($_GET['bekijktopic'])){
include('bekijk_topic.php');
}
}elseif(isset($_GET['registreren'])){
include('registreren.php');
}else{
include('inloggen.php');
}
?>
in het resultaatscript helemaal onderaan de pagina zie je een uitlogknop.
om deze aanvraag op te vangen gebruiken we dit stukje code:
<?php
session_start();
if(isset($_GET['uitloggen'])){
// als er uitloggen is ingedrukt
session_unset();
// gooit hij alle informatie weg UIT
// de bestaande sessies
// wij gebruiken unset omdat in onze
// checks wordt gekeken of ze leeg zijn
// als we zouden checken of ze bestaan
// (dus niet leeg zijn maar of ze bestaan)
//dan kan je session_destroy gebruiken
//dan wordt de sessie 'vergeten door de server'
//maar wij willen ze niet weggooien maar alleen
//even leegmaken.. dus session_unset
header('Location: index.php');
// en we sturen onzelf naar de index.php
// na het uitloggen
//
// een weetje: op index kijkt hij weer
// of je een gevulde sessie heb.. zoniet..
// ja dan was je uitgelogd en laat hij
// weer het inlogscherm zien ;) zo
// simpel is het nou
}
?>
het eindresultaat wordt dus:
[color='red']===============index.php================[/color]
<?php
session_start();
if(isset($_GET['uitloggen'])){
session_unset();
header('Location: index.php');
}
if(isset($_SESSION['gebruiker_id'])){
echo '<div align="center">';
echo '<a href="?gebruiker='.$_SESSION['gebruiker_id'].'" target="_self" alt="klik">'.$_SESSION['gebruiker_naam'].'</a>';
echo ' <a href="index.php">forum</a>';
echo ' <a href="?uitloggen">uitloggen</a></div>';
if(isset($_GET['bekijktopic'])){
include('bekijk_topic.php');
}elseif(isset($_GET['maaktopic'])){
include('maak_topic.php');
}elseif(isset($_GET['gebruiker'])){
include('gebruiker.php');
}elseif(isset($_GET['verwijdertopic'])){
include('verwijder.php');
}elseif(isset($_GET['verwijderreactie'])){
include('verwijder.php');
}elseif(isset($_GET['verwijdergebruiker'])){
include('verwijder.php');
}else{
include('forum.php');
}
}elseif(isset($_GET['registreren'])){
include('registreren.php');
}else{
include('inloggen.php');
}
?>
[color='red']===================================[/color]
Pagina 9
Bekijk topic
Dit is een wat lastiger stuk omdat dit eindresultaat erg groot lijkt..
een topic bekijken is alleen informatie opvragen uit de database en hetgeen dat wij willen is deze opbouw:
1) Het topic bovenaan
2) Daaronder de reacties erop
3) Daar weer onder een mogelijk om reacties te geven
laten we beginnen met de 1e gewoon:
op het forum overzicht hebben we het zo geschreven net dat als iemand op een topic klikt deze opbouw link komt: ?bekijktopic=ID
dus hier in de query moeten we hier gebruik van maken..
de qeury (en aanhang)wordt:
<?php
$sql = "SELECT * FROM topic WHERE topic_id = ".trim($_GET['bekijktopic']).";";
$resultaat = mysql_query($sql)or die(mysql_error());
$rij = mysql_fetch_array($resultaat);
?>
hiermee is eigenlijk al het grootste deel gedaan.. alles is opgeslagen als $rij en daarme halen we het ook weer op als we het nodig hebben..
bijvoorbeeld zo:
hierboven zie je staan stripslashes.
weet je nog dat we de informatie met
mysql_real_escape_string gingen wegschrijven?
dan werd ' \' en " \" nou met stripslashes () zorg je ervoor dat die \
weer weggehaald worden ;) (in je database blijven ze wel staan maar bij het weergeven worden ze weggelaten..) zodat je dus weer goed leesbare teksten krijgt..
voorbeeld:
in de database staat:
met stripslashes()
wordt de output:
we hebben in deze pagina een functie nodig die de gebruikersnaam bij de reacties zet.. omdat in de reactie velden in de database staat alleen welke gebruiker_id die reactie heeft aangemaakt.. om dan de nummertje weer te geven staat niet mooi want niemand weet wie user 11 of user 4325 is..
dus we willen de gebruikersnaam ipv de nummers..
dat doen we met deze functie:
<?php
function welke_gebruiker($gebruiker_id){
// $gebruiker_id is weer de input
$welke_gebruiker_query = "SELECT gebruiker_naam, gebruiker_afbeelding FROM gebruiker WHERE gebruiker_id='".$gebruiker_id."';";
$welke_gebruiker_sql = mysql_query($welke_gebruiker_query)or die(mysql_error());
//we halen de gegevens op uit de database die wij nodig hebben in deze pagina
// en slaan deze hieronder weer op in een array genaamd $welke_gebruiker
$welke_gebruiker = mysql_fetch_array($welke_gebruiker_sql);
return $welke_gebruiker;
// de resultaten sturen we terug als een array
}
?>
in het resultaat script zie je hoe we deze functie aanroepen en gebruiken..
we hebben in dit forum 3 gebruikers_ranks.. dus admin(1), moderator(2) en lid(3)
wij willen dat een admin of moderator (rank 1 en 2 dus) meer opties hebben als een lid (rank 3) dat doen we simpelweg zo:
<?php
if($_SESSION['gebruiker_rank'] < 3){
// de $_SESSION['gebruiker_rank'] is aangemaakt tijdens het inloggen
// als die gebruiker_rank uit die sessie kleiner is als 3 (dus 1 en 2)
// dan:
echo 'dit ziet alleen iemand met rank 1 en 2 (admin en moderator dus)';
}
?>
hiermee kun je dus een verwijder link maken in je script.. (kijk in het resultaat voor het voorbeeld)..
deel 2)
we willen de reacties zien
hoe doen we dit? je hebt gezien hoe de database is opgebouwd.. we hebben elke reactie een (geheime niet zichtbare) id meegegeven van het topic id.. dus we vragen gewoon alles reacties op uit de database waar het topic_id gelijk is aan die ?bekijktopic=ID ... o zooo simpel? ja
dit word dan de query (weer met aanhang):
<?php
$sql2 = "SELECT * FROM reactie WHERE topic_id = ".trim($_GET['bekijktopic']).";";
$resultaat2 = mysql_query($sql2)or die(mysql_error());
while($rij2 = mysql_fetch_array($resultaat2)){
// dit is de reactie...
// bijvoorbeeld met:
echo stripslashes($rij2['reactie_bericht']);
// en eventueel kunnen we weer een rank optie erbij maken
if($_SESSION['gebruiker_rank'] < 3){
echo 'dit zien alleen weer de moderator en admins';
}
}
?>
EEN resultaat zou er zo uit kunnen zien: (let op dit lijkt heel veel door alle html erdoor heen..)
[color='red']=============bekijk_topic.php=================[/color]
[color='red']===================================[/color]
na deze hele lap code gaan we nu door naar de volgende pagina
een topic bekijken is alleen informatie opvragen uit de database en hetgeen dat wij willen is deze opbouw:
1) Het topic bovenaan
2) Daaronder de reacties erop
3) Daar weer onder een mogelijk om reacties te geven
laten we beginnen met de 1e gewoon:
op het forum overzicht hebben we het zo geschreven net dat als iemand op een topic klikt deze opbouw link komt: ?bekijktopic=ID
dus hier in de query moeten we hier gebruik van maken..
de qeury (en aanhang)wordt:
<?php
$sql = "SELECT * FROM topic WHERE topic_id = ".trim($_GET['bekijktopic']).";";
$resultaat = mysql_query($sql)or die(mysql_error());
$rij = mysql_fetch_array($resultaat);
?>
hiermee is eigenlijk al het grootste deel gedaan.. alles is opgeslagen als $rij en daarme halen we het ook weer op als we het nodig hebben..
bijvoorbeeld zo:
<tr><td bgcolor=#F8F7F1><?php echo stripslashes($rij['topic_bericht']); ?></td></tr>
<tr><td bgcolor=#F8F7F1><strong>Door </strong><a href="?gebruiker=<?php echo $rij['gebruiker_id']; ?>"
hierboven zie je staan stripslashes.
weet je nog dat we de informatie met
mysql_real_escape_string gingen wegschrijven?
dan werd ' \' en " \" nou met stripslashes () zorg je ervoor dat die \
weer weggehaald worden ;) (in je database blijven ze wel staan maar bij het weergeven worden ze weggelaten..) zodat je dus weer goed leesbare teksten krijgt..
voorbeeld:
in de database staat:
marviin\'s is \'s nachts deze tutorial gaan schrijvenmet stripslashes()
wordt de output:
marviin's is 's nachts deze tutorial gaan schrijvenwe hebben in deze pagina een functie nodig die de gebruikersnaam bij de reacties zet.. omdat in de reactie velden in de database staat alleen welke gebruiker_id die reactie heeft aangemaakt.. om dan de nummertje weer te geven staat niet mooi want niemand weet wie user 11 of user 4325 is..
dus we willen de gebruikersnaam ipv de nummers..
dat doen we met deze functie:
<?php
function welke_gebruiker($gebruiker_id){
// $gebruiker_id is weer de input
$welke_gebruiker_query = "SELECT gebruiker_naam, gebruiker_afbeelding FROM gebruiker WHERE gebruiker_id='".$gebruiker_id."';";
$welke_gebruiker_sql = mysql_query($welke_gebruiker_query)or die(mysql_error());
//we halen de gegevens op uit de database die wij nodig hebben in deze pagina
// en slaan deze hieronder weer op in een array genaamd $welke_gebruiker
$welke_gebruiker = mysql_fetch_array($welke_gebruiker_sql);
return $welke_gebruiker;
// de resultaten sturen we terug als een array
}
?>
in het resultaat script zie je hoe we deze functie aanroepen en gebruiken..
we hebben in dit forum 3 gebruikers_ranks.. dus admin(1), moderator(2) en lid(3)
wij willen dat een admin of moderator (rank 1 en 2 dus) meer opties hebben als een lid (rank 3) dat doen we simpelweg zo:
<?php
if($_SESSION['gebruiker_rank'] < 3){
// de $_SESSION['gebruiker_rank'] is aangemaakt tijdens het inloggen
// als die gebruiker_rank uit die sessie kleiner is als 3 (dus 1 en 2)
// dan:
echo 'dit ziet alleen iemand met rank 1 en 2 (admin en moderator dus)';
}
?>
hiermee kun je dus een verwijder link maken in je script.. (kijk in het resultaat voor het voorbeeld)..
deel 2)
we willen de reacties zien
hoe doen we dit? je hebt gezien hoe de database is opgebouwd.. we hebben elke reactie een (geheime niet zichtbare) id meegegeven van het topic id.. dus we vragen gewoon alles reacties op uit de database waar het topic_id gelijk is aan die ?bekijktopic=ID ... o zooo simpel? ja
dit word dan de query (weer met aanhang):
<?php
$sql2 = "SELECT * FROM reactie WHERE topic_id = ".trim($_GET['bekijktopic']).";";
$resultaat2 = mysql_query($sql2)or die(mysql_error());
while($rij2 = mysql_fetch_array($resultaat2)){
// dit is de reactie...
// bijvoorbeeld met:
echo stripslashes($rij2['reactie_bericht']);
// en eventueel kunnen we weer een rank optie erbij maken
if($_SESSION['gebruiker_rank'] < 3){
echo 'dit zien alleen weer de moderator en admins';
}
}
?>
ff tussendoor
ik heb in deze tutorial niet veel rank opties gemaakt.. ik heb alleen gemaakt:
- topic verwijderen voor moderators en admins
- avater wijzigen voor moderators en admins
- gebruiker verwijderen ALLEEN voor admins
elke soort query heb ik gebruikt dus een eventuele bewerk mogelijkheid kun je nu zelf maken met een SELECT en UPDATE query..
EEN resultaat zou er zo uit kunnen zien: (let op dit lijkt heel veel door alle html erdoor heen..)
[color='red']=============bekijk_topic.php=================[/color]
<?php
if(!isset($_GET['bekijktopic']))
{
echo 'Deze actie is niet toegestaan keer terug naar waar je vandaan kwam.';
}else{
include('verbind.php');
if(!is_numeric($_GET['bekijktopic'])){
echo 'dit is een ongeldig id';
}else{
$sql = "SELECT * FROM topic WHERE topic_id = ".trim($_GET['bekijktopic']).";";
$resultaat = mysql_query($sql)or die(mysql_error());
$check = mysql_num_rows($resultaat);
if($check > 0){
$rij = mysql_fetch_array($resultaat);
function welke_gebruiker($gebruiker_id){
$welke_gebruiker_query = "
SELECT gebruiker_naam, gebruiker_afbeelding
FROM gebruiker
WHERE gebruiker_id='".$gebruiker_id."';";
$welke_gebruiker_sql = mysql_query($welke_gebruiker_query)or die(mysql_error());
$welke_gebruiker = mysql_fetch_array($welke_gebruiker_sql);
return $welke_gebruiker;
}
?>
<table width="400" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC">
<tr><td>
<table width="100%" border="0" cellpadding="3" cellspacing="1" bordercolor="1" bgcolor="#FFFFFF">
<tr><td bgcolor="#F8F7F1"><strong><?php echo stripslashes($rij['topic_titel']); ?></strong>
<?php
if($_SESSION['gebruiker_rank'] < 3){
echo' <a href="?verwijdertopic='.$rij['topic_id'].'" alt="verwijder">V</a>';
}
?>
</td></tr>
<tr><td bgcolor=#F8F7F1><?php echo stripslashes($rij['topic_bericht']); ?></td></tr>
<tr><td bgcolor=#F8F7F1><strong>Door </strong><a href="?gebruiker=<?php echo $rij['gebruiker_id']; ?>"
target="_self" alt="klik"><?php $welke_gebruiker = welke_gebruiker($rij['gebruiker_id']); echo $welke_gebruiker['gebruiker_naam']; ?></a></td></tr>
<tr><td bgcolor=#F8F7F1><strong>Datum/tijd : </strong><?php echo $rij['topic_datumtijd']; ?></td></tr>
</table>
</td><td width="100"><img src="<?php echo $welke_gebruiker['gebruiker_afbeelding']; ?>" height="100" width="100"/></td></tr>
</table><BR>
<?php
$sql2 = "SELECT * FROM reactie WHERE topic_id = ".$_GET['bekijktopic']." ORDER BY reactie_datumtijd ASC;";
$resultaat2 = mysql_query($sql2)or die(mysql_error());
while($rij2 = mysql_fetch_array($resultaat2)){
?>
<table width="400" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC">
<tr><td>
<table width="100%" border="0" cellpadding="3" cellspacing="1" bgcolor="#FFFFFF">
<tr><td width="18%" bgcolor="#F8F7F1"><strong>Naam</strong></td>
<td width="77%" bgcolor="#F8F7F1">
<a href="?gebruiker=<?php echo $rij2['gebruiker_id']; ?>" target="_self"><?php $welke_gebruiker = welke_gebruiker($rij2['gebruiker_id']); echo $welke_gebruiker['gebruiker_naam'];?></a></td>
</tr><tr>
<td bgcolor="#F8F7F1"><strong>Reactie</strong>
<?php
if($_SESSION['gebruiker_rank'] < 3){
echo'<a href="?verwijderreactie='.$rij2['reactie_id'].'" alt="verwijder">V</a>';
}
?>
</td>
<td bgcolor="#F8F7F1"><?php echo stripslashes($rij2['reactie_bericht']); ?></td>
</tr><tr>
<td bgcolor="#F8F7F1"><strong>Datum/Tijd</strong></td>
<td bgcolor="#F8F7F1"><?php echo $rij2['reactie_datumtijd']; ?></td>
</tr>
</table>
</td><td width="100"><img src="<?php echo $welke_gebruiker['gebruiker_afbeelding']; ?>" height="100" width="100" /></td></tr>
</table><br>
<?php
}
?>
<BR>
<form method="post" action="toevoegen_reactie.php">
<table width="400" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#CCCCCC">
<tr>
<td>
<table width="100%" border="0" cellpadding="3" cellspacing="1" bgcolor="#FFFFFF">
<tr>
<td valign="top"><strong>Reactie</strong></td>
<td valign="top">:</td>
<td><textarea name="reactie_bericht" cols="50" rows="8"></textarea></td>
</tr><tr>
<td></td>
<td><input name="topic_id" type="hidden" value="<?php echo $_GET['bekijktopic']; ?>"></td>
<td><input type="submit" name="Submit" value="Toevoegen"> <input type="reset" value="Wis velden"></td>
</tr>
</table>
</td>
</tr>
<tr><td colspan="5" align="right" bgcolor="#E6E6E6"><a href="index.php"><strong>Topic Overzicht</strong> </a></td></tr>
</table>
</form>
<?php
}else{
echo 'Id niet bekend.';
}
}
}
?>
[color='red']===================================[/color]
na deze hele lap code gaan we nu door naar de volgende pagina
Pagina 10
Reactie Toevoegen
Zo we hebben op de vorige pagina een mogelijkheid gezien voor het toevoegen van reacties.. dit stuk script gaan we schrijven om het formulier te verwerken om vervolgens de reactie toe te voegen aan de database.
Als je de hele tutorial hebt gevolgd is hier geen uitgebreide uitleg meer nodig..
resultaat:
[color='red']===============toevoegen_reactie.php===============[/color]
Als je de hele tutorial hebt gevolgd is hier geen uitgebreide uitleg meer nodig..
resultaat:
[color='red']===============toevoegen_reactie.php===============[/color]
<?php
include('verbind.php');
if(trim($_POST['reactie_bericht']) == ""){
echo 'Je bent vergeten een reactie in te tikken';
}else{
session_start();
$reactie_bericht = trim($_POST['reactie_bericht']);
// spaties eraf (eind en begin)
$reactie_bericht = wordwrap($reactie_bericht, 100, "\n", true);
// max 100 tekens per regel weetje nog?
$reactie_bericht = mysql_real_escape_string($reactie_bericht);
// een slash voor sql gevoelige tekens plaatsen
$reactie_bericht = htmlentities($reactie_bericht);
// ongewenste html codes 'beveiligen'
$sql = "INSERT INTO reactie
(topic_id, gebruiker_id, reactie_bericht, reactie_datumtijd)
VALUES
(".trim($_POST['topic_id']).",'".$_SESSION['gebruiker_id']."','".$reactie_bericht."', now())";
$resultaat = mysql_query($sql) or die(mysql_error());
if(mysql_affected_rows() > 0){
// met mysql_affected_rows krijg je een getal terug..
// dit getal is het aantal rijen waar mysql de insert into
// query op heeft uitgevoerd.. in ons geval altijd 1 met deze query
// dus als de output van mysql_affected_rows hoger als 0 is (1 dus)
// dan gaat hij verder in het script
$nummer = $_POST['topic_id'];
header("Location: index.php?bekijktopic=$nummer");
}else{
echo 'toevoegen mislukt';
}
}
?>
[color='red']===================================[/color]Pagina 11
Gebruikers pagina en verwijder pagina
We hebben in de loop van deze tutorial
een gebruikerslink gemaakt.. wel zo handig als we deze ook kunnen gebruiken.. het is niet uitgebreid maar heel klein allemaal..
de link werd: ?gebruiker=ID
dus we controleren in de query of het daadwerkelijk een nummer is en dan word het zoiets:
<?php
$query = "SELECT * FROM gebruiker WHERE gebruiker_id=".trim($_GET['gebruiker'])).";";
$sql = mysql_query($query)or die(mysql_error());
$rij = mysql_fetch_array($sql);
?>
dit was het eigenlijk alweer. de rest wordt weer opmaak code..
het weergeven van het profiel wordt:
<?php
echo '<br /><table align="center">
<tr><td></td><td><img src="'.$rij['gebruiker_afbeelding'].'" weight="100" height="100" /></td><td></td></tr>
<tr><td>Gebruikersnaam:</td><td>'.$rij['gebruiker_naam'].'</td></tr>
<tr><td>Emailadres:</td><td><a href="mailto:'.$rij['gebruiker_email'].'">'.$rij['gebruiker_email'].'</a></td></tr>
<tr><td>Rank:</td><td>'.$rij['gebruiker_rank'].'</td>';
?>
dit is alleen niet mooi want nu zie je bij gebruiker rank een nummer (1,2 of 3)..
we willen hier iets moois van maken en doen hetvolgende:
<?php
switch($rij['gebruiker_rank']){
case 1: $rank = "Beheerder"; break;
// als $rij['gebruiker_rank'] = 1 $rank wordt: beheerder
case 2: $rank = "Moderator"; break;
// als $rij['gebruiker_rank'] = 2 $rank wordt: moderator
case 3: $rank = "Lid"; break;
// als $rij['gebruiker_rank'] = 3 $rank wordt: lid
}
?>
nu kunnen we dus echo'en $rank.. daarin staat dan 1 van de 3 rankname
hier het complete script:
[color='red']=============gebruiker.php================[/color]
[color='red']===================================[/color]
zo en als laatste maken we nu de verwijderpagina..
op deze pagina worden alle verwijder mogelijkheden van het complete script opgevangen..
[color='red']=============verwijder.php==================[/color]
[color='red']===================================[/color]
een gebruikerslink gemaakt.. wel zo handig als we deze ook kunnen gebruiken.. het is niet uitgebreid maar heel klein allemaal..
de link werd: ?gebruiker=ID
dus we controleren in de query of het daadwerkelijk een nummer is en dan word het zoiets:
<?php
$query = "SELECT * FROM gebruiker WHERE gebruiker_id=".trim($_GET['gebruiker'])).";";
$sql = mysql_query($query)or die(mysql_error());
$rij = mysql_fetch_array($sql);
?>
dit was het eigenlijk alweer. de rest wordt weer opmaak code..
het weergeven van het profiel wordt:
<?php
echo '<br /><table align="center">
<tr><td></td><td><img src="'.$rij['gebruiker_afbeelding'].'" weight="100" height="100" /></td><td></td></tr>
<tr><td>Gebruikersnaam:</td><td>'.$rij['gebruiker_naam'].'</td></tr>
<tr><td>Emailadres:</td><td><a href="mailto:'.$rij['gebruiker_email'].'">'.$rij['gebruiker_email'].'</a></td></tr>
<tr><td>Rank:</td><td>'.$rij['gebruiker_rank'].'</td>';
?>
dit is alleen niet mooi want nu zie je bij gebruiker rank een nummer (1,2 of 3)..
we willen hier iets moois van maken en doen hetvolgende:
<?php
switch($rij['gebruiker_rank']){
case 1: $rank = "Beheerder"; break;
// als $rij['gebruiker_rank'] = 1 $rank wordt: beheerder
case 2: $rank = "Moderator"; break;
// als $rij['gebruiker_rank'] = 2 $rank wordt: moderator
case 3: $rank = "Lid"; break;
// als $rij['gebruiker_rank'] = 3 $rank wordt: lid
}
?>
nu kunnen we dus echo'en $rank.. daarin staat dan 1 van de 3 rankname
hier het complete script:
[color='red']=============gebruiker.php================[/color]
<?php
session_start();
include('verbind.php');
if(isset($_POST['update']))
{
// als de knop update is ingedrukt doen we dit stuk
$toegestaan[0] = "jpg";
$toegestaan[1] = "gif";
$toegestaan[2] = "bmp";
$toegestaan[3] = "jpeg";
$toegestaan[4] = "JPEG";
$toegestaan[5] = "JPG";
// deze extensies zijn toegestaan voor avaters
$afbeelding = substr($_POST['afbeelding'], -3);
// we nemen de geposte link en kijken of de laatste tekens
// voldoen aan 1 van deze opgegeven extensies
for($i = 0;$i < count($toegestaan); $i++){
//zoja dit stuk
if ($afbeelding == $toegestaan[$i]){
$afbeelding = mysql_real_escape_string(htmlentities(trim($_POST['afbeelding'])));
// voor de zekerheid weer het 1 en ander beveiligen
$query2 = "UPDATE gebruiker
SET gebruiker_afbeelding = '".$afbeelding."'
WHERE gebruiker_id = ".$_SESSION['gebruiker_id'].";";
$sql2 = mysql_query($query2)or die(mysql_error());
echo 'profiel is geupdate';
}
}
}else{
if(!is_numeric($_GET['gebruiker'])){
echo 'geen geldig ID.';
}else{
$query = "SELECT * FROM gebruiker WHERE gebruiker_id=".trim($_GET['gebruiker']).";";
$sql = mysql_query($query)or die(mysql_error());
if(mysql_num_rows($sql) > 0){
// als het query resultaat hoger als 0 is bestaat de user, anders niet
$rij = mysql_fetch_array($sql);
echo '<br /><table align="center">
<tr><td></td><td><img src="'.$rij['gebruiker_afbeelding'].'" weight="100" height="100" /></td><td></td></tr>
<tr><td>Gebruikersnaam:</td><td>'.$rij['gebruiker_naam'].'</td></tr>
<tr><td>Emailadres:</td><td><a href="mailto:'.$rij['gebruiker_email'].'">'.$rij['gebruiker_email'].'</a></td></tr>
<tr><td>Rank:</td><td>';
switch($rij['gebruiker_rank']){
case 1: $rank = "Beheerder"; break;
case 2: $rank = "Moderator"; break;
case 3: $rank = "Lid"; break;
}
echo $rank.'</td></tr>';
if($_SESSION['gebruiker_id'] == $rij['gebruiker_id']){
echo '<tr><td>
<form action="gebruiker.php" method="post">
<input type="text" name="afbeelding"></td><td>
<input type="submit" name="update" value="update"></td>
</form>
</td></tr>';
}
if($_SESSION['gebruiker_rank'] == 1){
// ALLEEN DE ADMIN mag een user verwijderen
echo'<tr><td><a href="?verwijdergebruiker='.$_GET['gebruiker'].'" alt="verwijder">Verwijder gebruiker</a></td></tr>';
}
echo '</table>';
}else{
echo 'deze users bestaat niet (meer).';
}
}
}
?>
[color='red']===================================[/color]
zo en als laatste maken we nu de verwijderpagina..
op deze pagina worden alle verwijder mogelijkheden van het complete script opgevangen..
[color='red']=============verwijder.php==================[/color]
<?php
session_start();
if($_SESSION['gebruiker_rank'] <= 2 ){
include('verbind.php');
if(is_numeric($_GET['verwijdertopic'])){
$sql = mysql_query("DELETE FROM topic WHERE topic_id=".$_GET['verwijdertopic'].";")or die(mysql_error());
$sql2 = mysql_query("DELETE FROM reactie WHERE topic_id=".$_GET['verwijdertopic'].";")or die(mysql_error());
if(mysql_affected_rows() == 0){
// mysql_affected_row gebruiken we om na een DELETE query
// op te vragen op hoeveel rijen dit is uitgevoerd.
// als dat er dus <1 zijn dan is er niets verwijderd
// omdat dit topic dan helemaal niet bestaat
echo 'Dit topic bestaat niet (meer)';
}else{
echo 'Topic (inclusief alle reacties) succesvol verwijderd';
}
}elseif(is_numeric($_GET['verwijderreactie'])){
$sql = mysql_query("DELETE FROM reactie WHERE reactie_id=".$_GET['verwijderreactie'].";")or die(mysql_error());
if(mysql_affected_rows() == 0){
echo 'Deze reactie bestaat niet (meer)';
}else{
echo 'Reactie verwijderd.';
}
}
}elseif($_SESSION['gebruiker_rank'] == 1){
if(is_numeric($_GET['verwijdergebruiker'])){
$sql = mysql_query("DELETE FROM gebruiker WHERE gebruiker_id=".$_GET['verwijdergebruiker'].";")or die(mysql_error());
if(mysql_affected_rows() == 0){
echo 'Deze gebruiker bestaat niet (meer)';
}else{
echo 'Gebruiker verwijderd.';
}
}
}else{
echo 'deze acties zijn alleen mogelijk voor admin en moderators.';
}
?>[color='red']===================================[/color]
Pagina 12
Tot slot
Nou ik heb weer superveel getypt..en ik hoop dat ik mensen blij maak met deze tutorial.. dan weet ik waarvoor ik het gedaan heb.. alle commentaar is welkom maar kom niet met commentaar waarom ik sommige dingen heel uitgebreid heb gedaan, want dat is (nogmaals) omdat het voor beginners is die het makkelijk zullen begrijpen zo.. mochten er echt FOUTE dingen in staan dan zijn deze natuurlijk meer dan welkom.. dan zal ik er naar kijken en zonodig verbeteren..
Op naar het bedenken van marviins tutorial 3 ;-)
MaSSol..
[color='red']MarViiNs[/color]
Op naar het bedenken van marviins tutorial 3 ;-)
MaSSol..
[color='red']MarViiNs[/color]
Pagina 13
o nog een pagina over =P
hier het voorbeeld dan maar haha
KLIK
je kunt inloggen met lid:
gebruikersnaam: phphulp1
wachtwoord: phphulp
of je kunt inloggen met moderator:
gebruikersnaam: phphulp2
wachtwoord: phphulp
met de admin kun je niet inloggen..
dan weet ik precies hoe het gaat.. maar met admin kan je hetzelfde als moderator alleen je mist nu in de demo de link in het gebruikersprofiel om een lid weg te gooien.. 'verwijder gebruiker'
KLIK
je kunt inloggen met lid:
gebruikersnaam: phphulp1
wachtwoord: phphulp
of je kunt inloggen met moderator:
gebruikersnaam: phphulp2
wachtwoord: phphulp
met de admin kun je niet inloggen..
dan weet ik precies hoe het gaat.. maar met admin kan je hetzelfde als moderator alleen je mist nu in de demo de link in het gebruikersprofiel om een lid weg te gooien.. 'verwijder gebruiker'
Reacties
0