好的,所以我有一个下拉菜单,用户应该在其中选择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>
球在另一个文件中的定义如下:
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的值为BE,例如,稍后在代码中,我想选择它们并编写$_POST['ball']->颜色。我不知道是否有更好的方法可以做到这一点,但我正在处理的实际类有多个属性,我希望用户选择允许我访问所有属性,就像访问对象一样
根据您对另一个答案的评论,尝试执行以下操作:
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();
如果您需要精确地编辑值,请执行以下操作:
<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,因为发送这样的对象并不常见。我不完全确定你的结果会是什么,但希望这对你有用。
您可以这样写:-
<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>