[PHP/MySQL] MySQL query met te selecteren variabele

Pagina: 1
Acties:
  • 123 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Mensen, ik ben al drie kwartier aan het spitten op het net in de GOT search en op diverse PHP sites, maar ik kom er niet uit.
Ik ben ook zeker geen echte script-guru ofzo, maar zou het fijn vinden als iemand me verder op weg kon helpen na al die tijd kloten.

Het gaat om 't volgende:

Ik wil een query afschieten op mijn MySQL DB :

code:
1
$sql = "select * from $dbtable ORDER BY $sortering DESC LIMIT $debut,$nb";

Nu wil ik ervoor zorgen dat ik $sortering kan aanpassen met een select box en dat de nieuwe query (met andere sortering) gesubmit wordt.
Nu heb ik allerlei <select> en <options> zaken geprobeerd toe te passen, maar 't wil niet echt lukken..

$sortering moet bijvoorbeeld kunnen worden:

Lidnr
Naam
Leeftijd
etc

Dit is geen script request ik wil wat leren middels jullie hulp.. (waarschijnlijk is het niet al te moeilijk, maar 'k zie 't niet :'()

[ Voor 6% gewijzigd door Verwijderd op 19-05-2003 21:34 ]


Acties:
  • 0 Henk 'm!

  • LeonT
  • Registratie: Juni 2001
  • Niet online
Misschien kan je een stuk script posten van wat je al geprobeerd hebt en aangeven wat er precies fout gaat.

gokje

[ Voor 33% gewijzigd door LeonT op 19-05-2003 21:41 ]


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 18-09 16:28

Bosmonster

*zucht*

Zoek eens in de MySQL-documentatie (www.mysql.com) op meta-data. Daar staat hoe je dingen als kolomnamen op kunt vragen. Dit uiteraard als je dit geautomatiseerd wilt hebben.

Wil je dit niet dan snap ik niet echt wat je probleem is :)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik wil niet zozeer de kolomnamen opvragen, degenen die ik wil gebruiken weet ik al. (Lidnr, Naam, Leeftijd).
Echter gaat het op de <select name=$sortering> die hieraan vooraf gaat met bijvoorbeeld <option>Lidnr</option>
<option>Naam</option>
<option>Leeftijd</option>
</form>

P.S. Ik heb de code net weer weggehaald omdat het weer niet werkte.. kan dus een beetje brak zijn dat verhaal over select en options.

Wellicht is er via het opvragen een makkelijkere methode waarmee ik via een drop-down box een optie (kolomnaam) kan selecteren om die sortering te maken.

Acties:
  • 0 Henk 'm!

  • Vae Victis
  • Registratie: April 2001
  • Laatst online: 07-09 06:15

Vae Victis

Dark Lord of the Sith

Je weet dat je bij option een value op moet geven?
en dat je die terecht komt in $sortering?
<option> hoef je bij mijn weten niet af te sluiten

<select name=sortering>
<option value=blabla>blabla
</select>
krijg je dan, dus select moet je afsluiten.

[ Voor 19% gewijzigd door Vae Victis op 19-05-2003 22:04 ]


Acties:
  • 0 Henk 'm!

  • dArtagnan
  • Registratie: Mei 2002
  • Laatst online: 23-08 22:47

dArtagnan

Een voor allen, allen voor een

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<HEAD>
<SCRIPT LANGUAGE="JAVASCRIPT" TYPE="TEXT/JAVASCRIPT">
        <!-- Hide script from older browsers
    
        function jumpPage(newLoc) {
            newPage = newLoc.options[newLoc.selectedIndex].value
    
            if (newPage != "") {
                window.location = newPage
            }
        }
    
        // End hiding script from older browsers -->
    </SCRIPT>   
</HEAD>
<BODY onLoad="document.myForm.newLocation.selectedIndex=0">
    <FORM ACTION="gotoLocation.cgi" NAME="myForm">
        <SELECT NAME="newLocation" onChange="jumpPage(this.form.newLocation)">
            <OPTION VALUE="" SELECTED>Select a topic
            <OPTION VALUE="<? echo $PHP_SELF, "?sorting=1">1
            <OPTION VALUE="<? echo $PHP_SELF, "?sorting=2">2
            <OPTION VALUE="<? echo $PHP_SELF, "?sorting=3">3
    </SELECT>
</FORM>

Acties:
  • 0 Henk 'm!

  • Graaf
  • Registratie: Oktober 2001
  • Laatst online: 20-03-2024

