login  Naam:   Wachtwoord: 
Registreer je!
 Forum

dynamische query (Opgelost)

Offline prienstra - 08/08/2008 14:58
Avatar van prienstraMySQL interesse Beste mensen,

Kan iemand mij op weg helpen voor het maken van een dynamische query (link naar een voorbeeld).
Het gaat om een aantal WHERE, die niet elke keer allemaal gebruikt worden.

Stukje code met 2 x WHERE
  1. $query = "SELECT * FROM part WHERE landplaats = '" . mysql_real_escape_string( $_get['landplaats'] ) . "' AND provincie = '" . mysql_real_escape_string( $_get['regio'] ) . "'";
  2.  
  3. $result = mysql_query( $query );
  4. if (!$result){
  5. die ("Could not query the database: <br />". mysql_error());
  6. }

19 antwoorden

Gesponsorde links
Offline jvs - 08/08/2008 15:04
Avatar van jvs HTML beginner Je wil dus een functie opbouwen waarin je dan een aantal argumenten meegeeft en aan de hand van het aantal argumenten dat je meegeeft wil je WHERE clausules in je query laten verschijnen?
Offline prienstra - 08/08/2008 15:07 (laatste wijziging 08/08/2008 15:07)
Avatar van prienstra MySQL interesse ja ik denk het wel.
Als ik nu zoek op:

http://www.***.nl/test1.php?landplaats=goes&provincie=zeeland

Geeft ie alles in goes weer.

Maar nu wordt er enkel gezocht op:
http://www.***.nl/test1.php?landplaats=&provincie=zeeland

Dan moet ie alles in zeeland weergeven.
Offline vinTage - 08/08/2008 15:08
Avatar van vinTage Nieuw lid omdat landplaats leeg is ?
Offline prienstra - 08/08/2008 15:10
Avatar van prienstra MySQL interesse ja idd
Offline vinTage - 08/08/2008 15:19
Avatar van vinTage Nieuw lid Dan moet je dus gaan kijken met wat ifjes he..
  1. if(isset($_GET['provincie']) && !isset($_GET['landplaats']) )
  2. {
  3. $qry = "SELECT * FROM tabel WHERE provincie = '".mysql_real_escape_string($_GET['provincie'])."'";
  4. }
  5. elseif(isset($_GET['landplaats']) && !isset($_GET['provincie']))
  6. {
  7. $qry = "SELECT * FROM tabel WHERE landplaats = '".mysql_real_escape_string($_GET['landplaats'])."'";
  8. }
  9. elseif(isset($_GET['landplaats']) && isset($_GET['provincie']))
  10. {
  11. $qry = "SELECT * FROM tabel WHERE landplaats = '".mysql_real_escape_string($_GET['landplaats'])."' AND provincie = '".mysql_real_escape_string($_GET['provincie'])."'";
  12. }
  13. else
  14. {
  15. echo 'niets geselcteerd';
  16. }
Offline Martijn - 08/08/2008 15:35 (laatste wijziging 08/08/2008 15:55)
Avatar van Martijn Crew PHP ik zou doen

  1. $tekst="";
  2. if(!isset($_GET['provincie']) && !isset($_GET['landplaats'])){
  3. echo"Geen info";
  4. }
  5. else{
  6. if(isset($_GET['provincie'])){$tekst.="provincie=".$_GET['provincie'];}
  7. if(isset($_GET['landplaats'])){
  8. if($tekst!=""){$tekst.=" AND ";}
  9. $tekst.="plaats=".$_GET['landplaats'];
  10. }
  11. mysql_query("SELECT info FROM tabelnaam WHERE ".$tekst) or die(mysql_error());
  12. }


wat minder fout gevoelig
Offline vinTage - 08/08/2008 15:38 (laatste wijziging 08/08/2008 15:38)
Avatar van vinTage Nieuw lid Nou, dat is duidelijk 

edit, wat is daar minder fout gevoelig aan ??
Offline Martijn - 08/08/2008 15:45 (laatste wijziging 08/08/2008 15:45)
Avatar van Martijn Crew PHP jij heb 3 queries, ik heb dr 1 jij hebt een heel hoop else ifjes wat verwarring kan zaaien, en (ik vind dat) die van mijn duidelijker is

