[php/mysql] met $variabel deel van woorden zoeken

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Elephtera
  • Registratie: Juni 2001
  • Laatst online: 17-09 22:05
Ik heb momenteel een lijst met mensen waar men zichzelf kan toevoegen, hier ben ik nu een zoek functie voor aan het maken, echter ik kom er niet uit.

er zijn een 8 velden, oa gebruiker, leeftijd, woonplaats etc.
nu heb ik de volgende zoek funcite gebouwd voor leeftijd:
code:
1
2
3
4
5
6
7
if ($oud!="")
{
        $sql = "SELECT entry_id,DATE_FORMAT(date,'%e-%c-%Y - %H:%i'),creator,email,Link,woonplaats,Provincie,leeftijd,geslacht FROM vampirefreaks WHERE leeftijd=$oud ORDER BY leeftijd, Link  LIMIT " . $limit_admin;
        $rs = mysql_query($sql, $conn);
        Error_db($rs);

}


en voor gebruiker de volgende:
code:
1
2
3
4
5
6
7
if ($gebr!="")
{
        $sql = "SELECT entry_id,DATE_FORMAT(date,'%e-%c-%Y - %H:%i'),creator,email,Link,woonplaats,Provincie,leeftijd,geslacht FROM vampirefreaks WHERE link = '$gebr' ORDER BY leeftijd, Link  LIMIT " . $limit_admin;
        $rs = mysql_query($sql, $conn);
        Error_db($rs);

}

$gebr is hier de invoer dmv een form op dezelfde pagina.

echter als gebruikersnaam elephtera is, en ik voer elephtera in vind hij het, doe ik eleph of lepht dan vind hij niks.

ik heb de handleiding van mysql doorzocht daar vind ik wel dingen als '%text%' om te gebruiken, echter als ik in vul '%$gebr%' dan geeft hij syntax foutmeldingen.

hoe moet ik dit oplossen? wat is de goede syntax hiervoor?

------------
en een tweede inbegrepen vraag, hoe kan ik de zoek functie over t algemeen verbeteren
nu kun je enkel op 1 onderdeel zoeken, dit laat ik dan langs lopen met een if statement. hoe combineer ik dit? dat ik kan laten zoeken op 8 velden, maar als een veld blanco is dat niet word meegenomen in de zoektocht.

[ Voor 4% gewijzigd door Elephtera op 03-12-2004 14:51 ]

“An elephant is a mouse with an operating system”


Acties:
  • 0 Henk 'm!

Verwijderd

LIKE '%blaat%'

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Debuggen: druk je query eens af. Ik denk dat je gezeur hebt met register_globals. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Zoefff
  • Registratie: September 2001
  • Laatst online: 12:37

Zoefff

❤ 

Zoals fladder al zegt, moet je LIKE gebruiken, waarbij % een willekeurige string kan zijn, en een _ voor 1 (willekeurig) teken staat.

Het word dan iets als
code:
1
WHERE link LIKE '%$gebr%'

Zie ook http://dev.mysql.com/doc/...comparison_functions.html

Hm, ik zie net dat je dat dus gedaan hebt :X

Dan zal er waarschijnlijk iets niet kloppen aan je SQL string.

Doe eens
PHP:
1
echo $sql;

:?

[ Voor 25% gewijzigd door Zoefff op 03-12-2004 14:58 ]


FotoblogWerkaandemuur.nlMoestuincursus.nlTwitter


Acties:
  • 0 Henk 'm!

  • Elephtera
  • Registratie: Juni 2001
  • Laatst online: 17-09 22:05
dankje! Zoeff en Fladder, dit lost het probleem op! ik had like wel geprobeerd maar nog niet met de procent tekens, ging er eigenlijk vanuit dat het niet kon, procenten en een $variabel omdat dat bij de gewone link = '%$gebr%' fout ging


edit

nu de tweede vraag nog, is de zoekfunctie zo aan te passen dat je als invoer bijvoorbeeld geeft leeftijd=18, geslacht=blanko, naam=piet en dat hij dan geslacht niet meeneemt in de zoek functie? of zul je al deze opties appart moeten verwerken met een if statement?

[ Voor 56% gewijzigd door Elephtera op 03-12-2004 15:02 ]

“An elephant is a mouse with an operating system”


Acties:
  • 0 Henk 'm!

  • Yo-han
  • Registratie: December 2001
  • Laatst online: 18-08 20:16

Yo-han

nope.

elephtera schreef op vrijdag 03 december 2004 @ 14:59:
...
edit

nu de tweede vraag nog, is de zoekfunctie zo aan te passen dat je als invoer bijvoorbeeld geeft leeftijd=18, geslacht=blanko, naam=piet en dat hij dan geslacht niet meeneemt in de zoek functie? of zul je al deze opties appart moeten verwerken met een if statement?
Je zou het kunnen proberen met de mysql "fulltext search":

code:
1
2
3
4
5
6
7
8
9
10
11
mysql> SELECT id, body, MATCH (title,body) AGAINST
    -> ('Security implications of running MySQL as root') AS score
    -> FROM articles WHERE MATCH (title,body) AGAINST
    -> ('Security implications of running MySQL as root');
+----+-------------------------------------+-----------------+
| id | body                                | score           |
+----+-------------------------------------+-----------------+
|  4 | 1. Never run mysqld as root. 2. ... | 1.5219271183014 |
|  6 | When configured properly, MySQL ... | 1.3114095926285 |
+----+-------------------------------------+-----------------+
2 rows in set (0.00 sec)

Acties:
  • 0 Henk 'm!

  • Elephtera
  • Registratie: Juni 2001
  • Laatst online: 17-09 22:05
dayoman schreef op vrijdag 03 december 2004 @ 15:06:
[...]


Je zou het kunnen proberen met de mysql "fulltext search":
Dit zal onvoldoende zn werk doen, gebruikersnaam kan bijvoorbeeld iets zijn asl 123pietje. als ik dan zoek op leeftijd 23, en pietje is maar 20. dan zal die fulltext search ook pietje 123pietje als resultaat geven.

“An elephant is a mouse with an operating system”


Acties:
  • 0 Henk 'm!

  • Yo-han
  • Registratie: December 2001
  • Laatst online: 18-08 20:16

Yo-han

nope.

elephtera schreef op vrijdag 03 december 2004 @ 15:09:
[...]


Dit zal onvoldoende zn werk doen, gebruikersnaam kan bijvoorbeeld iets zijn asl 123pietje. als ik dan zoek op leeftijd 23, en pietje is maar 20. dan zal die fulltext search ook pietje 123pietje als resultaat geven.
Dat is niet helemaal waar maar in jou geval is het mischien beter je query on-the-flight op te bouwen. Je checkt gewoon welke velden ingevuld zijn en deze stop je in een query.
Als iemand zoekt op gebruikersnaam, leeftijd en taal bouw je met php bijv. het volgende:

PHP:
1
2
3
4
5
$qry = "SELECT * 
           FROM tabel x 
           WHERE name LIKE '%$_POST[name]%' 
           AND age LIKE '%$_POST[age]%' 
           AND lang LIKE '%$_POST[lang]%'";


het WHERE gedeelte kan je dus dynamisch opbouwen...
PHP:
1
if(!empty($_POST["name"])) $qry .= "name LIKE '%$_POST["name"]'";

[ Voor 12% gewijzigd door Yo-han op 03-12-2004 15:22 . Reden: typo's ]


Acties:
  • 0 Henk 'm!

  • Elephtera
  • Registratie: Juni 2001
  • Laatst online: 17-09 22:05
dayoman, ik snap niet helemaal wat je bedoeld met het on-the-fligh.

kun je die if statement gebruiken tijdens het maken van de query?
hoe doe je dat met de 1e regel dan?

PHP:
1
2
3
4
5
<?
$qry = "SELECT * FROM tabel x WHERE"
if(!empty($_POST["name"])) $qry .= "name LIKE '%$_POST["name"]'"
if(!empty($_POST["age"])) $qry .= "age LIKE '%$_POST["age"]'";
?>


of is dit niet hoe je het bedoeld? opzich zou het op deze manier wel goed opgelost worden.


edit: ik denk dat ik het al snap, na nog een 2x door lezen, ik ga het proberen kijken of het lukt :) het is in iedergeval een goede zet in de goede richting, dank!

[ Voor 38% gewijzigd door Elephtera op 03-12-2004 18:11 ]

“An elephant is a mouse with an operating system”


Acties:
  • 0 Henk 'm!

  • Elephtera
  • Registratie: Juni 2001
  • Laatst online: 17-09 22:05
ik ben er achter hoe het 2e probleem moest. ik post het zodat andere het met de search kunnen vinden.

door in de query overal LIKE '%$variabel%' te gebruiken zal hij een leeg veld bij alle vlakken vinden, of de variabel leeg is of niet.

voorbeeld:

zoeken op leeftijd 18, provincie overijssel, gebruikersnaam blanco.

hij zal met bovenstaande alle gebruikers namen vinden, daaruit kiest hij dan alles met leeftijd 18, en dan daaruit alles met provincie overijssel.

“An elephant is a mouse with an operating system”

Pagina: 1