Array meerdere malen gebruiken in keuzelijst binnen while loop

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Bas van de Ven

Bas van de Ven

30/06/2013 15:40:36
Quote Anchor link
Binnen een webpagina wil ik mijn performance verbeteren.
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)
PHP script in nieuw venster Selecteer het PHP script
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
<?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

Gewijzigd op 30/06/2013 20:20:54 door Bas van de Ven
 
PHP hulp

PHP hulp

22/12/2024 13:34:08
 
Bas van de Ven

Bas van de Ven

09/07/2013 20:50:09
Quote Anchor link
De topic heb ik zelf als volgt opgelost.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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
Gewijzigd op 09/07/2013 20:52:21 door Bas van de Ven
 
Erwin H

Erwin H

10/07/2013 10:42:17
Quote Anchor link
Volgens mij doe je iets heel vreemd (even iets beter uitgelijnd om het duidelijker te maken):
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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";    
    }
  }
}

?>

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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
echo "$temp2";
//in plaats van:
echo $temp2;
?>

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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
for ($i = 0; $i < $count; $i++){
  if ($moeder == $ooiRaak[$i] || (isset($_POST["kzlooi_$Id"]) && $_POST["kzlooi_$Id"] == $wnrOoi[$i])){
    echo '<option selected>' . $wnrOoi[$i] . '</option>';
  }
else {
    echo '<option>' . $wnrOoi[$i] . '</option>';  
  }
}

?>


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
 
Bas van de Ven

Bas van de Ven

10/07/2013 23:46:07
Quote Anchor link
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.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.