zoekscript voor mijn site werkt niet

Plaats reactie
herontdek.be
Starter
Starter
Berichten: 9
Lid geworden op: 13 nov 2005, 11:37
Locatie: gent
Contacteer:

beste mensen ,

Ik ben al bijna drie dagen op zoek naar een goed zoekscript.Wat het moet kunnen simpel het moet zoeken in mijn database en het moet in php zijn . Ik had hier een script maar het werkt dus niet op mijn database.
Het moet kunnnen zoeken in 1 tabel en in al de rijen van die kolom
hieronder plaats ik het script maar ook de tabel gegevens . Is er iemand die mij kan helpen aub , ben echt radeloos aan het worden .

Code: Selecteer alles

<?php 
$db_hostname = "localhost"; // je db host
$db_database = "...."; // je database
$db_user = "s";     // je username
$db_password = "..."; // je pass
$tabel = "script_scripts";      // je eerste tabel
$tabel2 = "";      // je tweede tabel
$volgorde = "script_id";    // Kolomnaam waarop hij gesorteerd gaat worden
$Kolom1 = "script_id";      // Kolom 1 waar je in wilt zoeken
$Kolom2 = "script_auteur";      // Kolom 2 waar je in wilt zoeken
$Kolom3 = "";      // Kolom 3 waar je in wilt zoeken
$Kolom4 = "";      // Kolom 4 waar je in wilt zoeken
?>
<HTML>
<HEAD>
<TITLE></TITLE>
</HEAD>
<BODY>
<?php
$mysql_handle = mysql_connect($db_hostname,$db_user,$db_password);
                mysql_select_db($db_database,$mysql_handle);

if(!isset($trefwoord)){
echo "<FORM method=post>
  <table width=100%>
    <tr>
      <td height=15 colspan=2><b>Zoeken</b>
         </td>
    </tr>
    <tr>
      <td height=30>Zoek :</td>
      <td height=30>
          <input type=text name=trefwoord value=\"\" size=40>
        </td>
   </tr>
    <tr>
      <td height=30>Zoek bij :</td>
      <td height=30>
          <SELECT NAME=search>
        <option value=$Kolom1>$Kolom1
        <option value=$Kolom2>$Kolom2
        <option value=$Kolom3>$Kolom3
        <option value=$Kolom4>$Kolom4
        </select>
      </td>

    </tr>
    <tr>
      <td height=30> </td>
      <td height=30>
          <input type=submit name=submit value=Zoek>

       </td>   </tr>
   </tr>
  </table>

</form>";



} else {
echo "<table width=100%>
      <tr>
      <td width=5%><b>$Kolom1</b></td>
      <td width=40%><b>$Kolom2</b></td>
      <td width=35%><b>$Kolom3</b></td>
      <td width=20%><b>$Kolom4</b></td>
      </tr>";

    $server = mysql_connect($db_hostname,$db_user,$db_password);
        mysql_select_db($db_database,$server);
        $sql = "SELECT * FROM $tabel,$tabel2 WHERE $search LIKE '%$trefwoord%' ORDER BY $volgorde";
        $res = mysql_query($sql) or die(mysql_error());
        $num = mysql_num_rows($res);
        if (empty($num)){
        echo "";
        }
    while($row = mysql_fetch_object($res)){

echo "<tr>
      <td width=5%>$row->$Kolom1</td>
      <td width=40%>$row->$Kolom2</a></td>
      <td width=35%>$row->$Kolom3</td>
      <td width=20%>$row->$Kolom4</td>
      </tr>";
    }
echo "<td colspan="4"><center>Er zijn <b>$num</b> resultaten .</center> </td></tr></table></center></p>";
    }
}

?>
</td>
    </tr>
</table>
</BODY>
</HTML>
 


 hier de gegevens van die tabel

CREATE TABLE script_scripts
(
script_id INT NOT NULL AUTO_INCREMENT,
script_naam VARCHAR (40) NOT NULL,
script_auteur VARCHAR (40) NOT NULL,
script_categorie VARCHAR (40) NOT NULL,
script_uitleg TEXT NOT NULL,
script_code TEXT NOT NULL,
script_foto VARCHAR (100) NOT NULL,
PRIMARY KEY (script_id)
);


please help me , en alvast dank bij voorbaat

Bewerkt door SeNsEi Ze0n
Gelieve volgende keer code-tags te gebruiken, de code was nu niet leesbaar.
Mogen reizen leuker worden
Gebruikersavatar
meon
Administrator
Administrator
Berichten: 16609
Lid geworden op: 18 feb 2003, 22:02
Twitter: meon
Locatie: Bree
Uitgedeelde bedankjes: 564 keer
Bedankt: 759 keer
Contacteer:

Aha, de zoekfunctionaliteit-vraag!

Ik heb het opgelost op volgende manier:
De TEXT-fields heb ik in MySQL een fulltext-index op gezet (doe dat nu, nu de db nog min of meer leeg is. Achteraf toevoegen is geen goed idee).
In je SQL kan je dan ipv een LIKE %xxx%-statment MATCH AGAINST gebruiken, wat én sneller is en meer mogelijkheden geeft.
Ongetwijfeld zijn er elders op internet nuttige tutorials te vinden die de correcte syntaxis vertellen. Ik heb het uit de MySQL-reference op MySQL.com zelf gehaald: http://dev.mysql.com/doc/refman/5.0/en/ ... earch.html
Gebruikersavatar
meon
Administrator
Administrator
Berichten: 16609
Lid geworden op: 18 feb 2003, 22:02
Twitter: meon
Locatie: Bree
Uitgedeelde bedankjes: 564 keer
Bedankt: 759 keer
Contacteer:

Oké, je hebt dus geen idee wat ik zeg (PM).

Ik neem aan dat je phpMyAdmin gebruikt om je database te beheren? Bewerk je tabel en klik bij " Creëer een index op kolommen" op start.
Geef je index een naam, bijvoorbeeld "zoek"
Als type geef je FULLTEXT
In de keuzevelden er onder duid je je script_code en script_uitleg-velden aan. Sla de index op. Afhankelijk van de hoeveel data die er al in staat gaat dat lang of minder lang duren.

Je sql-query pas je dan aan zodat die er zo uitziet:

Code: Selecteer alles

SELECT * FROM script_scripts WHERE MATCH (`zoek`) AGAINST (`$trefwoord`);
Gebruikersavatar
ban
Pro Member
Pro Member
Berichten: 232
Lid geworden op: 22 maa 2004, 16:21

volgens mij heb je gewoon een kleine fout gemaakt in het php script, dat verder wel zou moeten werken (denk ik toch)

Code: Selecteer alles

$sql = "SELECT * FROM $tabel,$tabel2 WHERE $search LIKE '%$trefwoord%' ORDER BY $volgorde";


Code: Selecteer alles

$sql = 'SELECT * FROM '.$tabel.','.$tabel2.' WHERE '.$search.' LIKE "%'.$trefwoord.'%" ORDER BY '.$volgorde;


of ben ik nu helemaal verkeerd meon ?
het gebruik van double quotes in php kan soms heel verwarrend zijn,
mijn ervaring zegt me dat je beter alles kan doen in single quotes,
maar zoals je ziet moet je dan wel elke variabele buiten de string houden en aan de string plakken met een puntje.
Sub Zero
Administrator
Administrator
Berichten: 6181
Lid geworden op: 15 sep 2002, 12:14
Locatie: Herzele
Uitgedeelde bedankjes: 74 keer
Bedankt: 121 keer
Contacteer:

Voor strings gebruik je best dubbele aanhalingstekens. Maar in-line variabelen gebruiken, om het zo maar te noemen, is niet echt een goed idee. Dus je string afsluiten en tussen 2 puntjes zetten als je een variabele wil invoegen.
Afbeelding
Gebruikersavatar
meon
Administrator
Administrator
Berichten: 16609
Lid geworden op: 18 feb 2003, 22:02
Twitter: meon
Locatie: Bree
Uitgedeelde bedankjes: 564 keer
Bedankt: 759 keer
Contacteer:

Die SQL die hij in z'n voorbeeld gaf was denk ik niet fout. Maar een WHERE LIKE-statement is wel een héél pak trager dan een WHERE MATCH AGAINST! Bovendien kan je in die laatste ook op meerdere woorden zoeken (die niet noodzakelijk bij mekaar staan) en booleans gebruiken en krijg je een zoekscore terug (hoe hoger, hoe beter het resultaat) en kan je daar dus op sorteren voor relevantie!
Merk ook op dat ik noch enkele quotes, noch dubbele gebruik, maar backquotes!
Plaats reactie

Terug naar “Development”