我目前正在尝试创建一个mediawiki扩展,其中包含一个带有下拉列表和提交按钮的表单。 在这种形式中,我想在下拉列表中读取所有数据库对象(表)。 如果我将它作为单个PHP脚本运行它工作正常,它具有以下语法。
<?php
...
$stid = oci_parse($conn,$query);
oci_execute($stid);
?>
//Form
<form method="get" action="generateScript.php">
<select name="getTable">
</form>
<?php
while ($row = oci_fetch_array($stid)) {
echo "<option value=".$row[0].">".$row[0];
}
...
对于mediawiki扩展,您必须将其放在函数中并使用mediawiki核心全局变量进行输出。
因此,我创建了3个函数:
1功能 - 与DB服务器建立连接
2 function - 执行我的SQL查询并将结果返回到数组中:
public function readData () {
global $wgOracleUser;
//@$_SESSION['getTable'] = $getTableValue;
$ora_conn = $this -> getConnect ();
$schema_name = strtoupper($wgOracleUser);
$stid = oci_parse($this -> getConnect()," SELECT table_name
FROM dba_tables
WHERE owner ='" .$schema_name ."'
ORDER BY table_name");
if(!$ora_conn) {
return "No connection";
}
else {
oci_execute($stid);
while ($row = oci_fetch_array($stid)) {
//fetches into an array
$values[] = $row;
return $values;
//echo var_dump($values);
}
//Close Oracle connection
oci_close($ora_conn);
}
}
3功能 - 使用下拉列表显示mediawiki html-form并提交:
function showForm() {
global $wgScript, $wgOut;
$msgTabList = $this -> readData();
$wgOut->addHTML('
<tr style="margin-top: 2em">
<td align="right">' . $msgSelTable . '</td>
<td> <select name="formTables"> <option value="">'.$msgTabList.'</option>
</select></td>
</tr>
<tr style="margin-top: 2em">
<td align="right"></td>
<td style="padding-top: 1em" align="right">
<input type="submit" name="Generate wiki script" ' .
'value="' . $msgSubmitButton . '" />
</td>
</tr> :);
在3函数内部,我尝试调用第二个函数,而我的服务器抛出一个错误&#34;数组到字符串转换&#34;
如何在下拉列表中显示我的数组值? 还是有另一种方式在表单中显示它?
我将不胜感激。
答案 0 :(得分:1)
“数组到字符串转换”错误是因为您在字符串内部连接数组,而构建下拉列表的正确方法是遍历数组并构建选项,如:
function showForm() {
global $wgScript, $wgOut;
$msgTabList = $this -> readData();
$options = "";
foreach ($msgTabList as $element) {
$options .= "<option value='$element'>$element</option>";
}
$wgOut->addHTML('
<tr style="margin-top: 2em">
<td align="right">' . $msgSelTable . '</td>
<td>
<select name="formTables"> ' . $options . '
</select>
</td>
</tr>
<tr style="margin-top: 2em">
<td align="right"></td>
<td style="padding-top: 1em" align="right">
<input type="submit" name="Generate wiki script" ' .
'value="' . $msgSubmitButton . '" />
</td>
</tr> ');