[php] alleen 1e gevonden deel replacen

Pagina: 1
Acties:

  • HenkS
  • Registratie: Mei 2000
  • Laatst online: 07:29

HenkS

Da_king alias HenkS

Topicstarter
lekkere vage topic, maar het probleem:

ik bouw dynamisch een query op die wordt gegenereerd door een zoekform!!!

alleen krijg ik nu iets van:

select blaat from zut AND test= 'test' AND x= '$x' AND

zoiets dus zonder where....

hoe doe ik het nu, dat als ik die string heb, dat ik de 1e 'AND' vervang door 'WHERE' en de rest als 'AND' laat staan? heb echt geen idee...

Verwijderd

PHP:
1
2
3
4
5
6
<?
$array = explode("and",$query);
$array[1] = $array[0] . " where " . $array[1];
unset($array[0]);
$query = implode(" and ", $array);
?>

FF vlug verzonnen, kan ook met een regex alleen da kan ik niet :( nog ff een tutorial erover lezen ofzo

  • GiLuX
  • Registratie: Juni 1999
  • Laatst online: 12-11-2025
Op maandag 21 januari 2002 20:02 schreef HenkS het volgende:
lekkere vage topic, maar het probleem:

ik bouw dynamisch een query op die wordt gegenereerd door een zoekform!!!

alleen krijg ik nu iets van:

select blaat from zut AND test= 'test' AND x= '$x' AND

zoiets dus zonder where....

hoe doe ik het nu, dat als ik die string heb, dat ik de 1e 'AND' vervang door 'WHERE' en de rest als 'AND' laat staan? heb echt geen idee...
dit gaat een fout melding geven:
select blaat from zut AND test= 'test' AND x= '$x' AND

je moet WHERE gebruiken en daarna pas AND.

maw,
je moet aangeven wattie met wat moet verglijken.

sql is leuk, want het is net of je als een persoon tegen praat,
dus begrijp jij de onderstaande zin?

haal bij de appie alles wat EN eetbaar is.

"I disagree with what you are saying, but I will defend to the death your right to say it." -- not clear who


  • elnino
  • Registratie: Augustus 2001
  • Laatst online: 03-09 05:13
Op maandag 21 januari 2002 20:15 schreef GiLuX het volgende:
dit gaat een fout melding geven:
select blaat from zut AND test= 'test' AND x= '$x' AND

je moet WHERE gebruiken en daarna pas AND.
Hij wil die AND juist vervangen door WHERE.

  • Nazgul
  • Registratie: Februari 2000
  • Laatst online: 11-10-2022

Nazgul

Digital Pizza Crew

Hoe wordt die query opgebouwd door dat zoekform?

Het lijkt mij makkelijker om daar wat aan te sleutelen, zodat die gelijk de WHERE op de juiste plek zet.

No trees were killed in the sending of this message. However a large number of electrons were terribly inconvenienced.


  • GiLuX
  • Registratie: Juni 1999
  • Laatst online: 12-11-2025
Op maandag 21 januari 2002 20:17 schreef elnino het volgende:

[..]

Hij wil die AND juist vervangen door WHERE.
nou, lekker vage topic dan ;)

"I disagree with what you are saying, but I will defend to the death your right to say it." -- not clear who


  • HenkS
  • Registratie: Mei 2000
  • Laatst online: 07:29

HenkS

Da_king alias HenkS

Topicstarter
opbouw:

als je iets kiest: dan wil je dat mee vergelijken in de query, maar je weet nooit wat als 1e komt, bv:

in zoekform: kleur, kies je die niet dan is gewicht bv het 1e

  • Nazgul
  • Registratie: Februari 2000
  • Laatst online: 11-10-2022

Nazgul

Digital Pizza Crew

Is het dan niet makkelijker om te beginnen met:
SELECT blaat FROM zut WHERE

En er dan voor elke term een x='$x' AND constructie aan vast te plakken en aan het eind de 4 laatste tekens eraf te knippen?

No trees were killed in the sending of this message. However a large number of electrons were terribly inconvenienced.


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 12-09 21:31

Janoz

Moderator Devschuur®

!litemod

Een kort door de bocht oplossing is om je where clausule te laten beginnen met "WHERE 1=1 " en vervolgens elke extra toevoeging de and ervoor zet.

Een nettere oplossing is om de where clause op te bouwen in bv de var $where="".

Bij elke toevoeging kun je dan iets doen als:
PHP:
1
2
3
4
5
6
<?
if ($where!="") {
  $where.=" AND ";
}
$where.="je extra optie";
?>

Hierdoor wordt alleen een AND toegevoegd als de where niet meer leeg is. Vervolgens maak je je query met
PHP:
1
2
3
<?
$query="SELECT bla,bla FROM foo WHERE".$where;
?>

Je kunt desnoods iets toevoegen om te aan het eind de where te controleren of ie niet leeg is. Als dat wel het geval is kun je hem helemaal weghalen..

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


  • GiLuX
  • Registratie: Juni 1999
  • Laatst online: 12-11-2025
zoiets gok ik dan:
$content=preg_replace("/(.*?)AND(.*)/is","\\1WHERE\\2",$content);

"I disagree with what you are saying, but I will defend to the death your right to say it." -- not clear who


  • Goodielover
  • Registratie: November 2001
  • Laatst online: 18-08 11:34

Goodielover

Only The Best is Good Enough.

Een dirty maar wel eenvoudige oplossing:
bouw eerst op:
select ...
from ...
where 1=1

van daaraf kan je gewoon doen wat je al deed.

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Op maandag 21 januari 2002 20:42 schreef Goodielover het volgende:
Een dirty maar wel eenvoudige oplossing:
Zo doet phpmyadmin het idd ook :)

  • HenkS
  • Registratie: Mei 2000
  • Laatst online: 07:29

HenkS

Da_king alias HenkS

Topicstarter
thanks, al had ik de oplossing gisteren op een feestje van een zat iemand al moeten horen......

(voel me zelf nu best kut)

thanks anyway

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 12-09 21:31

Janoz

Moderator Devschuur®

!litemod

Op maandag 21 januari 2002 21:09 schreef ACM het volgende:

[..]

Zo doet phpmyadmin het idd ook :)
en toch blijft het vies :)

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


  • Goodielover
  • Registratie: November 2001
  • Laatst online: 18-08 11:34

Goodielover

Only The Best is Good Enough.

Qua coding is het vies, maar een goede optimizer haalt 'm direct er uit.

Verwijderd

Op dinsdag 22 januari 2002 09:48 schreef Janoz het volgende:
en toch blijft het vies :)
Niet moeilijk doen, het werkt >:)
Pagina: 1