从php中的表单中选择一个对象



好的,所以我有一个下拉菜单,用户应该在其中选择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>

相关内容

  • 没有找到相关文章

最新更新