Graaf

blup

edit:

niet meer nodig.

[ Voor 86% gewijzigd door Graaf op 19-05-2003 22:09 . Reden: gewist, niet nodig! ]


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 18-09 16:28

Bosmonster

*zucht*

options moet je wel afsluiten.. het hoeft niet, maar is wel zo netjes ;) Zeker als je je code ook nog enigszins wilt valideren.

Maar goed.. ik zie hierboven ook html-tags in uppercase (not done, tags in lowercase).. en de aloude ranzigheid in javascript:


<!--
//-->


Wanneer leren mensen nu eens fatsoenlijke clientside code schrijven :(

Om dan nog even verder door te gaan op het stukje 'html' van Koraalduivel: het zit vol met nutteloosheden...

Je kunt hetzelfde bereiken zo:


code:
1
2
3
4
5
6
7
8
<form method="GET" action="whatever.php">
<select name="sortering" onchange="this.form.submit()">
<option value="0" selected>sortering</option>
<option value="1">optie1</option>
<option value="2">optie2</option>
<option value="3">optie3</option>
</select>
</form>



Waarom je daar een heel 'jumpPage' script voor nodig hebt is mij een raadsel ;)

[ Voor 96% gewijzigd door Bosmonster op 19-05-2003 22:21 ]


Acties:
  • 0 Henk 'm!

  • Sn0rkel
  • Registratie: Februari 2003
  • Laatst online: 25-06 20:45
en dan uiteraard niet vergeten om voor $sql in je script een regeltje met
$sortering = $_POST["sortering"];
in te voegen he :)

Acties:
  • 0 Henk 'm!

  • LeonT
  • Registratie: Juni 2001
  • Niet online
Sn0rkel schreef op 20 May 2003 @ 09:47:
en dan uiteraard niet vergeten om voor $sql in je script een regeltje met
$sortering = $_POST["sortering"];
in te voegen he :)
$sortering = $_GET["sortering"];
Als je het form van Bosmonster gebruikt ;)

