好的,所以我有一个下拉菜单,用户应在其中选择一个在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。我不知道是否有更好的方法可以执行此操作,但是我正在使用的实际类具有多个属性,并且我希望用户选择允许我像访问对象一样访问所有这些对象
答案 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>