Php Ошибка преобразования массива в строку в выпадающем списке

В настоящее время я пытаюсь создать расширение 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 функция - показывает html-форму mediawiki с выпадающим списком и отправляет:

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 я пытаюсь вызвать 2-ю функцию, в то время как мой сервер выдает мне ошибку "Преобразование массива в строку"

Как я могу получить значения моего массива в выпадающем списке? или есть другой способ отобразить это в форме?

Буду признателен за любую помощь.

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> ');
Другие вопросы по тегам