[PHP] Hoe dropdown code te hergebruiken?

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

Onderwerpen


Acties:
  • 0 Henk 'm!

  • StruvusMaximus
  • Registratie: Februari 2000
  • Laatst online: 03-01 20:37
Ik ben sinds kort bezig met php en webscripting in het algemeen, en nu moet ik oa. voor een formulier een x aantal keer de onderstaande code genereren. Nu had ik al enkele malen zelf functies geschreven om code te besparen. aangezien ik niet hou van veel lijnen code typen :)
Maar ik heb geen idiee hoe ik deze lap code kan recyclen.

De vraag is dus, kan ik functies ontwerpen waarmee ik een mix van php/html kan genereren?
Ik heb al op php.net gekeken en via google maar kan geen antwoord vinden (mischien verkeerde zoektermen).

PHP:
1
2
3
4
5
6
7
8
9
10
    <select name="select1" id="select1">
            <?php while ($row2 = mysql_fetch_assoc($query2)){?>
                <option value="<?php echo $row2['bewerking_id']; ?>
                "
                <?php if ($row2['bewerking_id'] == 52){
                    echo " selected";}  ?>
                >
                <?php echo $row2['machine']."   ->".format_number1($row2['prijs_ha']); ?>  
                </option>
                <?php } ?>

[ Voor 0% gewijzigd door RobIII op 10-05-2007 18:43 . Reden: Code-tags fix ]


Acties:
  • 0 Henk 'm!

  • dingstje
  • Registratie: Augustus 2002
  • Laatst online: 02-01-2024
Het beste dat je kan volgens mij is dit opsplitsen in drie functies:
1) getData() die een array returnt met alle data in
2) getSelectedItem($data) returnt de index in de array van het element dat geselecteerd moet zijn in de gegeven array
3) createSelectBox($data, $selectedItem = null) die de selectbox maakt op basis van de data-array en die optioneel een paramter $selectedItem neemt

If you can't beat them, try harder


Acties:
  • 0 Henk 'm!

  • ripexx
  • Registratie: Juli 2002
  • Laatst online: 17:49

ripexx

bibs

Waarom maak je er geen functie van die een array accepteerd. Hoe je dan die array vult is weer een andere verhaal maar dan maak je het jezelf wat eenvoudiger

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function createSelectBox($name, $contents, $selected)
{
    // Bouw string op

    // Loop door array
    foreach(etc)
    {
        //etc..
    }

    // Sluit HTML af

    return "html"
}

En dan als volgt aanroepen in je HTML

PHP:
1
<p>Selecteer iets: <?php echo createSelectBox($naam, $array, 1);?></p>

buit is binnen sukkel


Acties:
  • 0 Henk 'm!

  • StruvusMaximus
  • Registratie: Februari 2000
  • Laatst online: 03-01 20:37
Ok , ik zal daar eens verder in verdiepen.

Echter hoe krijg ik het voor elkaar dat de door jou voorgestelde createSelectBox($data, $selectedItem = null) functie de code genereerd?

Aangezien het bestaat uit een mix van php en html code.

Tot nu toe heb ik alleen functies gemaakt die een parameter als input gebruiken deze bewerken en vervolgens returnen.

Acties:
  • 0 Henk 'm!

  • 4Real
  • Registratie: Juni 2001
  • Laatst online: 14-09-2024
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
<?php

// functie die een naam voor de combobox nodig heeft
// data uiteraad waarmee die gevuld word
// en (optioneel) een selected index
// maar dit kun je ook om zetten naar een speciale key die geselecteerd moet worden.
// geeft een string terug die je in je html stuk kunt plakken
function BuildComboBox($Name, $Content, $Selectedindex = -1)
{
    $output = "<select name='{$Name}'>";

    for ( $i = 0; $i < count($Content); $i++ )
    {
        $selected = '';
        if ( $Selectedindex == $i )
        {
            $selected = ' selected';
        }

        $output .= "<option value='" . $Content[$i]['key'] . "' {$selected}>" . $Content[$i]['value'] . "</option>";
    }

    $output .= '</select>';

    return $output;
}

