在下拉列表中将Php Array转换为字符串转换错误

时间:2014-09-11 14:46:17

标签: php arrays forms mediawiki mediawiki-extensions

我目前正在尝试创建一个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;

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

我将不胜感激。

1 个答案:

答案 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> ');