[ Voor 5% gewijzigd door LeonT op 20-05-2003 17:58 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik weet nog echt te weinig van PHP om met dergelijke verwijzingen te werken.
Het ziet er netjes uit zo.
Maar hoe configureer ik nu het bestand whatever.php

Zet ik daarin

if sortering=1 then
else if sortering = 2 then
else if sortering = 3 then
end if
end if
end if

Kan iemand mij soufleren. P.S. Ik hoef niet het complete antwoord.
Ik wil weten hoe ik de optie selectie via de select box koppel aan de SQL query in whatever.php

Want wat ik ook vreemd vind is dat whatever.php (die ik query.php heb genoemd) geopend word als de selectbox wordt veranderd.
HEt is juist de bedoeling dat als de optie wordt veranderd de querie in datzelfde venster opnieuw wordt afgevuurd.
De bovenstaande code is dus in mijn ogen meer een jump2 code voor php ipv de richting waar ik naartoe wil. (Rember I'm a more then a less PHP-n00b)

[ Voor 32% gewijzigd door Verwijderd op 23-05-2003 17:34 ]


Acties:
  • 0 Henk 'm!

  • LeonT
  • Registratie: Juni 2001
  • Niet online
Verwijderd schreef op 23 May 2003 @ 17:20:
Kan iemand mij soufleren. P.S. Ik hoef niet het complete antwoord.
Ik wil weten hoe ik de optie selectie via de select box koppel aan de SQL query in whatever.php
Dat doe je door $sortering = $_GET["sortering"];
Nu zit de gekozen optie uit het form in de var $sortering.

Vervolgens doe je gewoon je query:
$sql = "select * from $dbtable ORDER BY $sortering DESC LIMIT $debut,$nb";
Want wat ik ook vreemd vind is dat whatever.php (die ik query.php heb genoemd) geopend word als de selectbox wordt veranderd.
HEt is juist de bedoeling dat als de optie wordt veranderd de querie in datzelfde venster opnieuw wordt afgevuurd.
De bovenstaande code is dus in mijn ogen meer een jump2 code voor php ipv de richting waar ik naartoe wil. (Rember I'm a more then a less PHP-n00b)
Dat is helemaal niet vreemd. Als je niet wilt dat hij een nieuw venster opent moet je gewoon in je form geen whatever.php (nieuwe pagina) maar <?=$_SERVER["PHP_SELF"]?> zetten bij action, dan wordt het form naar de eigen pagina gesubmit zegmaar. Wil je de PHP code en html verder toch gescheiden houden en dus niet in 1 file dan zal je die whatever.php aan het begin van je form bestand moeten includen (include ("whatever.php");).

Voorbeeldje:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
if (isset($_GET["sortering"]))
{
    $sortering = $_GET["sortering"];
    //query
    //resultaat van de query
}
else
{
?>

    Hier het form met action="<?=$_SERVER["PHP_SELF"]?>"

<?php
}
?>

[ Voor 30% gewijzigd door LeonT op 23-05-2003 18:53 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Dit werkt. Ben nu bezig aan een variabele voor de volgorde van de sortering, dus ASC of DESC. Met variabele $volgorde en ook een selectbox. Echter werkt dit niet.
Kan het dat het niet werkt om met een variabele te werken voor ASC of DESC.

als code heb ik nu:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<form method="GET" action="<?=$_SERVER["PHP_SELF"]?>">
<select name="sortering" onchange="this.form.submit()">
<option value="lidnr" selected>-sorteren op-</option>
<option value="alfa">type alfa romeo</option>
<option value="lidnr">lidnummer</option>
<option value="bouwjaar">bouwjaar</option>
<option value="nickname">nickname</option>
<option value="kleur">kleur</option>
</select>
</form>

<form method="GET" action="<?=$_SERVER["PHP_SELF"]?>">
<select name="volgorde" onchange="this.form.submit()">
<option value="ASC" selected>oplopend</option>
<option value="ASC">oplopend</option>
<option value="DESC">aflopend</option>
</select>
</form>

<?
$c = @mysql_connect("$dbhost","$dblogin","$dbpassword") or die("connection impossible");
@mysql_select_db("$dbname",$c) or die("selection impossible");

if(empty($page)) $page = 1;

if(empty($total))
    {
    $sql = "select count(*) as qte from $dbtable";
    $p = @mysql_query($sql,$c);
    $total = @mysql_result($p,"0","qte");
    }

$debut = ($page - 1) * $nb;


$sortering = $_GET["sortering"];
$volgorde = $_GET["volgorde"];

$sql = "select * from $dbtable ORDER BY $sortering $volgorde LIMIT $debut,$nb";



[e_d_i_t]
Als ik $sortering statisch maak, bijvoorbeeld de waarde lidnr geef, dan werkt de toegevoegde $volgorde wel

Het lijkt als of ik in de select query niet twee variabelen na elkaar mag gebruiken...

ledenlijst15.php?sortering=lidnr (werkt bij twee variabelen alleen sortering niet)
ledenlijst15.php?volgorde=DESC (werkt als de $sortering niet bestaat en $volgorde wel)
ledenlijst15.php?sortering=lidnr?volgorde=DESC (werkt niet bij twee variabelen)

Iemand een idee om met die variabelen om te gaan?
[/e_d_i_t]

[ Voor 49% gewijzigd door Verwijderd op 23-05-2003 19:39 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben eruit wat de fout is.

De query na een refresh moet bijvoorbeeld zijn :
code:
1
ledenlijst15.php?volgorde=DESC&sortering=lidnr


Op dit moment met bovenstaande code verliest "volgorde" haar waarde als "sortering" wordt aangepast en vice versa.

Wat ik dus voor elkaar wil krijgen is dat als ik een optie verander de andere waarde wordt meegenomen.
En het dus een & functie idee wordt =>
code:
1
ledenlijst15.php?volgorde=DESC&sortering=lidnr


Iemand een tip?

Ik denk persoonlijk dat het met de submit en de code:
code:
1
2
$sortering = $_GET["sortering"];
$volgorde = $_GET["volgorde"];

te maken heeft

[ Voor 26% gewijzigd door Verwijderd op 23-05-2003 20:11 ]


Acties:
  • 0 Henk 'm!

  • Vae Victis
  • Registratie: April 2001
  • Laatst online: 07-09 06:15

Vae Victis

Dark Lord of the Sith

Je moet beide selects in 1 form zetten. anders krijg je alleen van de form waar je de submit actie op uitvoert de variable terug.
Nu krijg je dus OF sortering OF volgorde terug
Als je het zo doet:
code:
1
2
3
4
5
6
7
8
9
<form method="GET" action="<?=$_SERVER["PHP_SELF"]?>">
<select name="sortering">
<option value="lidnr" selected>-sorteren op-</option>
</select>
<select name="volgorde">
<option value="ASC" selected>oplopend</option>
</select>
<input type=submit name="button" value="Klikopmij">
</form>

Krijg je beide terug.
Zoals je ziet zit er nu een button bij waarop je moet klikken om de form te verzenden.

Ik raad je wel aan om je een beetje in de stof te verdiepen. ;)
Is nl basic html.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Yep dat is idd een optie. (ken ik overigens al, maar ik kwam er even niet op en had het idee dat een variabele zijn waarde wel zou vasthouden als die gezet werd)
Thanks

Acties:
  • 0 Henk 'm!

  • Knakker
  • Registratie: April 2000
  • Laatst online: 13-09 16:51
* Gebruik maken van een input type 'hidden' en die toevoegen aan je form; hierin sla je vorige waarden van $categorie en $sortering op.
* Gebruik maken van sessie-variabelen $_SESSION["categorie"] en $_SESSION["sortering"] waarin je de vorige waarden opslaat.

Succes ermee :)

Geef mij maar een Warsteiner.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Kan ik daarmee of op een andere manier ook het volgende aanpakken:

Op het moment dat ik submit gaat de waarde van sortering al weer naar de default waarde...
Hoe hou ik dit vast zodat ik bij het selecteren van aflopend niet opnieuw bouwjaar op hoef te zoeken

(Ik wil het liefst in de selectbox de geslecteerde waarde blijven zien, nadat ik op submit heb gedrukt) Dit zodat je ziet welke sortering je hebt gesubmit en zodat je maar 1 van de 2 hoeft aan te passen als je dit wilt.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Van DeverauX kreeg ik in een vergelijkbaar topic het volgende antwoord:

Ik begrijp eerlijk gezegd niet helemaal wat je nou bedoeld en wat je nou precies wilt
Hoe bedoel je wanneer je submit dat de waarde van sortering naar default gaat?
Het eigenlijke sorteren gaat wel goed maar vervolgens wordt er in je dropdown niet aangegeven dat er op dat moment op bv lidnr is gesorteerd?
In dit geval kan je toch gewoon met een conditional statements controleren wat de waarde van je form-element "sortering" is en deze waarde vervolgens als eerste option in je dropdown plaatsen
Wat is een conditional statement, moet ik dan via een sutkje javascipt de laatst gekozen waarde van sortering gebruiken om die vervoglens als eerste weer in de drop down te plaatsen...:?
Kan iemand hierop een voorzetje of ideetje voor geven..

(edited quote)

[ Voor 3% gewijzigd door Verwijderd op 24-05-2003 17:53 ]


Acties:
  • 0 Henk 'm!

  • Vae Victis
  • Registratie: April 2001
  • Laatst online: 07-09 06:15

Vae Victis

Dark Lord of the Sith

<option value="lidnr" selected>-sorteren op-</option>
Je hebt daar selected staan, weet je wat dat doet?
En wat je daarmee kan doen? :|

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert


Een conditional statement is een overdreven woord voor if

Hij bedoelt dit:
PHP:
1
2
3
if ( $sortering == 'lidnr' ) {
   echo '<option value="lidnr" selected="selected">Lidnummer</option>';
}


Overigens kun je beter de velden waarop je kunt sorteren in een array zetten om door middel van een foreach de juiste sorteringen weer te geven:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
// stel vast wat geldige manieren zijn om te sorteren,
// geassocieerd met de naam
$sorts = array ( 
   'field1' => "Veld nummer 1",
   'field2' => "Veld nummer 2"
);
$sort_dirs = array (
   'desc'  => "Aflopend",
   'asc'  => "Oplopend"
);

// controleer of de meegegeven sortering wel een geldige is
if ( 
   isset ( $_GET [ 'sortering' ] ) 
&& in_array ( $_GET [ 'sortering' ], array_keys ( $sorts ) )
)  {
   $sortering = $_GET [ 'sortering' ];
} else {
   // kies default de eerste uit de array $sorts
   $sortering = $sorts [ 0 ]; 
}

// doe hier hetzelfde voor $sort_dirs / volgorde

// ...
echo '<form method="get" action=", htmlentities ( $PHP_SELF ), ">';
echo '<select name="sortering">';
foreach ( $sorts as $sort_key => $sort_name ) {
   echo '<option value="', $sort_key, '" ';
   if ( $sortering == $sort_key ) {
      echo 'selected="selected"';
   }
   echo '>', htmlentities ( $sort_name ), '</option>';
}
echo '</select>';
// en weer hetzelfde voor volgorde.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz

Pagina: 1