login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Zoekmachine fouten

Offline roelh - 13/06/2006 13:22
Avatar van roelhPHP gevorderde Hey allemaal,

Ik heb dit script van hier ff gepakt.
Nu wil hij wel zoeken, maar heb ik dit probleem
  1. Geen of te veel resultaten, maak je zoekopdracht specifieker.

K zoek op Volkswagen, die staat 1X in de tabel, maar toch geeft hij dat weer.
Kan iemand me helpen?

Groet,

  1. <?php
  2. include "config.php";
  3.  
  4. if(isset($_POST['submit'])) {
  5. ?>
  6. <table>
  7. <tr>
  8. <td>
  9. <b>Categorie:</b>
  10. </td>
  11. <td>
  12. <b>Titel:</b>
  13. </td>
  14. <td>
  15. <b>Score:</b>
  16. </td>
  17. </tr>
  18. <?php
  19. $query = "SELECT * FROM autos WHERE MATCH (merk, type, bouwjaar) AGAINST ('" . $_POST['zoekwoord'] . "')";
  20. $resultaat = mysql_query($query) or die(mysql_error()); //Query uitvoeren
  21.  
  22. if(mysql_num_rows($resultaat)== 0) { //Mysql_num_rows geeft 0 als er geen resultaten zijn, of als de zoekterm in meer dan 50% van de resultaten voorkomt.
  23. echo "<tr>
  24. <td>Geen of te veel resultaten, maak je zoekopdracht specifieker.</td>
  25. </tr>
  26. ";
  27. } else {
  28.  
  29. while($zoek = mysql_fetch_assoc($resultaat)) {
  30. ?>
  31. <tr>
  32. <td>
  33. <?php
  34. echo $zoek['merk'];
  35. ?>
  36. </td>
  37. <td>
  38. <?php
  39. echo $zoek['type'];
  40. ?>
  41. </td>
  42. </tr>
  43. <?php
  44. }
  45. } //einde 'aantal'-lus
  46.  
  47. echo "</table>";
  48.  
  49. } else {
  50. //Formulier weergeven
  51. ?>
  52. <form method="post" action="">
  53. Zoeken naar: <input type="text" name="zoekwoord"/><br/>
  54. <input type="submit" name="submit" value="Zoek"/>
  55. </form>
  56. <?php
  57. }
  58. ?>

28 antwoorden

Gesponsorde links
Offline marten - 13/06/2006 13:46 (laatste wijziging 13/06/2006 13:47)
Avatar van marten Beheerder in je phpmyadmin de query uitvoeren helpt je te ontdekken of de query wel goed is

Heb je deze tutorial doorgenomen?
http://www.site...amp;id=423
Offline roelh - 13/06/2006 13:52 (laatste wijziging 13/06/2006 13:56)
Avatar van roelh PHP gevorderde Hmmss hij geeft iid niks terug, maar wel raar, het staat er namelijk wel in, dus snap niet waarom hij die niet terugggeeft.
Iemand misschien idee? 
Als ik zoek op bouwjaar, getallen dus, doet hij het wel, en anders niet, vind ik rare eraan 
Offline marten - 13/06/2006 14:09
Avatar van marten Beheerder typfoutje? hoofdlettergevoelig?
Offline roelh - 13/06/2006 14:17 (laatste wijziging 13/06/2006 14:39)
Avatar van roelh PHP gevorderde Hmmss neen, maar als ik 3 auto's erin heb staan, en ik zoek bijv op bouwjaar 1980 en ze zijn allemaal 1980 pakt ie ze al niet meer, moet je specifieker zijn.
Bij 3 auto's mag er maar 1 overeenkomen met de zoek opdracht, dus ik gebruik gewoon LIKE, denk dat voor mij dan handiger is 

Edit:

Ga toch ff proberen nog met dit, maar er staat dus SCORE, hoe kan ik die gebruiken dan? Dus dat hij de score weergeeft.
Alvast bedankt 
Offline vinTage - 13/06/2006 16:27
Avatar van vinTage Nieuw lid Als je met match en against werkt en je zoekRESULTAAT is meer dan 50% word er ook niets weergegeven.
Dus als je in je db maar één rij hebt en je zoekt dan op volkswagen, dan heb je dus 100% match en word er niets weergegeven.
Ook moet je met een zoekwoord van minimaal 3 letters zoeken.
En je moet natuurlijk een fulltext index hebben van je tabellen (myIsam en nog een (vergeten))
Offline roelh - 13/06/2006 17:56
Avatar van roelh PHP gevorderde Dit heb ik allemaal en het werkt nu.
Ik kan nu goed zoeken.
Omdat je minder dan 50% zoekresultaat moet hebben wil ik dus met meerdere tekstvelden gaan werken of selectboxen.
Dus als ik bijv selectbox "merk" en "type" heb wil ik dat ik op beide kan zoeken, maar hoe doe ik dat?
Dit wil niet werken

Dit wil niet:
'" . $_POST['zoekwoord'] . "' '" . $_POST['zoekwoord1'] . "' of
'" . $_POST['zoekwoord'] . "', '" . $_POST['zoekwoord1'] . "'

Wie o wie kan me helpen? 

  1. <?php
  2. include "config.php";
  3.  
  4. if(isset($_POST['submit'])) {
  5. ?>
  6. <table>
  7. <tr>
  8. <td>
  9. <b>Merk:</b>
  10. </td>
  11. <td>
  12. <b>Type:</b>
  13. </td>
  14. <td>
  15. <b>Bouwjaar:</b>
  16. </td>
  17. </tr>
  18. <?php
  19. $query = mysql_query("SELECT merk, type, bouwjaar, MATCH (merk, type, bouwjaar) AGAINST
  20. ('" . $_POST['zoekwoord'] . "') AS score
  21. FROM autos WHERE MATCH (merk, type, bouwjaar) AGAINST
  22. ('" . $_POST['zoekwoord'] . "')") or die(mysql_error());;
  23.  
  24. if(mysql_num_rows($query)== 0) { //Mysql_num_rows geeft 0 als er geen resultaten zijn, of als de zoekterm in meer dan 50% van de resultaten voorkomt.
  25. echo "<tr>
  26. <td>Geen of te veel resultaten, maak je zoekopdracht specifieker.</td>
  27. </tr>
  28. ";
  29. } else {
  30.  
  31. while($zoek = mysql_fetch_assoc($query)) {
  32. ?>
  33. <tr>
  34. <td>
  35. <?= $zoek['merk'];?>
  36. </td>
  37. <td>
  38. <?= $zoek['type'];?>
  39. </td>
  40. <td>
  41. <?= $zoek['bouwjaar'];?>
  42. </td>
  43. </tr>
  44. <?php
  45. }
  46. } //einde 'aantal'-lus
  47.  
  48. echo "</table>";
  49.  
  50. } else {
  51. //Formulier weergeven
  52. ?>
  53. <form method="post" action="">
  54. Zoeken naar: <input type="text" name="zoekwoord"/><br/>
  55. <input type="submit" name="submit" value="Zoek"/>
  56. </form>
  57. <?php
  58. }
  59. ?>
Offline vinTage - 13/06/2006 18:23
Avatar van vinTage Nieuw lid zoiets denk ik:
  1. WHERE MATCH (merk, type, bouwjaar) AGAINST
  2. ('" . $_POST['zoekwoord'] . "&nbsp;" . $_POST['zoekwoord1']."')") or die(mysql_error());
Offline roelh - 13/06/2006 18:33
Avatar van roelh PHP gevorderde Hmmss neen ook niet, want als ik Audi bij zoekterm in en A4 bij zoekterm1 dan pakt hij alsnog alle audi's, ook van de andere types.
Moet toch wel kunnen dat je met meerdere zoekwoorden kunt werken?
Offline vinTage - 13/06/2006 18:39
Avatar van vinTage Nieuw lid je kan bv je WHERE ook nog gebruiken

SELECT zooi WHERE jaartal='selectoption'

ofziets 
Offline roelh - 13/06/2006 18:42
Avatar van roelh PHP gevorderde Hmmss kun je me een beetje opweg helpen? Want nu kom ik er ff niet meer uit namelijk.
Zou je miss me query ff willen veranderen dan? 
Offline vinTage - 13/06/2006 18:48 (laatste wijziging 13/06/2006 18:49)
Avatar van vinTage Nieuw lid Maak een selectmenu met daarin je jaartallen (lijkt mij tenminste logisch omdat de ene handelaar mss 06 intyped en de ander 2006)
en dan zoiets:
  1. FROM autos WHERE MATCH (merk, type, bouwjaar) AGAINST
  2. ('" . $_POST['zoekwoord'] . "&nbsp;" . $_POST['zoekwoord1']."' WHERE bouwjaar = '".$_POST['een selectbox met jaartallen']."')") or die(mysql_error());


ps: ik denk maar hardop hoor, de enige ervaring die ik heb met een fulltext is met maar één zoekwoord (maar werkt wel )
Offline roelh - 13/06/2006 18:51 (laatste wijziging 13/06/2006 18:58)
Avatar van roelh PHP gevorderde Na probleem is dus, als ik zoekwoord & zoekwoord1 wil gebruiken, pakt hij niet beide namelijk.
Nu heb ik dit:
  1. $query = mysql_query("SELECT merk, type, bouwjaar, MATCH (merk, type, bouwjaar) AGAINST
  2. ('" . $_POST['zoekwoord'] . "&nbsp;" . $_POST['zoekwoord1']."') from autos")


Maar dan pakt hij alles, wat voor merk je ook intypt, maar ik ga dat van jouw ff proberen

edit:

Dit wil ook niet werken, jammer...is het uberhaupt mogelijk om dit zo te doen? Anders moet ik met LIKE gaan werken denk ik, want dan kun je wel met meerdere zoekopdrachten werken volgens mij??
Offline Simon - 13/06/2006 19:04
Avatar van Simon PHP expert wrm doe je niet iets als bij google:

audi + A4 in één tekstvak,
je haalt die + eruit door str_replace
en dan met hetgeen je bezig was, nl. 1 match
Offline roelh - 13/06/2006 19:08
Avatar van roelh PHP gevorderde Na kijk, ik wil eigenlijk met selectboxen gaan werken
Een merk aanklikken dat je in de andere een type kunt aanklikken.
En dat je zo kunt zoeken op een auto.
Zo wil ik dat dus gaan maken, dus krijg je meerdere $_POST namelijk
$_POST['merk'] en $_POST['type']
en later nog bouwjaar

Zoiets wil ik dus, dus denk handiger dat ik met LIKE ga werken?
Offline Simon - 13/06/2006 19:11
Avatar van Simon PHP expert Dan doe je gewoon
  1. WHERE merk='".$_POST['merk']."' AND merk='".$_POST['type']."' AND merk='".$_POST['bouwjaar']."'

want met selectboxen is het een specifieke waarde, dus LIKE is niet nodig
Offline roelh - 13/06/2006 19:15 (laatste wijziging 13/06/2006 19:16)
Avatar van roelh PHP gevorderde
  1. WHERE merk='".$_POST['merk']."' AND type='".$_POST['type']."' AND bouwjaar='".$_POST['bouwjaar']."'


dus krijgje

  1. mysql_query ("SELECT * FROM autos WHERE merk='".$_POST['merk']."' AND type='".$_POST['type']."' AND bouwjaar='".$_POST['bouwjaar']."'")


Di bedoel je zo dus?
Offline vinTage - 13/06/2006 19:27
Avatar van vinTage Nieuw lid
Citaat:
wrm doe je niet iets als bij google:

audi + A4 in één tekstvak,
je haalt die + eruit door str_replace
en dan met hetgeen je bezig was, nl. 1 match



Je moet die niet eruit slashen, maar die zegt welke woorden er nog meer gevonden moeten worden als je met IN BOOLEAN MODE werkt
Offline roelh - 13/06/2006 19:41
Avatar van roelh PHP gevorderde Heb nu dit, maar hij moet als ik merk=audi type=a4 en bouwjaar=1987 die auto's bij elkaar zoeken, maar hij zoekt dan ook alle 1987 auto's bij elkaar. Hoe kan ik dit veranderen dan?
Dat FULLTEXT search gaat denk niks worden.
EN dan nog een vraagje, bij de TUTS hier zat ik bij LIKE dat je % kon gebruiken, waar moet ik die neergooien? Krijg zelf alleen maar fouten.

Groet,

  1. $query = mysql_query ("SELECT * FROM autos WHERE merk LIKE '".$_POST['merk']."' OR type LIKE '".$_POST['type']."'OR bouwjaar LIKE '".$_POST['bouwjaar']."'") or die (mysql_error());
Offline vinTage - 13/06/2006 19:47
Avatar van vinTage Nieuw lid WHERE merk LIKE '%ZOEWOORD%'

die% betekend dat er iets voor of achter mag staan.

'%zoekwoord' dit kan ook zrettezoekwoord opleveren (als dat erin staat natuurlijk)
'zoekwoord%' dit kan zoekwoordzretyyt opleveren (als dat erin staat natuurlijk)
'zoekwoord' kan alleen zoekwoord opleveren (als dat erin staat natuurlijk)
Offline roelh - 13/06/2006 19:53
Avatar van roelh PHP gevorderde Hmmss ja dat snap ik, maar k krijg hem niet toegepast op mijn script

'".$_POST['merk']."'

Waar moet k dat teken neerzetten heb al wat fouten gehad namelijk.
Offline vinTage - 13/06/2006 19:57
Avatar van vinTage Nieuw lid '%".$_POST['merk']."%'

tut
Offline roelh - 13/06/2006 20:01
Avatar van roelh PHP gevorderde Sorry, had ik kunnen zien ja 
Beetje stom.
Nog 1 vraagje dan maar.
Als ik zoek op Audi A4 1999 pakt bij wel alle Audi A4 maar ook alle bouwjaren met 1999
Hoe zorg ik ervoor dat hij dan alleen Audi A4 van 1999 en niet bijvoorbeeld ook BMW's?
Offline Ontani - 13/06/2006 20:03
Avatar van Ontani Gouden medailleGouden medailleGouden medailleGouden medaille

-1
zonder het laatste procent teken dacht ik
Offline roelh - 13/06/2006 20:08
Avatar van roelh PHP gevorderde Hmms thanks, wil nog niet zo lukken maargoed, kom er hopelijk wel uit.
Offline vinTage - 13/06/2006 20:12
Avatar van vinTage Nieuw lid je gebruikt ook or in je query en niet and.

dus je zoekt naar "automerk" OF "jaartal" OF.....
Offline roelh - 13/06/2006 20:32
Avatar van roelh PHP gevorderde Thanks ja dat klopt, maar dat betekent automatisch ook dat je ALLES moet invullen. dus merk, type EN bouwjaar, en dat moet niet altijd het bouwjaar, of merk of type.
Maargoed, moet ik maar oplossing voor vinden ;) Of weetje daar toevallig ook iets voor?
Offline vinTage - 13/06/2006 20:34
Avatar van vinTage Nieuw lid if(isset(post 1 en post 2 en post 3){query voor alle3 de inputs}

etc

ofzoiets
Offline roelh - 13/06/2006 20:41
Avatar van roelh PHP gevorderde Na werkt niet, maar maakt niet uit, iig bedankt voor het helpen mensen! 
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2025 Sitemasters.be - Regels - Laadtijd: 0.309s