从select元素中检索PHP对象

时间:2015-02-11 13:40:40

标签: php mysql

我编写了一个代码来创建一个带有PHP Object的select:

<?php

class Modulo  {

    var $nD;
    var $nC;
    var $nA;

    function __construct($nD,$nC,$nA) {
        $this->nD=$nD;
        $this->nC=$nC;
        $this->nA=$nA;
    }
    function toString(){
        return $this->nD."-".$this->nC."-".$this->nA."<br>";
    }
}

&GT;

以下是构建select的方法:

function loadModuleValid(){
    $mod1 = new Modulo(4,3,3);
    $mod2 = new Modulo(5,3,2);
    $mod3 = new Modulo(4,4,2);
    $mod4 = new Modulo(5,4,1);
    $mod5 = new Modulo(4,5,1);
    $mod6 = new Modulo(3,5,2);
    $mod7 = new Modulo(3,4,3);
    $mods = array($mod1,$mod2,$mod3,$mod4,$mod5,$mod6,$mod7);
    $i = 0;
    print "<h3>Seleziona il modulo</h3>";
    print "<select id=\"d1\">";
    foreach ($mods as $key ) {

                  print "<option value=\"{$i}\">{$key->toString()}</option>";
                $i++;
    }
     print "</select>";

}

现在,当用户按下按钮时,我必须由用户检索所选对象。我能怎么做 ?我希望实际的对象不仅仅是它的价值!

2 个答案:

答案 0 :(得分:1)

你不能通过一个表单传递一个对象...如果你要序列化它,你可以传递字符串,然后反序列化它,但你不想这样做。

您要做的是使用标识符引用该对象:

function loadModuleValid(){
    array(
       'mod1' => new Modulo(4,3,3),
       'mod2' => new Modulo(5,3,2),
       // your other objects
    )

    $i = 0;
    print "<h3>Seleziona il modulo</h3>";
    print "<select id=\"d1\">";
    foreach ($mods as $key => $object ) {

                  print "<option value=\"{$key}\">{$object->toString()}</option>";
                $i++;
    }
     print "</select>";

}

然后在后端,您将根据mod1或任何数组键获取对象。但是,这需要在可以再次获取它们的位置创建这个对象数组。

让我们举一个例子:

function getModulos($id = null) {
    $mods = array(
       'mod1' => new Modulo(4,3,3),
       'mod2' => new Modulo(5,3,2),
       // your other objects
    );

    if (null !== $id) {
       return isset($mods[$id]) ? $mods[$id] : false;
    } else {
      return $mods;
    }
}


function loadModuleValid(){
    $mods = getModulos();

    $i = 0;
    print "<h3>Seleziona il modulo</h3>";
    print "<select id=\"d1\" name=\"modulo\">";
    foreach ($mods as $key => $object ) {

                  print "<option value=\"{$key}\">{$object->toString()}</option>";
                $i++;
    }
     print "</select>";

}

// this would be an example of your form handling

if (isset($_POST['modulo'])) {
   $modulo = getModulos($_POST['modulo']);
}

答案 1 :(得分:0)

有一个黑暗的技巧,你可以序列化你的对象:

print "<option value=\"" . serialize($key) . "\">{$key->toString()}</option>";

然后将其反序列化以检索您的对象:

$mod = unserialize($_POST['yourSelectName']);