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