edit: maar dat kan een voorkeur zijn
Offline prienstra - 08/08/2008 15:48
Avatar van prienstra MySQL interesse
DeviourSoul schreef:
ik zou doen

[..code..]

wat minder fout gevoelig


Krijg een error:

Parse error: syntax error, unexpected '{' in .....
Offline vinTage - 08/08/2008 15:49
Avatar van vinTage Nieuw lid Ik heb net zoals jij 3 ifjes..
Ik heb maar één query (die uitgevoerd wordt)
En mijn query is gewoon in een oogopslag leesbaar zonder dat je in je kop allerlei vars achter elkaar moet gaan zetten..

magoed, maakt mij niks uit



Offline Martijn - 08/08/2008 15:54
Avatar van Martijn Crew PHP zoals ik zei, dat kan een voorkeur zijn 

en ik heb een error verbeterd. Alle fouten die erin zitten zijn basic foutjes, die moet je zelf kunnen oplossen
Offline prienstra - 08/08/2008 16:12
Avatar van prienstra MySQL interesse Ik heb nu:

  1. <?php $connection = mysql_connect("localhost", "userdb", "passworddb");
  2. if (!$connection){
  3. die("Could not connect to the database: <br/>" . mysql_error());
  4. }
  5.  
  6.  
  7.  
  8. $db_select = mysql_select_db("boekvoor");
  9. if (!$db_select) {
  10.  
  11. die ("could not select the database: <br />". mysql_error());
  12. }
  13.  
  14. if(isset($_GET['provincie']) && !isset($_GET['landplaats']) )
  15. {
  16. $qry = "SELECT * FROM part WHERE provincie = '".mysql_real_escape_string($_GET['provincie'])."'";
  17. }
  18. elseif(isset($_GET['landplaats']) && !isset($_GET['provincie']))
  19. {
  20. $qry = "SELECT * FROM part WHERE landplaats = '".mysql_real_escape_string($_GET['landplaats'])."'";
  21. }
  22. elseif(isset($_GET['landplaats']) && isset($_GET['provincie']))
  23. {
  24. $qry = "SELECT * FROM part WHERE landplaats = '".mysql_real_escape_string($_GET['landplaats'])."' AND provincie = '".mysql_real_escape_string($_GET['provincie'])."'";
  25. }
  26. else
  27. {
  28. echo 'niets geselcteerd';
  29. }
  30.  
  31. $result = mysql_query( $qry );
  32. if (!$result){
  33. die ("Could not query the database: <br />". mysql_error());
  34. }
  35. ?>


Maar werkt enkel als ik provincie en landplaats ingevuld hebt, niet enkel bij landplaats of provincie.
Doe ik iets fout?
Offline vinTage - 08/08/2008 16:22 (laatste wijziging 08/08/2008 16:29)
Avatar van vinTage Nieuw lid Ik heb wat dingen uitgecomment, omdat ik die database niet heb natuurlijk, maar deze code werkt gewoon goed bij mij..

  1. <?
  2. $qry = "";
  3. if(isset($_GET['provincie']) && !isset($_GET['landplaats']) )
  4. {
  5. $qry = "SELECT * FROM tabel WHERE provincie = '".addslashes($_GET['provincie'])."'";
  6. }
  7. elseif(isset($_GET['landplaats']) && !isset($_GET['provincie']))
  8. {
  9. $qry = "SELECT * FROM tabel WHERE landplaats = '".addslashes($_GET['landplaats'])."'";
  10. }
  11. elseif(isset($_GET['landplaats']) && isset($_GET['provincie']))
  12. {
  13. $qry = "SELECT * FROM tabel WHERE landplaats = '".addslashes($_GET['landplaats'])."' AND provincie = '".addslashes($_GET['provincie'])."'";
  14. }
  15.  
  16.  
  17. if($qry != "")
  18. {
  19. echo $qry;
  20. /*
  21.   mysql_query($qry);
  22.   while($res = mysql_fetch_array($qry)
  23.   {
  24.   echo $res['inhoud'].'<hr />';
  25.   }
  26.   */
  27. }
  28. else
  29. {
  30. echo 'Er valt niets te selecteren zonder variables';
  31. }
  32. ?>
  33.  
  34. <p>
  35. test linkje alleen een provincie <a href="<?=$_SERVER['PHP_SELF']?>?provincie=zeeland">zeeland</a><br />
  36. test linkje alleen een landplaats <a href="<?=$_SERVER['PHP_SELF']?>?landplaats=goes">goes</a><br />
  37. test linkje provincie en landplaats <a href="<?=$_SERVER['PHP_SELF']?>?provincie=zeeland&landplaats=goes">zeeland en goes</a>
  38. </p>


edit
code beetje aangepast
copy paste code in een nieuw php bestandje en surf erheen en testen maar
Offline JBke - 08/08/2008 16:22 (laatste wijziging 08/08/2008 16:24)
Avatar van JBke PHP gevorderde waarom werk je niet eerst met een $Wherestring??

Ik zou in jouw geval maar 1 query gebruiken die je op voorhand samensteld in een querystring.

Ik maak steeds verschillende delen bvb $SelectString_string = 'je SELECT gedeelte'
$FromString_string = 'je FROM gedeelte' en tenslotte
$WhereString_string = 'je WHERE gedeelte' en eventueel
$OrderString_string = 'je ORDER BY gedeelte';

voor uw script moet je dan enkel een switch .;. case inbouwen en de $WhereString_string aanpassen.

daarna rijg je de query aaneen in je $QueryString_string.

klein voorbeeldje om je een idee te geven:
  1. <?php
  2. /**
  3. * Returns a list of user which have the request function
  4. *
  5. * @param string $Ffunctions_mixed
  6. * @return array
  7. */
  8. public function getUserByFunction($Ffunctions_mixed = '') {
  9. $LqueryWhere_string = '1=1';
  10. if (is_array($Ffunctions_mixed)) {
  11. foreach($Ffunctions_mixed as $k => $v) {
  12. $LqueryWhere_string .= ' AND ' . $v . " = '1'";
  13. }
  14. } else {
  15. $LqueryWhere_string .= ' AND ' . $Ffunctions_mixed . " = '1'";
  16. }
  17.  
  18. $Ldb_obj = Zend_Registry::get('db');
  19.  
  20. $Lsql_string = <<<SQL
  21. SELECT u.* FROM tbluser u, tbluser_data ud
  22. WHERE {$LqueryWhere_string}
  23. AND u.id = ud.user_id
  24. SQL;
  25.  
  26. $Lresult_array = $Ldb_obj->query($Lsql_string)->fetchAll();
  27.  
  28. return $Lresult_array;
  29. }
  30. ?>


Success
Offline prienstra - 08/08/2008 17:21
Avatar van prienstra MySQL interesse ik denk dat ik al weet waar het aan ligt.
Mijn zoekformulier (html) geeft alle variabele mee.
Dus ik blijf dit houden:
http://www.***.nl/test1.php?landplaats=&provincie=zeeland
Offline vinTage - 08/08/2008 17:30
Avatar van vinTage Nieuw lid en dus ?
Offline prienstra - 08/08/2008 17:32
Avatar van prienstra MySQL interesse zijn daar oplossingen voor?
Offline vinTage - 08/08/2008 17:32 (laatste wijziging 08/08/2008 17:33)
Avatar van vinTage Nieuw lid Maar ik snap je vraag niet

edit:
ah, toon je formulier code eens!
Offline prienstra - 08/08/2008 17:54 (laatste wijziging 10/08/2008 12:44)
Avatar van prienstra MySQL interesse Heeft er iemand een oplossing voor het probleem met het zoekformulier dat ook lege opties meezend?

  1. <form method="get" action="test.php" name="test">
  2. <table border=0 cellpadding=4 cellspacing=1>
  3. <tr><br><td>Plaats</td>
  4. <tr><td>
  5.  
  6. <select name="landplaats">
  7. <option>middelburg</option>
  8. <option>goes</option>
  9. </select>
  10.  
  11.  
  12. </td>
  13. <tr><br><td>Provincie</td>
  14. <tr><td>
  15.  
  16. <select name="provincie">
  17. <option>NL - Zeeland</option>
  18. <option>NL - Noord-Holland</option>
  19. </select>
  20. </td>
  21.  
  22. </td></tr>
  23. <tr><td colspan="3"><br><input type="submit" value="Verder &raquo;"></td></tr>
  24.  
  25.  
  26. </html>
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.307s