// Input array met key/value array daarin
$array[] = array('key' => '#1', 'value' =>'value1');
$array[] = array('key' => '#2', 'value' =>'value2');
$array[] = array('key' => '#3', 'value' =>'value3');

// geen select gedaan standaard combobox
$output1 = BuildComboBox('fiets', $array);

// wel een select gegeven dus nu moet hij hem goed zetten
$output2 = BuildComboBox('fiets', $array, 1);

?>


Niet getest zo even uit de losse pols geklopt :)

[ Voor 28% gewijzigd door 4Real op 10-05-2007 18:26 ]


Acties:
  • 0 Henk 'm!

  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02 23:12

SchizoDuckie

Kwaak

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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
<?


class Select
{
    var $selected, $onchange, $name, $elements, $disabled;
    
    function Select($name, $elements, $onchange=false)
    {
        $this->name = $name;
        $this->elements = $elements;
        $this->disabled = false;
        $this->onchange = !$onchange ? '' : $onchange;
    }

    function setKeyValue($key, $val)
    {
        $this->keyValue = $key;
        $this->valValue = $val;
    }

    function setSelected($selected) 
    {
        $this->selected = $selected;    
    }

    function setOnChange($onchange) 
    {
        $this->onchange = $onchange;
    }

    function setDisabled($value)
    {
        $this->disabled = $value;
    }
    

    function display() 
    {
        $disabled = $this->disabled == true ? 'disabled' : '';
        $output = "<select name='{$this->name}' onchange='{$this->onchange}' {$disabled}>";
        $options = "<option value=''>Maak uw keuze</option>";   
        $key = $this->keyValue;
        $val = $this->valValue;
        foreach($this->elements as $elm)
        {
            $selected = ($elm->$key == $this->selected) ? " selected" : "";
            $options .= "<option value='{$elm->$key}'{$selected}>{$elm->$val}</option>";
        }
        $output .= "{$options}</select>";
        return($output);
    
    }

}

//usage: 
while ($row2 = mysql_fetch_assoc($query2))
{
$queryoutput[]= $row2;
}

$select = new Select('select1', $queryoutput);
$select->setKeyValue('bewerking_id', 'machine');
$select->setSelected('woei');
echo $select->display();

dat hoort met een objectje natuurlijk :)

[ Voor 14% gewijzigd door SchizoDuckie op 10-05-2007 23:57 ]

Stop uploading passwords to Github!


Acties:
  • 0 Henk 'm!

  • StruvusMaximus
  • Registratie: Februari 2000
  • Laatst online: 03-01 20:37
Bedankt allemaal, jullie oplossingen hebben mij zeer geholpen.
Ik zie al dat ik nog veel te leren heb op php gebied, maar ik zie de voordelen van het OO gebeuren wel in. Kost wel wat tijd om op te zetten en over na te denken maar kan je later veel tijd besparen.

Acties:
  • 0 Henk 'm!

  • daniëlpunt
  • Registratie: Maart 2004
  • Niet online

daniëlpunt

monkey's gone to heaven

je hebt een ) te veel op regel 63 ;)
Voor de rest ben ik te moe om te kijken of het een goede klasse is. Maar op het eerste gezicht wel.

Acties:
  • 0 Henk 'm!

  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02 23:12

SchizoDuckie

Kwaak

markoh schreef op donderdag 10 mei 2007 @ 23:10:
Bedankt allemaal, jullie oplossingen hebben mij zeer geholpen.
Ik zie al dat ik nog veel te leren heb op php gebied, maar ik zie de voordelen van het OO gebeuren wel in. Kost wel wat tijd om op te zetten en over na te denken maar kan je later veel tijd besparen.
Da's nou juist het mooie aan OO. Je kan ook het idee van een ander in 1x gebruiken door een class te downloaden en te gebruiken. Don't reinvent the wheel heet dat ;)

