在php中从表单中选择对象

在php中从表单中选择对象,php,forms,class,object,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> </sele

好的,我有一个下拉菜单,用户应该在其中选择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>
我希望用户能够从下拉菜单中选择$redBall或$blueBall,但我不知道在选项部分中输入什么值。我试过了

value=$redBall
但那没用,有什么想法吗

编辑 我认为从目前的一些答案来看,我的问题有些混乱


我正在寻找一种将值设置为$redBall对象的方法,例如,在稍后的代码中,我将接受他们的选择并编写$\u POST['ball']->color。我不知道是否有更好的方法,但我正在使用的实际类有多个属性,我希望用户选择允许我像访问对象一样访问所有属性

如果需要精确编辑值,请执行以下操作:

<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>
在课堂上

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

Select元素只能发送文本,而对象通常不能用文本来描述。谢天谢地,我们做到了。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值传递给javascript,因为发送这样的对象并不常见。我不完全确定你的结果会是什么,但希望这对你有用。

你可以这样写下来:-

<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>

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

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>

您真的需要option元素的name属性吗?把名字改成值,你会用另一个球吗?如果没有,为什么首先要创建两个呢$值=新球$_POST['Ball'];如果你想将可以使用的颜色限制在一个给定的集合中,那么首先使用这些颜色的数组进行检查。谢谢,但我认为你误解了这个问题。我正在寻找一种将值设置为$redBall对象的方法,例如,在稍后的代码中,我将接受他们的选择并编写$\u POST['ball']->color。我不知道是否有更好的方法可以做到这一点,但我正在使用的实际类有多个属性,我希望用户选择允许我像访问对象一样访问所有属性。我现在明白你的意思了。我道歉。我会更新我的答案。
<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>
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();