login  Naam:   Wachtwoord: 
Registreer je!
 Forum

select met variabel aantal variabelen

Offline markla - 17/05/2009 23:17
Avatar van marklaPHP interesse Een script dat ik aan het maken ben wil ik zo universeel mogelijk houden. Dat script wil ik op 3 manier kunnen aanroepen

1) zonder parameter /inc_games.php (geef me alle wedstrijden)
2) met één parammeter /inc_games.php?id=104 (geef me alle wedstrijden uit het seizoen 104)
3) met twee parameters /inc_games.php?id=104&pid=461 (geef me alle wedstrijden uit het seizoen 104 van speler 461)

Het werkt als ik beide pararmeters mee geef werkt het maar als id de pid weglaat komt er niks. Ik begrijp waarom! maar hoe los ik mijn porbleem op?

IN het script zitten twee if then else constructies"
1) (isset($_REQUEST['id'])) die de $seasonid vult
2) (isset($_REQUEST['pid'])) die de $playerid vult

In de if structuur van $_REQUEST['id']) vang ik af dat als geen id aanwezig is $seasonid altijd een vaste waarde krijgt.

Maar als de pid leeg is wil eigenlijk dat er in de select niet naar de $playerid gekeken wordt of eigenlijk select $playerid >0.

Hoe moet ik zoiets aanpakken?

in de query zit dit:
  1. WHERE g.Season_ID = '".$seasonid."'
  2. AND a.Player_ID= '".$playerid."'

5 antwoorden

Gesponsorde links
Offline anton - 18/05/2009 00:15
Avatar van anton Lid
  1. if(isset($_GET['id']) && !isset($_GET['pid'])){
  2. $seasonid = $_GET['id'];
  3. $s = "SELECT * FROM wedstrijden WHERE g.Seadon_ID = '".$seasonid."'";
  4. $q = mysql_query($s);
  5. while($rij = mysql_fetch_assoc($q)){
  6. 1 keer zet je hier in een tabel of div welke gegevens je wilt weergeven , en de assoc doet dat voor al de rest ook!
  7. }
  8. }
  9. elseif(isset($_GET['id']) && isset($_GET['pid'])){
  10. $seasonid = $_GET['id'];
  11. $playerid = $_GET['pid'];
  12. $s = "SELECT * FROM wedstrijden WHERE g.Seadon_ID = '".$seasonid."' AND a.Player_ID = '".$playerid."'";
  13. $q = mysql_query($s);
  14. while($rij = mysql_fetch_assoc($q)){
  15. idem als bij de vorige...
  16. }
  17. }
  18. else{
  19. gewoon je pagina, met alle wedstrijden dus...
  20. }

zo zou het volgens mij toch moeten lukken...;)

MVG
Anton Vandeghinste
Offline ArieMedia - 18/05/2009 09:46 (laatste wijziging 18/05/2009 12:03)
Avatar van ArieMedia Gouden medaille

PHP ver gevorderde
Je kan ook een functie maken (of beter nog een class).
  1. function GetGamePage($id=0, $pid=0) {
  2. if(is_numeric($id) && is_numeric($pid)) {
  3. $ret = '';
  4. if($id > 0 && $pid <= 0) {
  5. $sql = 'SELECT * FROM wedstrijden WHERE g.Seadon_ID = '.$id;
  6. $res = mysql_query($sql);
  7. while($rij = mysql_fetch_assoc($res)) {
  8. $ret .= 'RESULTAAT';
  9. }
  10. elseif($id > 0 && $pid > 0) {
  11. $sql = 'SELECT * FROM wedstrijden WHERE g.Seadon_ID = '.$id.' AND a.Player_ID = '.$pid;
  12. $res = mysql_query($sql);
  13. while($rij = mysql_fetch_assoc($res)) {
  14. $ret .= 'RESULTAAT';
  15. }
  16. }
  17. else { } // Laat alles zien
  18. } else die('Niet numeriek');
  19. return $ret;
  20. }


Aanroepen
  1. echo GetGamePage(2, 9);


Waarom functies? Omdat je het dan vaker toe kan passen =)
Offline markla - 18/05/2009 10:48
Avatar van markla PHP interesse bedankt voor de reacties. Beide oplossingen had ik ook al in gedachten.

Mij query is nog al groot dus ik dacht eigenlijk het gebruik van twee verschillende SELECT's te kunnen omzeilen door een iets IN de query te doen met :
  1. a.Player_ID= '".$playerid."' OR NOT empty a.Player_ID= '".$playerid."'


Maar dat is te simpel gedacht? 
Offline ArieMedia - 18/05/2009 10:54
Avatar van ArieMedia Gouden medaille

PHP ver gevorderde
markla schreef:
bedankt voor de reacties. Beide oplossingen had ik ook al in gedachten.

Mij query is nog al groot dus ik dacht eigenlijk het gebruik van twee verschillende SELECT's te kunnen omzeilen door een iets IN de query te doen met :
[..code..]

Maar dat is te simpel gedacht? 
Een grote query maakt niet uit.. Het is maar net hoe je het neerzet.. ik zie heel veel mensen alles achter elkaar proppen

VB:
  1. SELECT a.aap, b.noot, c.mies FROM aap AS a INNER JOIN boot AS b ON a.id = b.a_id INNER JOIN cocos AS c ON b.id = c.b_id WHERE a.aap = 'raar' AND c.mies LIKE "%an%" ORDER BY a.id DESC


Je ziet al dat ik hoofdletters gebruik bij SQL-syntaxes, maakt het ook al iets overzichtelijker.. maar zo word het nog overzichtelijker, en daarom raad ik het je ook aan om het zo in je code te zetten..

  1. SELECT a.aap, b.noot, c.mies
  2. FROM aap AS a
  3. INNER JOIN boot AS b ON a.id = b.a_id
  4. INNER JOIN cocos AS c ON b.id = c.b_id
  5. WHERE a.aap = 'raar' AND c.mies LIKE "%an%"
  6. ORDER BY a.id DESC


Zo zie je eerder fouten in je query... en voor de snelheid maakt het niks uit.
Offline markla - 18/05/2009 11:31
Avatar van markla PHP interesse @Arie2Zero

Ik gebruik dreamweaver en als ik daar SELECT intik highlight die hem niet en als ik select intik highlight die hem wel. vandaar mijn gedwongen 'keuze"voor de lowercase notatie  .

En wat betreft de query: in dit geval kan ik één van beide opties gebruiken en zal ik de QUERY kopieren en waar nodig de WHERE regel aanpassen.


Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.219s