PHP Workshop - Zoeken

Vaak zie je op een website een zoekmogelijkheid in de vorm van een HTML formulier met invoerveld en submitbutton om een zoekopdracht uit te voeren. Maar: hoe maak je nu zo iets?

Er zijn een aantal zaken die je dan nodig hebt.

1. een html formulier bestaande uit een tekst invoerveld en een submitbutton. Uitgangspunt is dat je (X)HTML en CSS kunt gebruiken om deze te maken en vorm te geven.

2. een php verwerkingsscript die door het zoekformulier wordt geactiveerd. Uitgangspunt is dat je al eerder met PHP hebt geoefend en dat je een lokale webserver omgeving hebt draaien zoals bijvoorbeeld XAMPP.

3. data waarin gezocht gaat worden. In deze workshop gebruiken we een MySql database. Uitgangspunt is dat je weet wat een MySql database is en dat je hier met PHPMYADMIN zelf tabellen in kunt maken.en vullen met data.

PHP - Zoeken: HTML Form

Om je zoekopdracht te kunnen invoeren moet je eerst een HTML formulier maken.

HTML Code:

	<form action="zoeken.php" method="POST">
	Type zoekopdracht: <input name="zoekopdracht" type="text" /><br />
	<input type="submit" value="Zoek" />
	</form>
	

Hieronder volgt een korte beschrijving van de belangrijkste delen van bovenstaande code

Sla de formulier code op in een bestand en noem het zoeken.html. Als je deze in de browser bekijkt dan zou het er ongeveer zo uit moeten zien:

Browser:

Type zoekopdracht:

Nadat de gebruiker op de submit button 'Zoek' klikt wordt de data verstuurd naar de server en de gebruiker wordt doorgestuurd naar zoeken.php. Dit PHP script zal de verwerking van het formulier voor zijn rekening nemen.

PHP - Zoeken: Controle

Nu we een bruikbaar HTML formulier hebben kunnen we beginnen met het coderen van het PHP script dat onze zoekopdracht zal gaan afhandelen. Dit PHP script moet eerst een controle uitvoeren, namelijk of er wel iets is ingevuld. Dit kan eventueel ook met javascript worden gedaan, nog voordat de formulierdata wordt verstuurd naar de server.

Hoe controleer je of er iets is ingevuld?

Dit doe je met een if constructie. De data van het formulier wordt via de POST methode verstuurd, dus je kan controleren of de server variabele $_POST en met name het veld 'zoekopdracht' is gevuld. Gebruik je de GET methode dan gebruik je $_GET.

if ( $_POST['zoekopdracht'] ) 
{
	//ja, er is iets ingevuld in het veld 'zoekopdracht'
	//toon ingevulde gegevens
	print_r($_POST); //print_r() is een functie om de inhoud van een array te tonen
} 
else 
{
	//nee, er is niets verstuurd
	//toon foutmelding
	echo "geen data verstuurd";
}

PHP - zoeken: tabel maken

Zoals eerder gezegd, we maken gebruik van een tabel nieuwsberichten. Deze tabel delen we als volgt in:

--
-- Tabel structuur voor tabel `nieuwsberichten`
--

CREATE TABLE IF NOT EXISTS `nieuwsberichten` (
  `id` int(11) NOT NULL auto_increment,
  `titel` varchar(50) NOT NULL,
  `omschrijving` text NOT NULL,
  `datum` date NOT NULL,
  `auteur` varchar(100) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

Je kunt ook een import doen van de tabel nieuwsberichten met inhoud die je hier kunt downloaden.

PHP - zoeken: SQL query maken

De zoekopdracht uit het formulier gaan we verwerken in een SQL query (=opdracht aan de MySql database), want we gaan in een database zoeken. Daarbij moeten we aangeven in welke tabel we gaan zoeken en in welke velden. We doen een zogenaamde 'free text search' waarbij we gebruik gaan maken van de SQL instructie 'like'. Als je met 'like' gaat werken dan zul je gebruik gaan maken van het 'wildcard' teken '%' (procent). Met een wildcard geef je aan dat de te zoeken tekst bijvoorbeeld ergens tussen mag staan. Of dat de tekst met iets anders mag beginnen. Of gevolgd wordt door een ander stukje tekst.

Voorbeeld: '%voetbal' mag worden voorafgegaan met bijvoorbeeld 'mooi', dus als er in de tekst 'mooi voetbal' staat en je zoekt op '%voetbal' dan zal deze tekst worden weergegeven. Gebruik je '%voetbal% dan maakt het ook niet uit wat er achter 'voetbal' staat. Oefen hiermee in PHPMYADMIN in het SQL menu.

nb Er zijn ook andere manieren om in SQL op zoek te gaan naar stukjes tekst, je kunt zelfs teksten uitsluiten. Je moet dan gebruik maken van een zgn. FULLTEXT index die je plaatst op tekstvelden van een tabel. Meer hierover vind je op PHPHULP.

We maken nu een SQL QUERY waarmee we data gaan opvragen. Dit kan er bijvoorbeeld zo uit zien (let op de procent-tekens) :

select * from nieuwsberichten where titel like '%voetbal%';

Je kunt bovenstaande code op diverse manieren testen in een MySql omgeving. In PHPMYADMIN kun je dit in een speciaal SQL venster plakken en uitvoeren. Als je de bijgeleverde tabel gebruikt dan kan de uitvoer er zo uit komen te zien: