abonnement Unibet Coolblue Bitvavo
pi_32196154
Correct, user input kun je niet vertrouwen. Overigens zijn client-side beperkingen altijd te omzeilen, dus daarop kun je nooit vertrouwen.
pi_32199200
Zo ken ik een website met miljoenen bezoekers waarbij je via sql-injection willekeurige query's uit kunt voeren
Wil iedereen die in telekinese gelooft nu mijn hand op steken?
| Foto's van toen en nu | Icons | Whatpulse keyboard | .NET developer? |
pi_32200709
ja dat had je reeds medegedeeld echter heb ik um nog steeds niet gehacked
The people who lost my respect will never get a capital letter for their name again.
Like trump...
pi_32200731
zouden ze geld neer leggen? dan delen we de winst
The people who lost my respect will never get a capital letter for their name again.
Like trump...
pi_32206390
Ik ben nu al meerdere keren met mijn zoekfunctie aan de gang gegaan maar het lukt me maar niet om hem zo te laten werken als ik wil. Echter, het lijkt me dat de oplossing redelijk makkelijk moet zijn. Hopelijk kunnen jullie me helpen.

Ik heb een database met een table genaamd 'lyriczz' waarin oa de fields 'artist' 'feat' en 'title' staan.

Als mensen nu een search doen moet de functie het volgende doen:

--> Zoek elke record waar elk woord in ten minste 1 van die drie fields voorkomen

Ik had het dus zo gedaan:
<?
$sql = 'SELECT song_id, artist, feat, title FROM `lyriczz` WHERE ';
$search_words = explode(' ', $searchstring, 5);
$first = true;
foreach ($search_words AS $tw) {
if ($first == false)
$sql .= 'AND ';
$first = false;
$sql .= "(`artist` LIKE '%$tw%') ";
$sql .= 'OR';
$sql .= "(`feat` LIKE '%$tw%') ";
$sql .= 'OR';
$sql .= "(`title` LIKE '%$tw%') ";
} ?>

Maar dat zoekt elke record waar 1 van de woorden in 1 van de fields voorkomen. Daar heb je dus niets aan, want hoe meer woorden je invult, hoe meer resultaten er uitkomen.

Dan dus mijn vraag: hoe zou ik dit moeten doen?
pi_32206989
Ik snap niet wat je bedoelt, maar de code die je hierboven neerzet is niet helemaal goed denk ik.
Werkt dit beter? :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?
   $sql = 'SELECT song_id, artist, feat, title FROM `lyriczz` WHERE ';
   $search_words = explode(' ', $searchstring, 5);
   $first = true;
   foreach ($search_words AS $tw) {
      if ($first == false){
         $sql .= 'AND ';
         $first = false;
      }
      $sql .= "(`artist` LIKE '%$tw%') ";
      $sql .= 'OR';
      $sql .= "(`feat` LIKE '%$tw%') ";
      $sql .= 'OR';
      $sql .= "(`title` LIKE '%$tw%') ";
   } 
?>

Zoja, laat je code inspringen, dat is veeeel overzichtelijker, en print je query gewoon even op het scherm als hij niet teruggeeft wat je wil, want misschien zit er wel iets fout in je query, en dat kun je dan makkelijker zien.

En als je je code tussen codetags plaatst is het ook wat overzichtelijker voor ons om te lezen Dus zo: [code ]Hier je code[/ code] (En dan zonder spaties)
pi_32208261
Ok, mijn vraag is als volgt. Deze code werkt wel correct als in: hij brengt wel wat je eigenlijk vraagt aan de database. Maar wat ik wil is het volgend:

Zoek elke record waar elk woord in ten minste 1 van die drie fields voorkomen. Terwijl ie nu alle records op zoekt waar een van de gezochte woorden in een of andere field voorkomt. Hij moet dus preciezer worden. Het is een beetje moeilijk uit te leggen. Ik moet denk ik namelijk helemaal op nieuw beginnen en dit scriptje weggooien.

Als je bijvoorbeeld zoekt op "michael jackson thriller" moet ie het volgende doen:
1
2
3
4
5
if (michael is found in field 'artist' OR field 'title' OR field 'feat'
AND jackson is found in field 'artist' OR field 'title' OR field 'feat'
AND thriller is found in field 'artist' OR field 'title' OR field 'feat') {
echo info
}


