[PHP &MySQL] doorgeven dropdownvariable aan recordset

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

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
<form name="form1" id="form1" method="post" action="">
    <select name="select">
      <?php
  while(!$Recordset1->EOF){
?>
      <option value="<?php echo $Recordset1->Fields('num_pg')?>"><?php echo $Recordset1->Fields('groep')?></option>
      <?php
    $Recordset1->MoveNext();
  }
  $Recordset1->MoveFirst();
?>
    </select>
  </form>


Dit werkt, ik krijg een keurig dropdownmenuutje te zien.
Maar nu wil ik op basis van de gekozen waarde een tabel op DEZELFDE pagina vullen met data uit een andere tabel waarbij num_pg bepalend is voor welke waarden uit de tabel moeten worden gehaald.
De tweede tabel heeft de kolommen num_p, productgroep (= gelijk aan num_pg), omschrijving en url_plaatje.

Ik kom er domweg niet uit. Ik heb het geprobeerd met $variabele=$_POST("Select") op te nemen in een tweede recordset en daar een SELECT statement te gebruiken WHERE productgroep=variabele maar dat werkt niet.

Ik gebruik macromedia Dreamweaver MX 2004 icm PHAKT maar die laatste maakt het er niet makkelijker op. Als ik daarmee een tweede recordset creeër dan krijg ik dit:
PHP:
1
2
3
4
5
6
7
8
9
// begin Recordset
$colname__Recordset2 = '1';
if (isset($HTTP_POST_VARS['num_pg'])) {
  $colname__Recordset2 = $HTTP_POST_VARS['num_pg'];
}
$query_Recordset2 = sprintf("SELECT * FROM producten WHERE productgroep = %s", $colname__Recordset2);
$Recordset2 = $database1->SelectLimit($query_Recordset2) or die($database1->ErrorMsg());
$totalRows_Recordset2 = $Recordset2->RecordCount();
// end Recordset

En dat werkt domweg niet.

Acties:
  • 0 Henk 'm!

Verwijderd

waarom gebruik je de functie sprintf?

PHP:
1
$query_Recordset2 = sprintf("SELECT * FROM producten WHERE productgroep = %s", $colname__Recordset2);


kun je beter vervangen door:

PHP:
1
$query_Recordset2 = 'SELECT * FROM producten WHERE productgroep = '.$colname__Recordset2;

Acties:
  • 0 Henk 'm!

  • OkkE
  • Registratie: Oktober 2000
  • Laatst online: 04-09 08:16

OkkE

CSS influencer :+

@Felony_: Wat is er mis met sprintf(); :?

Maar in het tweede stukje code ken je de waarde $HTTP_POST_VARS['num_pg'] toe aan je $conname__Recordset2, maar je formulier veld heet "select".
PHP:
1
2
3
if (isset($HTTP_POST_VARS['num_pg'])) {
  $colname__Recordset2 = $HTTP_POST_VARS['num_pg'];
}

Probeer het bovenstaande eens te vervangen door dit:
PHP:
1
2
3
if (isset($HTTP_POST_VARS['select'])) {
  $colname__Recordset2 = $HTTP_POST_VARS['select'];
}


/EDIT
En ik zou voor de volledigheid toch even een action aan je formulier hangen. :)

[ Voor 17% gewijzigd door OkkE op 12-01-2005 11:13 ]

“The best way to get the right answer on the Internet is not to ask a question, it's to post the wrong answer.”
QA Engineer walks into a bar. Orders a beer. Orders 0 beers. Orders 999999999 beers. Orders a lizard. Orders -1 beers.


Acties:
  • 0 Henk 'm!

  • X-Lars
  • Registratie: Januari 2004
  • Niet online

X-Lars

Just GoT it.

De name "select" aan een select-tag hangen is ook niet echt logisch. Ik weet zo echter niet zeker of het problemen kan opleveren.

Acties:
  • 0 Henk 'm!

  • dajappie
  • Registratie: Januari 2005
  • Laatst online: 20:47
De POST-variabelen zijn pas beschikbaar nadat je het formulier weer naar je webserver gestuurd hebt, dus daar schiet je niet direct iets mee op binnen één pagina. In dit geval is een oplossing met Javascript het makkelijkst. Met de functie onChange kan je het formulier dwingen te versturen naar zichzelf na wijziging van een waarde in een invulveld of zoals hier de eerste dropdown. Je hebt de POST-waarde dan beschikbaar om de tweede dropdown te vullen. Als je dan in je eerste dropdown nog iets inbouwt om de gekozen waarde op SELECTED te zetten ben je klaar toch?

HTML:
<SELECT NAME="select" onChange="window.open(this.options[this.selectedIndex].value,'_top')">

PHP:
1
echo "<OPTION VALUE=\"".$_SERVER["PHP_SELF"]."?num_pg=".$num_pg."\"> optie 1";

