Simpele php zoekfunctie

Status
Niet open voor verdere reacties.

Luukie

Gebruiker
Lid geworden
14 sep 2008
Berichten
105
Hallo mensen,

Ik wil een zoekfunctie op mijn website plaatsen dmv een zoekveld en een zoekbutton.
Ik heb data in een mssql database staan en ik wil zoeken op 'titel' uit de tabel 'tblVoorwerp'.

Kan iemand mij helpen met de php code? ik kom hier namelijk niet uit.

Met vriendelijke groet,

Luuk
 
Wat heb je zelf al geprobeerd?
 
Dit zou moeten werken:
overigens niet mijn script, maar wel behoorlijk aangepast door mij..

probeer het.. ^^

PHP:
<p>zoek:</p>           
<form method="post">
<input type="text" name="zoekwoord" />
<input type="submit" name="searchBtn" value="zoeken maar" />
</form>

<?php
$tablename = "tblVoorwerp";
$titlename = "titel";

	if ($_SERVER["REQUEST_METHOD"] == "POST"){
    
    $zoekwoord = mysql_real_escape_string($_POST['zoekwoord']);

    $sql = mysql_query("SELECT count(*) FROM $tablename WHERE $titlename LIKE '%".$zoekwoord."%'");
    
    $totalSearch = mysql_result($sql, 0 ,0);

    print '<p style="float:right;"><b>'.$totalSearch.'</b> resultaten voor <b>'.$zoekwoord.'</b></p><br />';
    print '<p style="float:left;"><h1>Gevonden resultaten:</h1></p>';
    
    $sql = mysql_query("SELECT * FROM $tablename WHERE $titlename LIKE '%".$zoekwoord."%'");

    while($res = mysql_fetch_array($sql)) {
    
    print $res['titel']."<br />";
    }
    }
?>
 
Dit zou moeten werken:
overigens niet mijn script, maar wel behoorlijk aangepast door mij..

probeer het.. ^^


Allereerst bedankt, al werkt het nog niet helemaal. Alle mysql moet ik vervangen door mssql maar mssql kent deze functie niet --> m(y/s)sql_real_escape_string() . Hoe los ik dit op of door wat vervang ik dit? (kan op google niet direct een oplossing vinden)

Kunt u me ook uitleggen waar beide
"$sql = mssql_query("SELECT * FROM $tablename WHERE $titlename LIKE '%".$zoekwoord."%'");"
voor dienen?

Mvg Luuk
 
Allereerst bedankt, al werkt het nog niet helemaal. Alle mysql moet ik vervangen door mssql maar mssql kent deze functie niet --> m(y/s)sql_real_escape_string() . Hoe los ik dit op of door wat vervang ik dit? (kan op google niet direct een oplossing vinden)

Kunt u me ook uitleggen waar beide
"$sql = mssql_query("SELECT * FROM $tablename WHERE $titlename LIKE '%".$zoekwoord."%'");"
voor dienen?

Mvg Luuk


ik heb nog eens getest, en werkt gewoon

antwoord op jouw vraag:
Er zijn 2 query's (waarvan 1 overbodige luxe is)
De eerste query telt het aantal gevonden resultaten en zegt dan "2 resultaten voor zoekwoord"

de tweede query pakt de titel.
en in de while, wordt het aantal overeenkomende titels weergegeven

de foutmelding die je zegt dat er komt, moet zijn mysql_real_escape_string bij jou staat er: m(y/s)sql_real_escape_string wat ik overigens nog nooit gezien heb en google er ook geen weet van heeft xD

EDIT: ik zie nu pas dat het MSsql moet worden, ik neem aan dat je dit wel lukt?


http://www.php.net/mysql_real_escape_string
Escapes special characters in a string for use in a SQL statement
 
Laatst bewerkt:
ik heb nog eens getest, en werkt gewoon

antwoord op jouw vraag:
Er zijn 2 query's (waarvan 1 overbodige luxe is)
De eerste query telt het aantal gevonden resultaten en zegt dan "2 resultaten voor zoekwoord"

de tweede query pakt de titel.
en in de while, wordt het aantal overeenkomende titels weergegeven

de foutmelding die je zegt dat er komt, moet zijn mysql_real_escape_string bij jou staat er: m(y/s)sql_real_escape_string wat ik overigens nog nooit gezien heb en google er ook geen weet van heeft xD

EDIT: ik zie nu pas dat het MSsql moet worden, ik neem aan dat je dit wel lukt?


http://www.php.net/mysql_real_escape_string


U begrijpt mij verkeerd ik bedoel met m(s/y)sql mssql OF mysql. Maar terzake: mssql kent de functie real_escape_string niet......daar kreeg ik een foutmelding van namelijk.
Is er geen vervangende functie oid voor?

Mvg Luuk
 
U begrijpt mij verkeerd ik bedoel met m(s/y)sql mssql OF mysql. Maar terzake: mssql kent de functie real_escape_string niet......daar kreeg ik een foutmelding van namelijk.
Is er geen vervangende functie oid voor?

Mvg Luuk

je kan het ook weg laten, alleen is minder veilig (SQL Injection)

ik heb net even gezocht :
maak er is van:
$zoekwoord = addslashes($_POST['zoekwoord']);
 
ik heb nog eens getest, en werkt gewoon

Er zijn 2 query's (waarvan 1 overbodige luxe is)
De eerste query telt het aantal gevonden resultaten en zegt dan "2 resultaten voor zoekwoord"

de tweede query pakt de titel.
en in de while, wordt het aantal overeenkomende titels weergegeven

Waarom doe je dan niet 1 query en
PHP:
mssql_num_rows($sql)
???
 
je kan het ook weg laten, alleen is minder veilig (SQL Injection)

ik heb net even gezocht :
maak er is van:
$zoekwoord = addslashes($_POST['zoekwoord']);

Oke ik heb dit geprobeert, en het werkt!!!!

Het enige probleem is nu nog wanneer ik nu op de zoekbutton klik, krijg ik deze fout:
Incorrect syntax near the keyword 'WHERE'. (severity 15) on line 25 ( de query dus). Iemand die de fout ziet?
Nog 1 extra vraagje. Ik zou graag de resultaten laten zien op de pagina: artikel.php . Hoe doe ik dit?

mvg
 
Laatst bewerkt:
nee ik zie het zo even niet.
maar ehmmm... kun je eens precies plaatsen wat er uit komt? of is dat dat al?
 
nee ik zie het zo even niet.
maar ehmmm... kun je eens precies plaatsen wat er uit komt? of is dat dat al?

Toevallig heb ik die foutmeldingen net precies kunnen verhelpen, ik heb namelijk de variabelen verwijderd en er gewoon de kolomnamen neergezet.

Mijn laatste vraag is hoe ik de resultaten op mijn andere pagina "artikel.php" kan laten zien ipv op dezelfde zoek.php. Dit is omdat ik die zoekfunctie op iedere pagina plaats, en de resultaten altijd op "artikel.php" wil laten zien. Hoe doe ik dit?

Mvg Luuk
 
de hele php-code daar zetten, en het formulier daar naartoe wijzen (action="artikel.php")

EDIT: zie -> mijn sig :P
 
Kleine suggestie: als je op deze simpele manier werkt kan je heel eenvoudig met str_replace de spaties in je zoekwoord vervangen door %, en zo meer resultaten terug krijgen :)

Cheers
BN
 
Ow sorry dat ik nog niet had gereageerd. Het is inderdaad gelukt! bedankt voor jullie hulp!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan