Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

Zoeken in Gastenboek (mysql)

Pagina: 1
Acties:

  • Maverick2001
  • Registratie: Februari 2001
  • Laatst online: 28-11 14:21

Maverick2001

Never look back

Topicstarter
In het gastenboek moet op bepaalde namen in de tekst worden gezocht. Als iemand bijvoorbeeld schrijft en de naam 'Madonna' komt in de geschreven tekst voor, dan moet dat record tevoorschijn komen.

De namen waarop gezocht kan worden zijn met een pull-down formulier al gedefineerd.

Nu gebruik ik de functie LIKE

PHP:
1
$xx2="SELECT * FROM guestbook WHERE tekst LIKE '%$HTTP_POST_VARS[zoeken]%'";


(zoeken is de array met daarin de namen waarop gezocht kan worden).

Ik krijg nu echter wel heel veel resultaten waar het woord madonna niet in voor komt.

Is het gebruik van LIKE niet goed ? Of kan dat helemaal niet in een tekst veld waar ook hele andere dingen instaan?

[ Voor 5% gewijzigd door Maverick2001 op 11-09-2007 14:19 ]

Pura Vida


  • --MeAngry--
  • Registratie: September 2002
  • Laatst online: 21:13

--MeAngry--

aka Qonstrukt

Heb je uberhaupt al eens gekeken wat er precies in $xx2 staat? Misschien klopt de query wel helemaal niet. Sowieso kan ik nu lekker willekeurige SQL injecteren in je query en maak je gebruik van oude variabelen (HTTP_POST_VARS) welke al jaren niet meer ondersteund worden.

Tesla Model Y RWD (2024)


  • Padschild
  • Registratie: September 2004
  • Laatst online: 28-11-2020
Maverick2001 schreef op dinsdag 11 september 2007 @ 14:18:
In het gastenboek moet op bepaalde namen in de tekst worden gezocht. Als iemand bijvoorbeeld schrijft en de naam 'Madonna' komt in de geschreven tekst voor, dan moet dat record tevoorschijn komen.

De namen waarop gezocht kan worden zijn met een pull-down formulier al gedefineerd.

Nu gebruik ik de functie LIKE

PHP:
1
$xx2="SELECT * FROM guestbook WHERE tekst LIKE '%$HTTP_POST_VARS[zoeken]%'";


(zoeken is de array met daarin de namen waarop gezocht kan worden).

Ik krijg nu echter wel heel veel resultaten waar het woord madonna niet in voor komt.

Is het gebruik van LIKE niet goed ? Of kan dat helemaal niet in een tekst veld waar ook hele andere dingen instaan?
Dit gaat sowieso niet werken met meerdere zoektermen, tenzij die zoektermen allemaal netjes bij elkaar staan in het te zoeken record.

  • Kalentum
  • Registratie: Juni 2004
  • Laatst online: 07:19
- Wat is de inhoudt van $xx2?
- Gebruik je $_GET?
- Heeft je HTML Form wel een select of input met de naam 'zoeken'?
- Je schrijft dat $HTTP_POST_VARS['zoeken'] een array is. Schrijffoutje of is dat echt zo?

  • Maverick2001
  • Registratie: Februari 2001
  • Laatst online: 28-11 14:21

Maverick2001

Never look back

Topicstarter
Het resultaat van de query =
PHP:
1
 $res = mysql_query($xx2);


Misschien moet ik het nog even verduidelijken!

Ze kunnen kiezen waarop ze willen zoeken bijv. Madonna, Michael Jackson, Prince

Het gaat maar om 1 zoekterm per zoekopdracht. Het is echter wel zo dat het zoeken binnen het tekst veld gaat in het gasten boek.

Iemand heeft bijv. geschreven: "ik vind de nieuwe CD van Michael jackson zo goed", dan moet dat record naar voren komen als ze zoeken op Michael Jackson.

Met de zoek opdracht die ik nu heb komen er wel records naar voren die overeenkomen met de zoekterm maar ook record waarin Michael Jackson niet voorkomt.

[ Voor 7% gewijzigd door Maverick2001 op 11-09-2007 14:39 ]

Pura Vida


  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Sowieso zou ik eerst eens wat gaan lezen over SQL Injection, waar deze code vatbaar voor is.

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


  • Maverick2001
  • Registratie: Februari 2001
  • Laatst online: 28-11 14:21

Maverick2001

Never look back

Topicstarter
CodeCaster schreef op dinsdag 11 september 2007 @ 14:43:
Sowieso zou ik eerst eens wat gaan lezen over SQL Injection, waar deze code vatbaar voor is.
Dat pas ik nu ook aan! Bedankt voor de tip maar staat natuurlijk los van het probleem.

Pura Vida


  • OkkE
  • Registratie: Oktober 2000
  • Laatst online: 10-11 15:46

OkkE

CSS influencer :+

Je kunt wellicht kijken naar de Fulltext search optie van MySQL. Daarmee kun je ook schrijffouten van gebruikers herkennen.

De overige opmerkingen hier zijn vooral; wat is de exacte inhoud van je $_POST var? Staan er overbodige spaties of andere tekens? Heeft deze wel de waarde die je verwacht?

Nog een opmerking is; controleer de waardes voor je ze naar je database stuurt! Persoonlijk zou ik het denk ik zo maken, dat je $_POST (waar ik overgens een $_GET van zou maken) een getal bevat, welke je bij het opbouwen van de query omzet naar de juiste naam. Zo voorkom je SQL Injection.

“The best way to get the right answer on the Internet is not to ask a question, it's to post the wrong answer.”
QA Engineer walks into a bar. Orders a beer. Orders 0 beers. Orders 999999999 beers. Orders a lizard. Orders -1 beers.


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 30-11 11:35

Janoz

Moderator Devschuur®

!litemod

Maverick2001 schreef op dinsdag 11 september 2007 @ 14:37:
Het resultaat van de query =
PHP:
1
 $res = mysql_query($xx2);

...
Wat mensen bedoelden was eerder wat het resultaat zou zijn van
PHP:
1
echo $xx2;

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • marko77
  • Registratie: Februari 2002
  • Laatst online: 06-05 19:41
De eerste stap lijkt mij idd ook bekijken of de query wel correct is, dat doe je met bovenstaande echo.
Als je deze query vervolgens draait in phpmyadmin b.v. kun je zien wat er precies uitkomt.

Mijn rig


  • zwippie
  • Registratie: Mei 2003
  • Niet online

zwippie

Electrons at work

Net als OkkE zou ik je willen aanraden om eens naar de fulltext search van mysql te kijken.

How much can you compute with the "ultimate laptop" with 1 kg of mass and 1 liter of volume? Answer: not more than 10^51 operations per second on not more than 10^32 bits.


  • Maverick2001
  • Registratie: Februari 2001
  • Laatst online: 28-11 14:21

Maverick2001

Never look back

Topicstarter
zwippie schreef op dinsdag 11 september 2007 @ 14:56:
Net als OkkE zou ik je willen aanraden om eens naar de fulltext search van mysql te kijken.
Fulltext search is inderdaad de beste oplossing! Thnx

Pura Vida

Pagina: 1