[ Voor 25% gewijzigd door dajappie op 12-01-2005 11:27 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ok:
  • sprintf werd aangemaakt door PHakt, niet nodig maar ook niet schadelijk
  • Ik heb inderdaad ook geprobeerd om
    PHP:
    1
    2
    
    if (isset($HTTP_POST_VARS['select'])) {
      $colname__Recordset2 = $HTTP_POST_VARS['select'];
    te doen maar dat gaf geen verbetering
  • Ik had bij de form-tag reeds
    PHP:
    1
    
    action="<?=$_SERVER["PHP_SELF"]?>" 
    opgenomen, maar helaas.... wil niet lukken.
  • ik kom dus niet om JS heen?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hmz, gaat wel de goede kant op, dit heb ik nu bij de dropdownbox staan:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
<form name="form1" id="form1" method="post" action="">
    <select name="select" onChange="window.open(this.options[this.selectedIndex].value,'_top')">
      <?php
  while(!$Recordset1->EOF){
?>
      <option value="<?php echo "".$_SERVER["PHP_SELF"]."?num_pg=".$Recordset1->Fields('num_pg')?>"><?php echo $Recordset1->Fields('groep')?></option>
      <?php
    $Recordset1->MoveNext();
  }
  $Recordset1->MoveFirst();
?>
    </select>
  </form>


De pagina ververst zichzelf en in de url komt nu keurig bestandsnaam.php?num_pg=4 te staan. Waarbij het laatste cijfer wijzigt met de keuze.

Nu nog deze variabele opnemen in de recordset of rechtstreeks in de tabel gebruiken?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Jemig, DIT WERKT!

Alleen nog 1 probleem: De eerste waarde in het keuzemenu wordt niet weergegeven. Ik bedoel ik kan het wel selecteren maar dan zie ik niet de bijbehorende waarden uit de tweede tabel.
Anders gezegd bij elke keuze zie ik num_pg in de url veranderen behalve bij de eerste optie, daar gebeurt niks.
(beetje lastig uit te leggen)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb zelf een giga hekel aan halve oplossingen in topics dus wil ik graag dit onderwerp goed afsluiten:

Ik heb een bestaand HTML bestand opgeslagen als PHP bestand (bestandsnaam.php) en de volgende code staat boven de DOCTYPE declaratie:
PHP:
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
<?php
//Connection statement
require_once('Connections/bonjour.php');

//Aditional Functions
require_once('includes/functions.inc.php');

// begin Recordset
$query_Recordset1 = "SELECT * FROM productgroep ORDER BY num_pg ASC";
$Recordset1 = $bonjour->SelectLimit($query_Recordset1) or die($bonjour->ErrorMsg());
$totalRows_Recordset1 = $Recordset1->RecordCount();
// end Recordset

// Dit Recordset1 wordt gebruikt voor het opvragen van de beschikbare productgroepen


// begin Recordset2 waarmee binnen de tabel producten op basis van de straks komende
 //dropdownbox en daar gevonden variabele num_pg de desbetreffende producten boven water 
//worden gevist
$colname__Recordset2 = '-1';
if (isset($HTTP_GET_VARS['num_pg'])) {
  $colname__Recordset2 = $HTTP_GET_VARS['num_pg'];
}
$query_Recordset2 = sprintf("SELECT * FROM producten WHERE productgroep = %s", $colname__Recordset2);
$Recordset2 = $bonjour->SelectLimit($query_Recordset2) or die($bonjour->ErrorMsg());
$totalRows_Recordset2 = $Recordset2->RecordCount();
// end Recordset



//PHP ADODB document - made with PHAkt 2.8.2
?>


Ok de tools voor het zoeken zijn gedeclareerd (ofzo :) )

Het dropdownmenu wordt in de onderstaande codes gemaakt:
PHP:
4
5
6
7
8
9
10
11
12
13
14
15
<form name="form1" id="form1" method="post" action="">
    <select name="select" onChange="window.open(this.options[this.selectedIndex].value,'_top')">
      <?php
  while(!$Recordset1->EOF){
?>
      <option value="<?php echo "".$_SERVER["PHP_SELF"]."?num_pg=".$Recordset1->Fields('num_pg')?>"><?php echo $Recordset1->Fields('groep')?></option>
      <?php
    $Recordset1->MoveNext();
  }
 ?>
    </select>
  </form>

Thanks to dajappie !
Er wordt dus na het selecteren van een waarde het menu een refresh gemaakt van het bestand en de waarde num_pg wordt door het stukje code
PHP:
1
"".$_SERVER["PHP_SELF"]."?num_pg="
aan de bestandnaam toegevoegd in de url
http://www.tweakers.net/bonjour.php?num_pg=x en x varieert met de gemaakte keuze.
Let op de eerste waarde uit de tabel kan je (IK) niet selecteerbaar krijgen. Dit heb ik opgevangen door de eerste waarde in de tabel te gebruiken voor "maak uw keuze" .

Vervolgens maken we een tabel met de door recordset2 gevonden waarden die voldoen aan num_pg=x
PHP:
4
5
6
7
8
9
10
11
12
13
14
15
  <?php
  while (!$Recordset2->EOF) {
?>
      <tr>
          <td bordercolor="#ECE9D8"><span class="style1"><?php echo $Recordset2->Fields('product'); ?></span></td>
          <td><div align="center">[img]"<?php[/img]Fields('plaatje_verzamel'); ?>"> </div></td>
          <td width="200"><?php echo $Recordset2->Fields('omschrijving'); ?></td>
      </tr>
      <?php
    $Recordset2->MoveNext();
  }
?>


Mischien is het omslachtig, mischien is het dom. Maar het werk!
Pagina: 1