Dit is natuurlijk helemaal geen code, maar hopelijk maakt het een beetje duidelijk wat ik wil Ik hoop dat je het zo een beetje begrijpt.. zou je er iets op weten?
pi_32209007
Zo dan?
Nu geeft hij alle rijen terug waar in 1 van de kolommen een van de search_words staat.
Dat is niet helemaal wat je hierboven hebt gezegd, maar ik denk wel dat je dit bedoelt. in je eerste post.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
   $sql = 'SELECT song_id, artist, feat, title FROM `lyriczz` WHERE ';
   $search_words = explode(' ', $searchstring, 5);
   $first = true;
   foreach ($search_words AS $tw) {
      if (!$first){
         $sql .= 'OR ';
         $first = false;
      }
      $sql .= "(`artist` LIKE '%$tw%') ";
      $sql .= 'OR';
      $sql .= "(`feat` LIKE '%$tw%') ";
      $sql .= 'OR';
      $sql .= "(`title` LIKE '%$tw%') ";
   }

Als ik je 2e post interpreteer krijg je de rij terug waarvan alle 3 de kolommen iets bevatten dat in de searchstring staat.

Ik zou trouwens een zoekpagina maken waarbij men aan kan geven of ze op artist, feat, of op title kunnen zoeken, want als iemand nou een searchstring in typt die uit heel veel woorden bestaat dan zal je een query krijgen die een hoop tijd in beslag gaat nemen (als je database een beetje groot is)
pi_32209276
Ehm ok bedankt. Maar het is nog steeds niet wat ik bedoel :-(

Wat ik zoek is iets waarbij alle drie de woorden voorkomen. In welk field of hoevaak maakt echter niet uit. Dus als maar 1 of 2 van de woorden worden gevonden dan moet ie het niet als match vinden, slechts als alle drie de woorden worden gevonden. Zo kan de bezoeker gewoon een woord van de artiest en ook een woord van de titel gebruiken om te zoeken.

Zou je weten hoe dit moet? (Sorry, het klinkt misschien een beetje als gezeur, maar zo bedoel ik het niet, ik weet alleen zelf niet zo goed meer wat ik hiermee moet doen)
pi_32209509
ok, dus toch zoals ik dacht dat je niet bedoelde
In dat geval is je eerst geval bijna goed, behalve dat je wat haakjes moet gebruiken, daar wordt het niet alleen duidelijker van voor jezelf, maar dan krijg je ook de goede resultaten
1
2
3
4
5
6
7
8
9
10
11
12
13
14
   $sql = 'SELECT song_id, artist, feat, title FROM `lyriczz` WHERE ';
   $search_words = explode(' ', $searchstring, 5);
   $first = true;
   foreach ($search_words AS $tw) {
      if (!$first){
         $sql .= 'AND ';
         $first = false;
      }
      $sql .= "((`artist` LIKE '%$tw%') ";
      $sql .= 'OR';
      $sql .= "(`feat` LIKE '%$tw%') ";
      $sql .= 'OR';
      $sql .= "(`title` LIKE '%$tw%')) ";
   }


Denk ik...Ik durf niet meer zeker te zeggen dat het nou wel goed is
pi_32209579
Alleen bovenstaande zal dus 0 resultaten geven als 1 van de zoekwoorden niet in de database voorkomt. Dus stel dat iemand een lange titel invoert, en bij 1 van de woorden van de titel een typefout maakt, dan geeft je query 0 resultaten maargoed, je kunt niet alles hebben...
pi_32220673
Dit werkt nu zo'n beetje als in dat ie wel op 1 woord kan zoeken maar dat je een error krijgt als je op meer dan 1 woord zoekt. Als ik bijvoorbeeld op 'michael jackson' zoek krijg ik de volgende error:

Invalid query: You have an error in your SQL syntax near '((`artist` LIKE '%jackson%') OR(`feat` LIKE '%jackson%') OR(`title` LIKE '%jacks' at line 1

Zit te zoeken maar begrijp niet wat de fout is..
pi_32221284
En als je vlak voor de query die sql-string gaat printen, wat krijg je dan?
  zondag 13 november 2005 @ 06:21:10 #289
60702 kramer65
vs. Kramer65
pi_32224885
Beetje laat, maar dan krijg ik de volgende uitkomst:

SELECT song_id, artist, feat, title FROM `lyriczz` WHERE ((`artist` LIKE '%michael%') OR(`feat` LIKE '%michael%') OR(`title` LIKE '%michael%')) ((`artist` LIKE '%jackson%') OR(`feat` LIKE '%jackson%') OR(`title` LIKE '%jackson%')) ORDER BY `artist` ASC LIMIT 0, 1000

Invalid query: You have an error in your SQL syntax near '((`artist` LIKE '%jackson%') OR(`feat` LIKE '%jackson%') OR(`title` LIKE '%jacks' at line 1

Nog ideeen?
pi_32225116
Iemand suggesties waarom IE5.5 session cookies niet opslaat?

googlen en geklooi met de timestamp hebben tot nu toe geen effect gehad op het gedrag
pi_32225235
quote:
Op zondag 13 november 2005 06:21 schreef kramer65 het volgende:
Beetje laat, maar dan krijg ik de volgende uitkomst:

SELECT song_id, artist, feat, title FROM `lyriczz` WHERE ((`artist` LIKE '%michael%') OR(`feat` LIKE '%michael%') OR(`title` LIKE '%michael%')) ((`artist` LIKE '%jackson%') OR(`feat` LIKE '%jackson%') OR(`title` LIKE '%jackson%')) ORDER BY `artist` ASC LIMIT 0, 1000

Invalid query: You have an error in your SQL syntax near '((`artist` LIKE '%jackson%') OR(`feat` LIKE '%jackson%') OR(`title` LIKE '%jacks' at line 1

Nog ideeen?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
   $sql = 'SELECT song_id, artist, feat, title FROM `lyriczz` WHERE ';
   $search_words = explode(' ', $searchstring, 5);
   $first = true;
   foreach ($search_words AS $tw) {
      if (!$first){
         $sql .= 'AND ';
      }
      $first = false;
      $sql .= "((`artist` LIKE '%$tw%') ";
      $sql .= 'OR';
      $sql .= "(`feat` LIKE '%$tw%') ";
      $sql .= 'OR';
      $sql .= "(`title` LIKE '%$tw%')) ";
   }

Zo zou het moeten werken (voor de zoveelste keer )
pi_32228746
quote:
Op zondag 13 november 2005 08:39 schreef Ro�a� het volgende:
Iemand suggesties waarom IE5.5 session cookies niet opslaat?

googlen en geklooi met de timestamp hebben tot nu toe geen effect gehad op het gedrag
Laat de headers eens zien die de webserver naar de browser stuurt en vice versa, na het setten van de cookie?
pi_32229564
1
2
3
4
5
6
7
8
9
10
Date: Sun, 13 Nov 2005 12:31:10 GMT
Server: xxxxxx
X-Powered-By: xxxxxx
Set-Cookie: PHPSESSID=17c3828ca1885212dc6c3e89ff843437; domain=http://www.xxxxxx.nl/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Length: 1996
Connection: close
Content-Type: text/html
pi_32230266
Stom vraagje; hoe achterhaal je die cookie gegevens/
The people who lost my respect will never get a capital letter for their name again.
Like trump...
pi_32230553
quote:
Op zondag 13 november 2005 14:00 schreef Chandler het volgende:
Stom vraagje; hoe achterhaal je die cookie gegevens/
Gegevens staan opgeslagen in $_COOKIE["cookienaam"]
pi_32230617
quote:
Op zondag 13 november 2005 13:31 schreef Ro�a� het volgende:

[ code verwijderd ]
webdeveloper toolbar, show response headers.
  zondag 13 november 2005 @ 14:29:24 #297
60702 kramer65
vs. Kramer65
pi_32231081
@ ikke_ook

Super bedankt!! Hij doet het als een toeter!

Je kan je niet voorstellen hoe lang ik hieraan heb gezeten
pi_32231410
quote:
Op zondag 13 november 2005 13:31 schreef Ro�a� het volgende:

[ code verwijderd ]
Ik krijg toch de indruk dat die session-id cookie niet wordt omdat er geen expire-tijd opzit. De sessie zou dan eindigen op het moment dat je de browser sluit.
  zondag 13 november 2005 @ 22:32:21 #299
61660 Lariekoek
Zo, jij bent echt grappig.
pi_32244826
Iemand enig idee waarom ik bij de volgende code geen tekst terug krijg?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
php
$tekstvak
= "arr[]";
echo
"<form action='$PHP_SELF' METHOD='POST'>";
for (
$a=0; $a&lt; 3; $a++)
{
  echo
"<input type=text name='tekstvak' size=20><br>";
}
echo
"<input type=submit name='submit' value='Doe'>";
echo
"</form>";

for (
$a=0; $a&lt; 3; $a++)
{
echo
"$arr[$a]";
}
?>
la·rie·koek (de ~ (m.)) 1 onzin
pi_32245307
Dat "$a<"

Klopt dat wel, wat is dat voor vage constructie ?

Moet dat niet gewoon zijn:

for ($a = 0; $a < 4; $a++)

?
abonnement Unibet Coolblue Bitvavo
Forum Opties
Forumhop:
Hop naar:
(afkorting, bv 'KLB')