Een website maken met HTML en CSS is natuurlijk leuk, maar echt interessant wordt het pas als je gaat werken met inlogsystemen, gastenboeken, polls en nog veel meer dynamische zaken. Dit soort dingen maken is wel wat ingewikkelder dan HTML. De scripttaal PHP gecombineerd met de database MySQL helpen je met deze dynamische zaken.
PHP en MySQL.
1.1 Wat is MySQL
1.2 Waar kan ik meer leren over SQL
1.3 Hoe benader je een MySQL database vanuit PHP
1.4 Hoe zie je welke tabellen er op een MySQL server staan?
1.5 Hoe kijk je welke velden er in een tabel staan?
1.6 Hoe maak je backslashes onzichtbaar in data?
1.7 Kan je binaire data opslaan in MySQL?
1.8 Hoe kan je X records per pagina tonen?
1.9 Kant en klare oplossingen voor PHP (en MySQL)
1.1 Wat is MySQL.
MySQL is een Client/Server SQL database server. Het is voornamelijk gericht op snelheid. Veel mensen maken de vergissing dat je alleen kleine databases kan gebruiken met MySQL. Dit is echter afhankelijk van andere factoren (mogelijkheden voor transakties, e.d.).
Zelf heb ik tot volle tevredenheid gewerkt met aanzienlijke databases (600.000 records).
1.2 Waar kan ik meer leren over SQL.
- http://www.mysql.org/Manual_chapter/manual_Tutorial.html#Tutorial
- http://www.self-evident.com/sql/index.htm
1.3 Hoe benader je een MySQL database vanuit PHP.
Voor het benaderen van een MySQL server zijn er twee mogelijkheden. Je kan een default server opgeven in je php.ini en je kan het rechtstreeks vanuit de code regelen. Die eerste optie heeft als groot nadeel dat mensen die php scripts op dezelfde server kunnen draaien zeer snel het wachtwoord uit de configuratie kunnen ophalen.
Om contact te leggen naar een MySQL server heb je de volgende drie gegevens nodig:
- De hostnaam.
- De gebruikersnaam.
- Het wachtwoord.
De functie om de connectie op te bouwen is mysql-connect:
mysql_connect("servernaam","user","wachtwoord");
Als er een connectie naar de database server tot stand is gebracht moet je de database selecteren die je wilt gebruiken. Daarvoor gebruik je de mysql-select-db functie. Ook controleer je of het is gelukt om die database te selecteren:
mysql_select_db("databasenaam") or die ("Verdorie, kan de database niet openen");
1.4 Hoe zie je welke tabellen er op een MySQL server staan?.
Afhankelijk van de rechten die de gebruiker heeft kan hij/zij toegang hebben tot meerdere tabellen. Deze tabellen zijn op te vragen met de mysql-list-tables
Connectie naar de database
*/
mysql_connect( "server", "inlognaam", "wachtwoord");
/*
Uit welke database wil je de tabellen ophalen.
*/
$tabellen = mysql_list_tables( "database");
/*
Tellertje en loop om de tabellen te tonen.
*/
$i=0;
while ($i < mysql_num_rows($tabellen)){
$t_name[$i] = mysql_tablename ($tabellen, $i);
echo $t_name[$i]. "
";
$i++;
}
?>
1.5 Hoe kijk je welke velden er in een tabel staan?
Elke MySQL tabel zal verschillende velden bevatten. Om deze velden op te halen pas je de de volgende code toe:
Connectie opzetten.
*/
mysql_connect( "server", "inlognaam", "wachtwoord");
/*
Geef de database en de tabelnaam op bij de functie mysql-list-fields
*/
$fields = mysql_listfields( "database", "tabel");
/*
Kijk hoeveel velden er totaal zijn en zet de teller $i op 0.
*/
$field_num = mysql_num_fields($fields);
$i=0;
/*
Toon het totaal aantal velden ($field_num) in de browser.
*/
echo $field_num . " veld(en) gevonden
\n";
/*
Zet een html tabel op en toon de veldtypes, veldnamen en
de veldlengte van die velden in een loop.
*/
echo "";while ($i < $field_num){ $type = mysql_field_type ($fields, $i); $name = mysql_field_name ($fields, $i); $len = mysql_field_len ($fields, $i); $flags = mysql_field_flags ($fields, $i); echo ""; $i++;}echo "
"; echo "Naam |
VeldType | Lengte | Vlag |
"; echo $name. " |
".$type. " |
".$len. " | ".$flags. " |
1.6 Hoe maak je backslashes onzichtbaar in data?
Als je via een html form gegevens laat invoeren in de database kan het gebeuren dat mensen gebruik maken van (o.a.) single en double quotes. Als je geen gebruik maakt van de functie stripslashes() bij het uitlezen van die data krijg je voor iedere quote een \' te zien in plaats van het normale quote teken.
1.7 Kan je binaire data opslaan in MySQL?
Het is mogelijk om (b.v.) plaatjes op te slaan in MySQL. Of het slim is is een andere vraag. Veel beter is het om de plaatjes een logische benaming te geven (product_id) en een kleine functie in je code te zetten die kijkt of een bepaald plaatje in een bepaalde directory aanwezig is. Dit heeft als voordeel dat je zelfs de url naar die plaatjes niet in de database hoeft op te slaan.
Om te kijken of het plaatje aanwezig is maak je gebruik van de file_exists() functie:
Zet een connectie naar de database op en voer de gewenste
query uit.Je kan dan een variabele aanmaken ($product_id)
waarin je het gewenste recordnr van het product dumpt. Daarna
voer je de volgende check uit.
*/
if (file_exists("/path/$product_id.jpg")){
echo " alt=\"$row[product_omschrijving]\">;
}
?>
1.8 Hoe kan je X records per pagina tonen?
Hiervoor moet je de limit functie gebruiken. Voorbeeld:
Connectie is al gemaakt. Via de parameter $start weten we op
welke plek in de resultset we de limit moeten laten starten, als
$start leeg is weten we dat we op 0 moeten beginnen. $view is het
totaal aantal records dat we willen tonen
*/
$view = 5;
$query = "SELECT * FROM tabela WHERE conditie = 'blauw'";
$result = mysql("database", $query);
/*
Om te weten hoeveel records er in de resultset zitten vragen
we eerst het aantal rijen op.
*/
$total = mysql_num_rows($result);
/*
We weten nu dat er bijvoorbeeld 15 records in zitten. We vullen
dan de query aan met de limitfunctie zodat we de volgende X
records kunnen opvragen.
*/
$query .= " limit $start, $view";
/*
We runnen de query nog een keer.
*/
$result = mysql("database", $query);
/*
We hebben nu een resultset met 5 records die beginnen op
$start. Je kan het tonen door een simpele lus.
*/
while ($row=mysql_fetch_array($result)){
echo $row[veldnaam];
}
?>
Als laatste zou je dan nog een volgende/vorige pagina functie kunnen bouwen door naar het totaal aantal records te kunnen kijken in samenhang met de $start en $view.
1.9 Kant en klare oplossingen voor PHP (en MySQL).
Er zijn op het internet diverse kant en klare oplossingen te vinden. Men hoeft alleen de configuratie aan te passen en de scripts te installeren.
Database onderhoud.
Zoeken.
Forum.
- http://fumanchi.tabu.uni-bonn.de/forum/
- http://www.neoqst.com/public/neoboard/neoboard.html
- http://www.phunkbros.dk/products.html
- http://www.phorum.org/
- http://w-agora.araxe.fr/
- http://phpbuilder.com/board/
- http://www.phpfreakz.nl/
Gastenboek.
PHP oplossingen
- http://www.phpbuilder.com/
- http://phphulp.nl/
- http://www.phpfreakz.nl/
- http://www.ep2.n/
- http://www.websitemaken.be/index.php
E-Commerce oplossingen.
- http://www.fishcart.org/
- http://www.w3-concept.net/
- http://modems.rosenet.net/MyCart/
- http://www.phpauction.org/
- http://phpshop.sourceforge.net/
Hosters
- http://www.webhostingtalk.nl/
- http://www.webhostingtalk.com/
- http://www.deziweb.com/
- http://www.medinstudio.nl