Array meerdere malen gebruiken in keuzelijst binnen while loop
Dmv een while loop worden records uit een tabel getoond waarvan de waarde uit ieder veld (9 stuks) kan worden gewijzigd. 6 velden zijn keuzelijsten. Deze keuzelijsten worden gevuld door query's.
Het opbouwen van de web-pagina duurt lang wanneer de while loop meer dan 10 records doorloopt. M.i. kan het opbouwen van de keuzelijst efficiënter.
Bij elk record in de while loop worden 6 keuzelijsten gevuld door 6 verschillende query's. 10 records dus 60 query's. Ik wil voorafgaand aan de while loop 1 keer 6 arrays maken obv de 6 query's. De arrays wil ik vervolgens in de keuzelijsten plaatsen binnen de while loop zodat niet elke keer een query opnieuw wordt uitgevoerd. Mn. het plaatsen van een array in een keuzelijst lukt me niet. Binnen deze topic zal ik me beperkten tot 1 array en (dus) 1 keuzelijst. Hieronder staat mijn code tot zover ik ben gekomen met de keuzelijst moeder(dier). Kan iemand mij vertellen hoe ik een array (1 x gedeclareerd) steeds kan toepassen in de keuzelijst als de while loop wordt doorlopen ?
Alvast bedankt.
Code (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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
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
40
41
42
43
44
45
46
47
48
49
50
51
<?php
// 1-malig opbouwen van array
$qry = mysql_query("SELECT Werknr
FROM vw_kzlooien ORDER BY Werknr") or die (mysql_error());
while($row = mysql_fetch_assoc($qry))
{
$mdr = "$row[Werknr]";
$item = array ($mdr);
FOREACH ($item as $option)
{
$moeders = array($option);
$lijst = "$moeders[0] <br/>"; // echo lijst levert gewenste inhoud voor keuzelijst
}
}
// EINDE 1-malig opbouwen van array
// Start while loop
<td style = "font-size : 11px;">
<!-- KZLMOEDER NIEUW -->
<select style="width:65;" [code]<?php echo " name=\"kzlooi_$Id\" "; ?> value = "" style = "font-size:12px;">
<option></option>
<?php FOREACH ($item as $option)
{
$opties= array($item=>$option);
foreach ( $opties as $key => $waarde)
{
$keuze = '';
if(isset($_POST["kzlooi_$Id"]) && $_POST["kzlooi_$Id"] == $key)
{
$keuze = ' selected ';
}
$temp2 = '<option value="' . $key . '" ' . $keuze .'>' . $waarde . '</option>' ;
}
echo "$temp2";
}
?></select> <!-- EINDE KZLMOEDER NIEUW -->
</td>
// Einde while loop
// 1-malig opbouwen van array
$qry = mysql_query("SELECT Werknr
FROM vw_kzlooien ORDER BY Werknr") or die (mysql_error());
while($row = mysql_fetch_assoc($qry))
{
$mdr = "$row[Werknr]";
$item = array ($mdr);
FOREACH ($item as $option)
{
$moeders = array($option);
$lijst = "$moeders[0] <br/>"; // echo lijst levert gewenste inhoud voor keuzelijst
}
}
// EINDE 1-malig opbouwen van array
// Start while loop
<td style = "font-size : 11px;">
<!-- KZLMOEDER NIEUW -->
<select style="width:65;" [code]<?php echo " name=\"kzlooi_$Id\" "; ?> value = "" style = "font-size:12px;">
<option></option>
<?php FOREACH ($item as $option)
{
$opties= array($item=>$option);
foreach ( $opties as $key => $waarde)
{
$keuze = '';
if(isset($_POST["kzlooi_$Id"]) && $_POST["kzlooi_$Id"] == $key)
{
$keuze = ' selected ';
}
$temp2 = '<option value="' . $key . '" ' . $keuze .'>' . $waarde . '</option>' ;
}
echo "$temp2";
}
?></select> <!-- EINDE KZLMOEDER NIEUW -->
</td>
// Einde while loop
Gewijzigd op 30/06/2013 20:20:54 door Bas van de Ven
Code (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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
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
40
41
42
43
44
45
46
47
48
49
50
51
52
<?php
// 1-malig opbouwen van array moederdier
$qryMoeder = ("SELECT Werknr, type, ooit_gelammerd, Levensnummer, Geb_datum
FROM vw_kzlooien ORDER BY Werknr") or die (mysql_error());
$moederdier = mysql_query($qryMoeder);
$index = 1;
while ($mdr = mysql_fetch_array($moederdier))
{
$wnrOoi[$index] = $mdr['Werknr'];
$ooiRaak[$index] = $mdr['Levensnummer'];
$index++;
}
unset($index); ?>
// EINDE 1-malig opbouwen van array moederdier
// Start while loop ..............
<td style = "font-size : 11px;">
<!-- KZLMOEDER --><?php
$count = count($wnrOoi);
?>
<select style="width:65;" <?php echo " name=\"kzlooi_$Id\" "; ?> value = "" style = "font-size:12px;">
<option></option>
<?php for ($i = 1; $i <= $count; $i++)
{
$opties= array($wnrOoi[$i]=>$wnrOoi[$i]);
foreach ( $opties as $key => $waarde)
{
$keuze = '';
if(isset($_POST["kzlooi_$Id"]) && $_POST["kzlooi_$Id"] == $key)
{
$keuze = ' selected ';
}
$temp1 = '<option value="' . $key . '" selected>' . $waarde . '</option>' ;
$temp2 = '<option value="' . $key . '" ' . $keuze .'>' . $waarde . '</option>' ;
}
If (isset($_POST['knpVervers_'])) { echo "$temp2"; } else {
if ($moeder == $ooiRaak[$i] ) { echo "$temp1";} else { echo "$temp2"; }
}
}
?></select>
<?php if( empty($ooi_exist) && empty($_POST["kzlooi_$Id"]) ) {$melding = "$moeder"; echo "$melding"; ?>
<b style = "color : red;"> ! </b> <?php } ?>
<!-- EINDE KZLMOEDER --> </td>
// .............. Einde while loop
// 1-malig opbouwen van array moederdier
$qryMoeder = ("SELECT Werknr, type, ooit_gelammerd, Levensnummer, Geb_datum
FROM vw_kzlooien ORDER BY Werknr") or die (mysql_error());
$moederdier = mysql_query($qryMoeder);
$index = 1;
while ($mdr = mysql_fetch_array($moederdier))
{
$wnrOoi[$index] = $mdr['Werknr'];
$ooiRaak[$index] = $mdr['Levensnummer'];
$index++;
}
unset($index); ?>
// EINDE 1-malig opbouwen van array moederdier
// Start while loop ..............
<td style = "font-size : 11px;">
<!-- KZLMOEDER --><?php
$count = count($wnrOoi);
?>
<select style="width:65;" <?php echo " name=\"kzlooi_$Id\" "; ?> value = "" style = "font-size:12px;">
<option></option>
<?php for ($i = 1; $i <= $count; $i++)
{
$opties= array($wnrOoi[$i]=>$wnrOoi[$i]);
foreach ( $opties as $key => $waarde)
{
$keuze = '';
if(isset($_POST["kzlooi_$Id"]) && $_POST["kzlooi_$Id"] == $key)
{
$keuze = ' selected ';
}
$temp1 = '<option value="' . $key . '" selected>' . $waarde . '</option>' ;
$temp2 = '<option value="' . $key . '" ' . $keuze .'>' . $waarde . '</option>' ;
}
If (isset($_POST['knpVervers_'])) { echo "$temp2"; } else {
if ($moeder == $ooiRaak[$i] ) { echo "$temp1";} else { echo "$temp2"; }
}
}
?></select>
<?php if( empty($ooi_exist) && empty($_POST["kzlooi_$Id"]) ) {$melding = "$moeder"; echo "$melding"; ?>
<b style = "color : red;"> ! </b> <?php } ?>
<!-- EINDE KZLMOEDER --> </td>
// .............. Einde while loop
Gewijzigd op 09/07/2013 20:52:21 door Bas van de Ven
Code (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
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
<?php
for ($i = 1; $i <= $count; $i++)
{
$opties= array($wnrOoi[$i]=>$wnrOoi[$i]);
foreach ( $opties as $key => $waarde)
{
$keuze = '';
if(isset($_POST["kzlooi_$Id"]) && $_POST["kzlooi_$Id"] == $key)
{
$keuze = ' selected ';
}
$temp1 = '<option value="' . $key . '" selected>' . $waarde . '</option>' ;
$temp2 = '<option value="' . $key . '" ' . $keuze .'>' . $waarde . '</option>' ;
}
If (isset($_POST['knpVervers_']))
{
echo "$temp2";
} else {
if ($moeder == $ooiRaak[$i] ){
echo "$temp1";
} else {
echo "$temp2";
}
}
}
?>
for ($i = 1; $i <= $count; $i++)
{
$opties= array($wnrOoi[$i]=>$wnrOoi[$i]);
foreach ( $opties as $key => $waarde)
{
$keuze = '';
if(isset($_POST["kzlooi_$Id"]) && $_POST["kzlooi_$Id"] == $key)
{
$keuze = ' selected ';
}
$temp1 = '<option value="' . $key . '" selected>' . $waarde . '</option>' ;
$temp2 = '<option value="' . $key . '" ' . $keuze .'>' . $waarde . '</option>' ;
}
If (isset($_POST['knpVervers_']))
{
echo "$temp2";
} else {
if ($moeder == $ooiRaak[$i] ){
echo "$temp1";
} else {
echo "$temp2";
}
}
}
?>
Dus je loopt met een for loop door alle waardes van $wnrOoi. Voor elk element maak je een array met 1 element en daar doe je een foreach over..... Waarom?
Vervolgens maak je twee strings en op basis van een paar opties echo je of de een of de ander. Waarom niet gewoon de string echoen die je nodig hebt, zonder dat je die eerst in een variabele stopt? 1 van de 2 is nu overbodig want die gebruik je niet.
En vraag jezelf ook eens af van wat het nut is van:
Tenslotte, als je een optie in een select stopt waar geen value gedefinieerd is dan zal de tekst genomen worden als de value. Met andere woorden, als je value gelijk is aan de tekst dan kan je die value net zo goed weglaten, het is namelijk alleen maar extra bits die je verstuurt.
Volgens mij kan je het sterk vereenvoudigen tot dit:
Code (php)
Toevoeging op 10/07/2013 10:47:47:
Oh, de for loop moet je trouwens laten lopen van $i=0 tot $i<$count, aangezien arrays in php beginnen bij 0, niet bij 1.
Gewijzigd op 10/07/2013 14:36:29 door Erwin H
Zo dat is inderdaad een stuk eenvoudiger. Keuzelijsten gebruik ik veel. Vaak met net weer een iets andere functionaliteit. Bestaande code pas ik steeds weer aan niet altijd even netjes zo blijkt nu. Ook wat betreft de quots bij echo "$temp2"; heb je een punt. Bedankt voor je feedback Erwin.