-1

我目前正在尝试创建一个带有下拉列表和提交按钮的表单的 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 个功能 - 建立与数据库服务器的连接

2 函数 - 执行我的 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 函数内,我尝试调用第二个函数,而我的服务器向我抛出错误“数组到字符串转换”

如何让我的数组值显示在下拉列表中?还是有另一种方式在表单中显示它?

我将不胜感激任何帮助。

4

1 回答 1

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> ');
于 2014-09-11T14:53:14.797 回答