Zoeken in database

Status
Niet open voor verdere reacties.

feint

Gebruiker
Lid geworden
3 jun 2008
Berichten
273
Ik ben bezig met een database te maken. nu is mijn kennis tot sql en php beperkt dus heb ik een script gezocht dat ik kan aanpassen. nu zal ik wel weer wat fout doen maar ik krijg geen zoekresultaten te zien.

als ik WHERE IS gebruik krijg ik error dat mysql_fetch_assoc geen geldige sql opdracht is en als ik WHERE LIKE gebruik krijg ik lege zoekresultaten.

scriptje

Code:
<html>

<head>
<title>Zoeken in database</title>
</head>

<body>
<?php
if (isset($_GET['trefwoord']) && isset($_GET['kolom']))
{
    //Maak een connectie met de server en selecteer de database
    mysql_connect("localhost","user","pass") or die(mysql_error());
    mysql_select_db("dbnaam") or die(mysql_error());
    
    //Haal de gegevens uit de tabel waar de kolom is $_GET['kolom'] waar een woord als $_GET['trefwoord'] in voorkomt.
   $res = mysql_query("SELECT * FROM tabelnaam WHERE '".$_GET['kolom']."'LIKE '".$_GET['trefwoord']."'");
    
    //Begin html 
    echo '
            <table>
                <tr>
                    <td><b>Zoekresultaten</b></td>
                </tr>';
                
    //Weergeef gegevens
    while ($row = mysql_fetch_assoc ($res))
    {
        echo '
                <tr>
                    <td>$row->naam</td>
                </tr>';
    }
    
    //Sluit tabel
    echo '</table>';
                    
}

//Als er nog niet is gezocht
else
{
echo '
<form method="GET">
    <table>
        <tr>
            <td colspan="2"><b>Zoeken in database</b></td>
        </tr>
        <tr>
            <td>Kolom:</td>
            <td>
                <select name="kolom">
                    	<option value="nummer">Klantnummer</option>
                    	<option value="naam">Naam</option>
			<option value="straat">Straat</option>
			<option value="huisnummer">Huisnummer</option>
			<option value="postcode">Postcode</option>
			<option value="woonplaats">Woonplaats</option>
			<option value="land">Land</option>	
			<option value="telefoon_1">Telefoon</option>
			<option value="telefoon_2">Telefoon 2</option>
			<option value="tele_fax">Fax</option>
			<option value="email">E-mail</option>
                </select>
            </td>
        </tr>
        <tr>
            <td>Trefwoord:</td>
            <td>
                <input type="text" name="trefwoord" />
            </td>
        </tr>
        <tr>
            <td colspan="2"><input type="submit" value="Zoeken"></td>
        </tr>
    </table>
</form>';
}
?> 
</body>

</html>

nu snap ik de code bijna helemaal. enige wat ik niet snap is wat deze regel doet
<td>$row->naam</td>

maar kan iemand mij misschien uitleggen wat er fout is?

alvast bedankt!:thumb:
 
zet onder de volgende regel eens
$res = mysql_query("SELECT * FROM tabelnaam WHERE '".$_GET['kolom']."'LIKE '".$_GET['trefwoord']."'");

deze twee regels, die printen je sql commando
$print="SELECT * FROM tabelnaam WHERE '".$_GET['kolom']."'LIKE '".$_GET['trefwoord']." ";
echo $print;

en post wat er geprint wordt.
wat mij wel opvalt is dat ik geen spatie zie voor like
."'LIKE '" moet ."' LIKE '" zijn dacht ik.

kan je ook gegevens van je tabel geven waarin je zoekt ?
Want misschien moet je wel een leeg resultaat krijgen?
 
dit werkt niet omdat je nu het commando print en niet het resultaat
 
dat is dan ook de bedoeling.
Ik wil exact weten welk commando er doorgegeven wordt.
en zolang ik niet meer weet over de inhoud van de tabel kan ik ook niet zeggen wat er mis is aan de querry

ook zag ik net: gebruik je "where is" in je querry of "where" ?
"where" ZONDER "is" is de juiste syntax
 
Laatst bewerkt:
nou over de inhoud kan ik niet al te veel geven.

er staan gegevens in zoals

klantnummer
naam
straat
huisnummer
postcode
woonplaats
land
telefoon 1
telefoon 2
fax
email

er staan een paar duizend gegevens in van personen. een voorbeeld is Zwart(naam)
dus als ik met jou code zou zoeken naar zwart krijg ik
SELECT * FROM klantdb WHERE 'naam' LIKE 'zwart

klantdb is de tabel

mocht je meer info over de tabel nodig hebben moet je het zeggen en zeggen wat je precies nodig hebt
 
Laatst bewerkt:
Kijk ook eens op
http://www.techonthenet.com/sql/like.php
staat wat uitleg over like met voorbeelden ook over dingen als LIKE '%zwart'
want misschien moet je gewoon where naam = zwart doen en niet like gebruiken?
like dient om te vergelijken, niet voor als je exact hetzelfde wilt.

let ook op sql kan verschil zien tussen ' en ´
het eerste teken staat onder nummer 4 en het tweede bij % op je toetsenbord.

verder zie ik dat in je voorbeeld dater 'zwart staat en niet 'zwart'
 
Het is opgelost!

door wat jij zei dacht ik... ik schrijf het over. maar dan opnieuw op de manier wat jij zei.
uiteindelijk toen ik het aan het doorlezen was. zag ik dat er wat fouten inzaten. verbeterd. eerst had ik nog het probleem dat die
$row->naam steeds aangaf x het aantal records wat in de db zaten die met trefwoorden overeen kwamen. maar dat heb ik zelf weten op te lossen!

maak nu gebruik van wildcard. dus Zwart geeft nu alle namen weer waar zwart in voorkomen!

heel erg bedankt voor je reacties!
 
Laatst bewerkt:
gebruik:
$row[$_GET['kolom']]
ipv
$row ->naam

en let er wel op dat je php
tussen <??> staat
en je html erbuiten...
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan