Vraag & Antwoord

Webprogrammeren & scripting

Zoeken in database levert niet het gewenste resultaat op

4 antwoorden
  • Ik heb twee pagina's: - search.php - result.php In search.php staat het volgende stuk source: [code:1:149f1973c6] <form action="result.php" name="form" method="get"> <Table style="width: 425px"> <tr> <td width="20"></td> <td width="161"><b>Sporten</b><br> <select name="Sporten" multiple size="10" class="matchfield"> <option value="60">Voetbal</option> <option value="61">Handbal</option> <option value="62">Zwemmen</option> <option value="63">Judo</option> <option value="64">Karate</option> </select> </td> </tr> </table> </form> [/code:1:149f1973c6] In result.php heb ik staan: [code:1:149f1973c6] <?php $colname_rsResults = "1"; if (isset($HTTP_GET_VARS['Sporten'])) { $colname_rsResults = (get_magic_quotes_gpc()) ? $HTTP_GET_VARS['Sporten'] : addslashes($HTTP_GET_VARS['Sporten']); } mysql_select_db($database_Club, $Club); $query_rsResults = sprintf("SELECT Naam, Achternaam FROM members WHERE Sporten LIKE '%s'", $colname_rsResults); $rsResults = mysql_query($query_rsResults, $Club) or die(mysql_error()); $row_rsResults = mysql_fetch_assoc($rsResults); $totalRows_rsResults = mysql_num_rows($rsResults); ?> <table width="100%" border="0" cellspacing="0" cellpadding="20"> <td> <?php do { ?> <?php echo $row_rsResults['Naam']; ?> <?php echo $row_rsResults['Achternaam']; ?><br> <?php } while ($row_rsResults = mysql_fetch_assoc($rsResults)); ?> </td> </table> [/code:1:149f1973c6] Als ik een keuze maak in search.php, bijvoorbeeld "Voetbal" dan krijg ik iedereen te zien die voetbalt (hier gaat ook iets niet goed, maar dat komt onderaan terug). Maar als ik selecteer "Voetbal" en "Handbal" dan krijg ik niets terug (er is namelijk niemand die handbalt). Selecteer ik alles dan krijg ik alleen die mensen te zien die aan Karate doen. Ziet iemand hier de fout? Daarnaast is het zo dat iemand aan meerdere sporten kan doen. De sporten zijn dmv codes aan een persoon gelinkt in de database. Persoon a heeft code 60 (voetbal) Persoon b heeft code 6061 (voetbal+handbal) Nu dacht ik dat met LIKE (zie source in result.php) je voor elkaar krijgt dat als voetbal wordt gekozen persoon a EN persoon b als resultaat verkregen wordt. Maar dat is dus niet het geval. Ook hier weer iemand die ziet wat er fout gaat?
  • Het feit dat je niets terugkrijgt wanneer je twee sporten selecteerd komt omdat meen multiple select een array meestuurt. Met die LIKE in je query moet je juist een integer aanbieden. Met een for-loop kun je van je array een integer maken door alle getallen achter elkaar te plakken. Op die manier maak je van de losse getallen uit je $_GET 1 getal waarop je kunt zoeken. Ik zou echter het hele DB model eens grondig herzien. De methode om de verschillende sporten op te slaan in de DB is niet de juiste. Wat je beter kunt doen 3 tabellen maken. 1 tabel met personen, 1 tabel met sporten, en 1 koppeltabel. De reden is namelijk dat je een zgn n:m relatie hebt. Ieder persoon kan meerdere sporten beoefenen, en iedere sport kan door meerdere mensen beoefend worden. Hierovor heb je dus een koppeltabel nodig waarin je de personen en sporten aan elkaar koppelt. Met een JOIN query kun je vervolgens alle personen selecteren die een sport doen of omgekeerd...alle sporten die door een persoon gedaan worden.
  • zelf gebruik ik het volgende zoek script, dit zoekt in de titel van een artikel/download, en in het artikel zelf. $woorden = explode(" ", $zoek); splitst de ingevoerde string bij een spatie, en zet ze in een array, de rest spreekt voor zich :) [code:1:4639c95a91] if($zoek == '' || $zoek == ' ') { echo"U heeft niets ingevoerd"; } else { $complete_string = $zoek; //complete, onbewerkte zoekstring in $complete_string stoppen, om zo weer in het input veld weer te geven. $varomtesplitsen = $zoek; //sting om op te splitsen $varomtesplitsen = ereg_replace(" ", "+", $varomtesplitsen);//voor highlight functie, string wordt aan elkaar verbonden door + en op de pagina zelf weer in een array geplaatst om te highlighten. $zoek = htmlspecialchars($zoek); //foute tekens uit de string halen $woorden = explode(" ", $zoek); //string splitsen bij spatie en in array pleuren $aantal = count($woorden); //kijken uit hoeveel regels de array bestaat for($i=0; $i< $aantal; $i++)//for loopje om $woorden[$i] te maken { $resultaat_zoek = mysql_query("SELECT * FROM $tabel WHERE titel LIKE '%$woorden[$i]%' OR bericht LIKE '%$woorden[$i]%'"); $aantal_zoek = mysql_num_rows($resultaat_zoek); } if($aantal_zoek == '0') { echo "Er zijn geen resultaten gevonden op <b>$zoek</b>"; } else { if($aantal_zoek == '1') { echo"Er is <b>$aantal_zoek</b> resultaat gevonden op <b>$zoek</b><br><br>"; } else { echo "Er zijn <b>$aantal_zoek</b> resultaten gevonden op <b>$zoek</b><br><br>"; } while($zoekresult = mysql_fetch_object($resultaat_zoek)) { echo "<b>titel:</b> <a href=\"index.php?pagina=$tabel&id=$zoekresult->id&highlight=$varomtesplitsen\">$zoekresult->titel</a><br>\n"; echo "<b>Categorie:</b> $zoekresult->categorie<br>\n"; echo "<div style=\"border-bottom:1px solid;\"><b>datum:</b> $zoekresult->datum</div><br>"; } } } [/code:1:4639c95a91] ik weet het, vars mogen niet tussen quotes, maar dat moet ik nog aanpassen :)
  • [b:78f686c875]ledensearchresult.php?Sporten=63[/b:78f686c875] Dit levert een resultaat op [b:78f686c875]ledensearchresult.php?Sporten=63&Sporten=64[/b:78f686c875] Dit levert niets op [b:78f686c875]ledensearchresult.php?Sporten=62&Sporten=63[/b:78f686c875] Dit levert hetzelfde resultaat op als bij de eerste Het lijkt mijn inziens dus dat alleen naar het laatste gedeelte wordt gekeken (Sporten=63) Ik begrijp iig wat jullie beide bedoelen en ik zal ook proberen om jullie oplossingen te gebruiken. Het zou goed kunnen zijn dat Japaveh zijn stuk van toepassing is op bovenstaande output wat niet het gewenste resultaat levert (irt integer gedeelte).

Beantwoord deze vraag

Weet jij het antwoord op deze vraag? Registreer of meld je aan met je account

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.