以 oo 方式使用数据库条目填充 select
Populate select with database entries the oo way
我的数据库table
TABLE `dog_types` (
`dog_type_id` int(11)
`dog_type_name` varchar(64)
我想在 select 菜单中提供 dog_type_name 条目。
我的尝试
Class Sell {
public static function getAllDogTypes()
{
$database = DatabaseFactory::getFactory()->getConnection();
$sql = "SELECT dog_type_name FROM dog_types";
$query = $database->prepare($sql);
$query->execute(array());
// fetchAll() is the PDO method that gets all result rows
return $query->fetchAll();
}
public static function viewSelect($name = "select") {
$html = "<select name='$name'>\n";
foreach ($query as $key => $val) {
$html .= "<option value='$key'>$val</option>\n";
}
$html .= "</select>\n";
return $html;
}
}
<?php echo Sell::viewSelect(); ?>
我的输出
<select>
Notice: Undefined variable: query
Warning: Invalid argument supplied for foreach()
</select>
这两个功能各自发挥作用。我就是不知道怎么把它们放在一起。
正如您已经猜到的那样,我对所有这一切都非常陌生,非常感谢任何帮助!
根据新手的建议,我的代码如下所示:
public static function getAllDogTypes()
{
$database = DatabaseFactory::getFactory()->getConnection();
$sql = "SELECT * FROM dog_types";
$query = $database->prepare($sql);
$query->execute(array());
// fetchAll() is the PDO method that gets all result rows
return $query->fetchAll();
}
public static function viewSelect($name = "select") {
$query=Sell::getAllDogTypes();
$html = "<select name='$name'>\n";
foreach ($query as $key => $val) {
$html .= "<option value='$key'>$val</option>\n";
}
$html .= "</select>\n";
return $html;
}
<?php echo Sell::viewSelect(); ?>
var_dump 查询显示数据库条目:
Dog_type: array(8) { [0]=> object(stdClass)#8 (2) { ["dog_type_id"]=> string(1) "1" ["dog_type_name"]=> string(13) "Affenpinscher" } [1]=> object(stdClass)#9 (2) { ["dog_type_id"]=> string(1) "2" ["dog_type_name"]=> string(12) "Afghan Hound" } [2]=> object(stdClass)#10 (2) { ["dog_type_id"]=> string(1) "3" ["dog_type_name"]=> string(4) "Aidi" } [3]=> object(stdClass)#11 (2) { ["dog_type_id"]=> string(1) "4" ["dog_type_name"]=> string(16) "Airedale Terrier" } [4]=> object(stdClass)#12 (2) { ["dog_type_id"]=> string(1) "5" ["dog_type_name"]=> string(6) "Akbash" } [5]=> object(stdClass)#13 (2) { ["dog_type_id"]=> string(1) "6" ["dog_type_name"]=> string(5) "Akita" } [6]=> object(stdClass)#14 (2) { ["dog_type_id"]=> string(1) "7" ["dog_type_name"]=> string(13) "Alano Espanol" } [7]=> object(stdClass)#15 (2) { ["dog_type_id"]=> string(1) "8" ["dog_type_name"]=> string(16) "Alaskan Klee Kai" } }
错误信息
Notice: Undefined variable: query
Catchable fatal error: Object of class stdClass could not be converted to string
首先改变
public static function viewSelect($name = "select",$query="") {
$sql = "SELECT dog_type_id,dog_type_name FROM dog_types";
因为您应该在选项值中传递 dog_type_id。
首先调用这个
<?php $query=Self::getAllDogTypes(); ?>
然后调用
<?php echo Self::viewSelect($query); ?>
将此行添加到第二个函数的开头:
$query=Sell::getAllDogTypes(); //从 getAlldogTypes 函数中获取 $query 的值,该函数存在于此 class.
$query returns 对象数组,所以你需要一个嵌套的 foreach 循环
$html = "<select name='$name'>\n";
foreach ($query as $obj) {
foreach ($obj as $key=>$val)
$html .= "<option value='$key'>$val</option>\n";
}
}
$html .= "</select>\n";
return $html;
}
我的数据库table
TABLE `dog_types` (
`dog_type_id` int(11)
`dog_type_name` varchar(64)
我想在 select 菜单中提供 dog_type_name 条目。
我的尝试
Class Sell {
public static function getAllDogTypes()
{
$database = DatabaseFactory::getFactory()->getConnection();
$sql = "SELECT dog_type_name FROM dog_types";
$query = $database->prepare($sql);
$query->execute(array());
// fetchAll() is the PDO method that gets all result rows
return $query->fetchAll();
}
public static function viewSelect($name = "select") {
$html = "<select name='$name'>\n";
foreach ($query as $key => $val) {
$html .= "<option value='$key'>$val</option>\n";
}
$html .= "</select>\n";
return $html;
}
}
<?php echo Sell::viewSelect(); ?>
我的输出
<select>
Notice: Undefined variable: query
Warning: Invalid argument supplied for foreach()
</select>
这两个功能各自发挥作用。我就是不知道怎么把它们放在一起。
正如您已经猜到的那样,我对所有这一切都非常陌生,非常感谢任何帮助!
根据新手的建议,我的代码如下所示:
public static function getAllDogTypes()
{
$database = DatabaseFactory::getFactory()->getConnection();
$sql = "SELECT * FROM dog_types";
$query = $database->prepare($sql);
$query->execute(array());
// fetchAll() is the PDO method that gets all result rows
return $query->fetchAll();
}
public static function viewSelect($name = "select") {
$query=Sell::getAllDogTypes();
$html = "<select name='$name'>\n";
foreach ($query as $key => $val) {
$html .= "<option value='$key'>$val</option>\n";
}
$html .= "</select>\n";
return $html;
}
<?php echo Sell::viewSelect(); ?>
var_dump 查询显示数据库条目:
Dog_type: array(8) { [0]=> object(stdClass)#8 (2) { ["dog_type_id"]=> string(1) "1" ["dog_type_name"]=> string(13) "Affenpinscher" } [1]=> object(stdClass)#9 (2) { ["dog_type_id"]=> string(1) "2" ["dog_type_name"]=> string(12) "Afghan Hound" } [2]=> object(stdClass)#10 (2) { ["dog_type_id"]=> string(1) "3" ["dog_type_name"]=> string(4) "Aidi" } [3]=> object(stdClass)#11 (2) { ["dog_type_id"]=> string(1) "4" ["dog_type_name"]=> string(16) "Airedale Terrier" } [4]=> object(stdClass)#12 (2) { ["dog_type_id"]=> string(1) "5" ["dog_type_name"]=> string(6) "Akbash" } [5]=> object(stdClass)#13 (2) { ["dog_type_id"]=> string(1) "6" ["dog_type_name"]=> string(5) "Akita" } [6]=> object(stdClass)#14 (2) { ["dog_type_id"]=> string(1) "7" ["dog_type_name"]=> string(13) "Alano Espanol" } [7]=> object(stdClass)#15 (2) { ["dog_type_id"]=> string(1) "8" ["dog_type_name"]=> string(16) "Alaskan Klee Kai" } }
错误信息
Notice: Undefined variable: query
Catchable fatal error: Object of class stdClass could not be converted to string
首先改变
public static function viewSelect($name = "select",$query="") {
$sql = "SELECT dog_type_id,dog_type_name FROM dog_types";
因为您应该在选项值中传递 dog_type_id。
首先调用这个
<?php $query=Self::getAllDogTypes(); ?>
然后调用
<?php echo Self::viewSelect($query); ?>
将此行添加到第二个函数的开头:
$query=Sell::getAllDogTypes(); //从 getAlldogTypes 函数中获取 $query 的值,该函数存在于此 class.
$query returns 对象数组,所以你需要一个嵌套的 foreach 循环
$html = "<select name='$name'>\n";
foreach ($query as $obj) {
foreach ($obj as $key=>$val)
$html .= "<option value='$key'>$val</option>\n";
}
}
$html .= "</select>\n";
return $html;
}