我在PHP页面上有一个HTML5表单。某些表单元素包含PHP代码,例如使用选项填充下拉菜单。每个菜单中都有不同的选项,但它们都由相同的PHP代码填充(称为query.php)。
我想将HTML元素的名称传递给query.php以确定要执行的查询。 query.php通常编码:
<?php
$connection = pg_connect(...);
$query = "SELECT name FROM table ORDER BY name ASC;";
$results = pg_query($connection, $query);
$rows = pg_num_rows($results);
for ($i=0; $i < $rows; $i++) {
?>
<option><?php echo pg_fetch_result($results, $i, 0); ?></option>
<?php
}
?>
我希望$query
中的'table'是来自HTML的变量。以下是HTML的示例行:
<p>Select a City: <select name="city"><?php include("query.php"); ?></select>
我一直在尝试使用HTTP GET方法将{query.php'替换为query.php?table=$this.name
。我知道我应该能够在query.php中使用$_GET['table']
并获取传递的值,但我不知道获取HTML元素名称的函数。在HTML标记中使用什么函数时,将返回HTML元素的名称?例如,如果我在上面的HTML中使用query.php?table=$this.name
,则query.php中的$_GET['table']
应返回“city”。只有$ this.name才是正确的功能。
答案 0 :(得分:2)
我建议创建一个函数来执行此操作:
<?php include("query.php"); ?>
<p>Select a City: <select name="city"><?php echo queryFunction("city"); ?></select></p>
在query.php中:
<?php
function queryFunction($table) {
$connection = pg_connect(...);
$query = "SELECT name FROM $table ORDER BY name ASC;";
$results = pg_query($connection, $query);
$rows = pg_num_rows($results);
$string = "";
for ($i=0; $i < $rows; $i++) {
$string = $string . "<option>" . pg_fetch_result($results, $i, 0) . "</option>";
}
return $string;
}
?>
我很确定除非您自己提供,否则无法获取选择框的名称。如果这是用JavaScript完成的,那就可能了。
答案 1 :(得分:1)
通常的做法是:
在query.php中:
<?php
function generateTags() // you can put arguments here
{
$connection = pg_connect(...);
$query = "SELECT name FROM table ORDER BY name ASC;";
$results = pg_query($connection, $query);
$rows = pg_num_rows($results);
for ($i=0; $i < $rows; $i++) {
echo "<option>".pg_fetch_result($results, $i, 0)."</option>";
}
}
?>
然后在php html中:
<?php include("query.php"); ?><!-- do this just once at the beginning -->
<p>Select a City: <select name="city"><?php generateTags(/* here could be your arguments */); ?></select>
答案 2 :(得分:0)
您无法在PHP中访问html标签,您必须在调用query.php
时手动编写表名。有关更好的解决方案,如何使用该文件中的代码,请查看其他答案。
(btw。$this
仅用于处理对象,访问对象属性的语法在PHP中为$this->name
,而不是$this.name
,但由于此处没有对象,因此是无关紧要的;)