webForumDet fria alternativet

sökmotor med php och mysql

2 svar · 1 770 visningar · startad av vela

velaMedlem sedan okt. 20079 inlägg
#1

Hej!

Ska bygga en sökmotor/-funktion för en databas, som ska integreras på en existerande hemsida. Jag är helt grön på både php och mysql, och behöver därför lite hjälp.

Databasen består av information om beståndet i ett arkiv över olika organisationer. Den är från början gjord i Filemaker (som en relationsdatabas), men nu exporterad till MySQL, där den består av endast en tabell. Runt 13000 poster, 13 kolumner. Innehållet i posterna är bara text eller siffror.

Jag vill ha en söksida (sok.php) med knapparna ’sök’ och ’rensa’. Två sökfält. Ett fritext, som söker i flera kolumner i databasen. Och ett sökfält som söker i enbart en kolumn i databasen (ort). Dessa två sökfält ska också kunna kombineras. Så om man exempelvis söker på ”blå” i fritextfältet och ”Skellefteå” i ortfältet, ska den hitta alla poster med ordet ”blå” i sig, från Skellefteå.

Ska också finnas två optionfält där man kan välja att sortera sökresultat efter 1. kommuner och 2. kategorier.

Sökfunktionen ska i övrigt vara så flexibel att om man exv. söker på nonsens-bokstavskombinationen ”klig”, vill jag att alla träffar med ”klig” någonstans i ordet, ska komma med.

En resultatsida (resultat.php) där träffarna visas i bokstavsordning, med namnet på organisationen, och dess ort. Kanske tio stycken på varje sida. Det ska också stå hur många träffar det blev, och vilka träffar som visas på just den aktuella sidan (typ ”Visar träff 11-21 av 43”). En nästa-länk (som bläddrar framåt i träfflistan) och en sista-länk (som visar de sista av sökresultaten). En tillbakalänk (som backar stegvis bakåt bara), en söklänk (som tar en tillbaka till söksidan) och en hjälplänk (som tar en till en enkel hjälpsida).

Från resultatsidan med träffarna, ska man via namnen på organisationerna kunna klicka sig till en post-sida (post.php), där en post visas i sin helhet. Också här finns då länkarna ”tillbaka”, ”sök” och ”hjälp”.

Har försökt hitta script, både här och på andra ställen på nätet, men inget har riktigt uppfyllt mina kriterier. Har sett att det finns program där man kan skapa script, men ej testat ordentligt.

Någon som kan ge mig lite tips och/eller hjälp?

Vänligen,
/victor

DavlidMedlem sedan okt. 200725 inlägg
#2

Det är ju en del att labba med om du ska få ordning på det hela, speciellt om du är ny på både mysql och php.

Läs om hur man jobbar med HTML-formulär och PHP. Du behöver ju hämta den informationen för att kunna bygga en SQL-sträng för att hämta informationen. T.ex.

// Hämta värden
$Query = $_GET['query'];
$Ort = $_GET['ort'];

Det finns ju info om detta om du googlar lite, t.ex. Formulär mde PHP - Nezzo, Ullvi, EIB, Formulär i PHP

Kika hur man ansluter till databasen, och bygg ihop SQL-satsen utifrån den data du hämtat från formuläret.

Anslut: www.php.net/mysql_connect
Välj db: www.php.net/mysql_select_db
Ställ fråga: www.php.net/mysql_query
Hämta resultat: www.php.net/mysql_fetch_array
Frigör resultat: www.php.net/mysql_free_result
Stäng anslutningen: www.php.net/mysql_close

Här är ett psuedoexempel på hur det kan komma att se ut - det här är ingen kod som kommer att fungera direkt, men det kanske kan ge ett hum om hur det kan fungera.

Se till att testa SQL-frågan i en MySQL-klient innan du börjar bygga upp den via PHP också.

// Initiera variabler för SQL-frågan
$SQL = "SELECT * FROM `tabellen` ";
$SQLWhereClause = "";

if( $Query) {
 // Om "fritext fältet", query, är inmatat så matchar vi det med de kolumner som ska kollas
 $SQLWhereClause.= "(";
 $SQLWhereClause.= "kolumn1 LIKE '%" . mysql_escape_string($Query) .  "%'";
 $SQLWhereClause.= "OR kolumn2 LIKE '%" . mysql_escape_string($Query) .  "%'";
 $SQLWhereClause.= "OR kolumn3 LIKE '%" . mysql_escape_string($Query) .  "%'";
 // osv...
 $SQLWhereClause.= ")";
}

// Lägg till kontrollen av ort om den är angiven. Då matchas alla poster som innehåller texten i fritextfältet enligt ovan med denna ort.
if( $Ort )
{
 if( $SQLWhereClause!='')
  $SQLWhereClause.=' AND ';
 $SQLWhereClause.='`ort`='%" . mysql_escape_string($Ort) . "'%';
}

// Anslut till servern, välj databas, ställ frågan och lista resultatet. Här endast orterna.
$conn = mysql_connect($server,$user,$pass);
mysql_select_db("databasnamn", $conn);
$rs = mysql_query($SQL . $SQLWhereClause, $conn);

while( $row = mysql_fetch_array($rs) )
{
 echo $row['ort'] . "<br />";
}

mysql_free_result($rs);
mysql_close($conn);

Hoppas det hjälper lite.

/d

velaMedlem sedan okt. 20079 inlägg
#3

Ja, jag har förstått att det är mycket jobb. Och att det tar mycket tid (det har det redan gjort). Men så får det bli. På nåt sätt ska man ju lära sig :)

Åhå. Tack! Mycket snällt. Ska läsa på mer. Även om jag känner igen mycket av det där, så är väl snarast problemet att få ihop alltsammans.

Tack, igen.

/v

135 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)