zie o.a. www.phpclasses.org voor een giga berg aan php objecten. (je leert meer uiteraard door je eigen stuff te gebruiken maar sommige dingen *wil* je gewoon niet opnieuw uitvinden zoals het verzenden van een html email met embedded images ofzo

Stop uploading passwords to Github!


Acties:
  • 0 Henk 'm!

  • _eXistenZ_
  • Registratie: Februari 2004
  • Laatst online: 19-09 01:03
PHP Smarty kan dit ook die lost het voor je op.

Dan hoef je alleen maar te typen

{html_select values=$values selected=$selected} en fixt hij er een dropdowntje van.

There is no replacement for displacement!


Acties:
  • 0 Henk 'm!

  • Brakkie
  • Registratie: Maart 2001
  • Niet online

Brakkie

blaat

_eXistenZ_ schreef op vrijdag 11 mei 2007 @ 00:04:
PHP Smarty kan dit ook die lost het voor je op.

Dan hoef je alleen maar te typen

{html_select values=$values selected=$selected} en fixt hij er een dropdowntje van.
Nogal overdreven om zo'n logge template engine te gebruiken om een selectbox te genereren. :o

Systeem | Strava


Acties:
  • 0 Henk 'm!

  • StruvusMaximus
  • Registratie: Februari 2000
  • Laatst online: 03-01 20:37
Ik heb een probleem met het gebruik van de clas hierboven.

De selectboxen geven geen waarden weer, echter hij maakt wel een aantal velden aan:
in de HTML broncode staan een x aantal select option waarbij de value en naam leeg zijn.

Het lijkt net of de array niet goed wordt opgebouwd, iemand enig idee?

ik gebruik als input de query2 : ' SELECT * FROM BEWERKINGEN'
Kan het mischien te maken hebben met het feit dat mijn tabel uit meer dan 2 kolommen bestaat?

Acties:
  • 0 Henk 'm!

  • P.O. Box
  • Registratie: Augustus 2005
  • Niet online
wat geeft select * from bewerkingen dan voor een resultaat (als je dat bv direct in de DB doet)?

Acties:
  • 0 Henk 'm!

  • StruvusMaximus
  • Registratie: Februari 2000
  • Laatst online: 03-01 20:37
alle gegevens worden dan wel weergegegeven:

als ik bijvoorbeeld uitvoer:

while ($row2 = mysql_fetch_assoc($query2))
{
echo $row2['bewerking_id '];
}

dan krijg ik netjes: 12345678910111121314 etc...

Acties:
  • 0 Henk 'm!

Verwijderd

markoh schreef op donderdag 10 mei 2007 @ 18:05:
PHP:
1
2
3
4
5
6
7
8
9
10
    <select name="select1" id="select1">
            <?php while ($row2 = mysql_fetch_assoc($query2)){?>
                <option value="<?php echo $row2['bewerking_id']; ?>
                "
                <?php if ($row2['bewerking_id'] == 52){
                    echo " selected";}  ?>
                >
                <?php echo $row2['machine']."   ->".format_number1($row2['prijs_ha']); ?>  
                </option>
                <?php } ?>
:/
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<select name="select1" id="select1">
<?php
while ($row2 = mysql_fetch_assoc($query2)){
  if ($row2['bewerking_id'] == 52)
    $doselect = ' selected';
  else
    $doselect = '';
  // een van deze regels
  echo '<option value="'.$row2['bewerking_id'].'"'.$doselect.'>'.$row2['machine'].'   ->'.format_number1($row2['prijs_ha'])."</option>\n";
  echo "<option value=\"{$row2['bewerking_id']}\"{$doselect}>{$row2['machine']}   ->"; echo(format_number1($row2['prijs_ha'])); echo "</option>\n";
  printf("<option value=\"%d\"%s>%s   ->%d</option>\n", $row2['bewerking_id'], $doselect, $row2['machine'], format_number1($row2['prijs_ha']));
}
?>
</select>

of gebruik desnoods eval.
Spring in ieder geval niet continu in en uit parsing mode (<?php...?>), maar blijf er in, zeker voor het weergeven van één karakter is het behoorlijk inefficiënt.
Ohja, en je kunt beter &gt; dan > gebruiken.

[ Voor 7% gewijzigd door Verwijderd op 11-05-2007 13:58 ]

Pagina: 1