从php中的表单选择对象

时间:2018-07-12 18:37:01

标签: php forms class object

好的,所以我有一个下拉菜单,用户应在其中选择一个在php项目中其他位置定义的对象。我尝试了以下方法:

<form method="post">
    <select name="ball">
        <option name="red" value=?>Red Ball</option>
        <option name="blue" value=?>Blue Ball</option>
    </select>
    <input type="submit">
</form>

其中Ball是通过以下方式在另一个文件中定义的:

class Ball {
     public function __construct($color) {
           $this->color=$color;
      }

     public function getColor() {
           return $this->color;
     }
}
$redBall = new Ball("red");
$blueBall = new Ball("blue");

我希望用户能够从下拉菜单中选择$ redBall或$ blueBall,但是我不知道在选项部分中为“值”输入什么。我尝试过

value=$redBall

但这没用,有什么主意吗?

编辑 我认为到目前为止,我的一些回答对我的要求有些困惑。

我正在寻找一种使值成为对象$ redBall的方法,例如,稍后在代码中,我要选择它们并编写$ _POST ['ball']-> color。我不知道是否有更好的方法可以执行此操作,但是我正在使用的实际类具有多个属性,并且我希望用户选择允许我像访问对象一样访问所有这些对象

3 个答案:

答案 0 :(得分:3)

根据您对另一个答案的评论,尝试执行以下操作:

class Ball {
    var $color;

    public function __construct($color) {
        $this->color=$color;
    }

    public function getColor() {
        return $this->color;
    }
}

$balls = array(
    "red" => new Ball("red"),
    "blue" => new Ball("blue")
);

您的表单应如下所示

<form method="post">
    <select name="ball">
        <option value="red">Red Ball</option>
        <option value="blue">Blue Ball</option>
    </select>
    <input type="submit">
</form>

然后,当您处理提交的表单时,就这样做

$selectedBall = $balls[$_POST["ball"]];
echo $selectedBall->getColor();

答案 1 :(得分:2)

如果您恰恰需要编辑该值,请执行以下操作:

<form method="post">
    <select name="ball">
        <option name="red" value = '<?php echo $redball->color;  ?>' > Red ball</option>
        <option name="blue" value = '<?php echo $blueball->color;  ?>' >Blue ball</option>
    </select>
    <input type="submit">
</form>

我认为您也需要修正球类,您可能需要添加:

public $color;

在班上。

编辑:-问题需要通过选择控件发送完整对象。 -

Select元素只能发送文本,而对象不能完全用文本描述。幸运的是,我们有JSON。 JSON使我们可以获取一个PHP对象并将其及其值转换为文本。

我们必须将对象转换为JSON字符串,如下所示:

$blueJSON = json_encode($blueball);
$redJSON = json_encode($redball);

然后使选择项的值部分等于这些新变量。

<option name="red" value = '<?php echo $redJSON;  ?>' > Red ball</option>
<option name="blue" value = '<?php echo $blueJSON;  ?>' >Blue ball</option>

无论您在哪里使用表单提交都收到这些对象,请使用json_decode()对其进行解码;

$newRedBall = json_decode($_POST['red']);
$newBlueBall = json_decode($_POST['blue']);

使用此方法,您可以发送任何对象,而不必在函数开始时预先定义对象。在处理用户输入时很有帮助。

警告:

我通常将JSON值传递给javascript,因为发送这样的对象不是很常见。我不确定您的结果如何,但希望这对您有用。

答案 2 :(得分:1)

您可以像下面这样写下它:-

<form method="post">
    <select name="ball">
        <option name="red" value="<?=$redBall->getColor();?>">Red Ball</option>
        <option name="blue" value="<?=$blueBall->getColor();?>">Blue Ball</option>
    </select>
    <input type="submit">
</form>