|
автор: Maloy (06.05.2005 в 10:14) |
|
| Необходимо создать модуль который будет вызываться в корпоративном сайте. Пишется один класс в одином файле, в конце инициализация класса. С целью уменьшения кол-ва кода решил написать функцию создания формы с необходимым содержанием.
function print_form($tbl)
{
$row_bk = array ("Імя автора", "Назва видання", "Видавництво", "Тип видання", "Рубрика", "Інвентарний №", "Ціна", "Статус екземпляра", "Дата надходження", "Абонент");
$nm_bk = array ("author", "title", "izd_name", "tip_name", "rub_name", "invent", "price", "stat", "date", "abon");
$row_us = array ("Імя", "Прізвище", "Таб. номер", "Идентифікаційний №", "Посада", "Відділ", "№ паспорта", "Адреса проживання", "Телефон", "Дата народження");
$nm_us = array ("name", "fname", "tab_number", "ident", "dolzhnost", "otdel", "passp_num", "adres", "phone", "date_birth");
if ($tbl == 31 ) { $row = $row_bk; $nm = $nm_bk;}
elseif ($tbl == 32 ) { $row = $row_us; $nm = $nm_us;}
elseif ($tbl == 33 ) { $row = $row_iz; $nm = $nm_iz;}
print "<FORM METHOD=\"post\" ACTION=\"index.php\">";
print "<TABLE BORDER=\"1\"><TR>";
print "<TD colspan=2><b>$row[0]</TD><TD colspan=2><b>$row[1]</TD></TR>";
print "<TR><TD colspan=2>";
print "<input name=\"".$nm[0]."\" type=\"text\" maxlength=\"140\" size=70>";
print "</TD><TD colspan=2>";
print "<input name=\"".$nm[1]."\" type=\"text\" maxlength=\"140\" size=70></TD></TR>";
print "<TR><TD>".$row[2]."</TD><TD>".$row[3]."</TD><TD>".$row[4]."</TD><TD>".$row[5]."</TD></TR>";
print "<TR><TD><input name=\"".$nm[2]."\" type=\"text\" maxlength=\"30\" size=30>";
print "</TD><TD><input name=\"".$nm[3]."\" type=\"text\" maxlength=\"20\" size=30>";
print "</TD><TD><input name=\"".$nm[4]."\" type=\"text\" maxlength=\"30\" size=30>";
print "</TD><TD><input name=\"".$nm[5]."\" type=\"text\" maxlength=\"12\" size=30></TD></TR><TABLE>";
print "<input type=\"hidden\" name=\"st\" value=31>";
echo '<p><input type="submit" value="Шукати"></form>';
}
|
Функция вызываеться:
elseif ($st == 31)
{
echo "<H2>Видання</H2>";
$this -> print_form($st);
echo "Author = "$author;
.
|
Фрма на странице рисуется нормально, при просмотре html кода, все имена в форме правильные. Но выводится Author=. Получается что все переменные так и остаются внутри функции и не передаются глобально? Как можно это обойти? Если вынести кнопку из функции, поможет?Не хочется постоянно писать один и тот же код... | |
|
|
|
|
|
|
|
для: Maloy
(06.05.2005 в 10:14)
| | Попробуй использовать сессии
session_start(); - в начале всего кода
потом $_SESSION['author'] - глобальная переменная, по идеи она не должна находится только для функции... | |
|
|
|
|
автор: Maloy (06.05.2005 в 10:36) |
|
|
для: cernos
(06.05.2005 в 10:27)
| | Да, без глобальной переменной тут не обойтись. Можно попробовать $_GLOBALS['author'], это немного путает. Я думаю стоит создать массив, описать его в начале класса и обращаться к нему $this -> array... Просто при нажатии кнопки функция завершает работу и нет возможности записать переменные в глобальный массив.
Хотя с другой стороны, оно только рисует функцию... | |
|
|
|
|
автор: Maloy (06.05.2005 в 10:51) |
|
|
для: Maloy
(06.05.2005 в 10:14)
| | Чего и следовало ожидать
$test1 = 1;
print "<input type=\"hidden\" name=\"st\" value=31>";
echo '<p><input type="submit" value="Шукати"></form>';
echo "Test1 = ".$test1." Author = ".$author;
|
Author=
и все... Я так понял отдельно форму для передачи данных создать не удастся... | |
|
|
|
|
|
|
|
для: Maloy
(06.05.2005 в 10:14)
| | А как функция увидит значения, которые ты передаешь? Если хочешь глобальными переменными, то и внутри функции объявляй их глобально, тогда все будет работать. | |
|
|
|
|
автор: Maloy (06.05.2005 в 11:11) |
|
|
для: XPraptor
(06.05.2005 в 11:03)
| | Это же форма, метод передачи POST.
Дело в том, что тут еще одна хрень, которая жить не дает. Есть файл, в котором описан класс и функция init. Из другого файла index.php, происходит вызов этой функции, где передаеться 4 параметра управления. Соотвественно данные из формы передавать нужно в index.php, а уже оттуда инициализировать все остальное. Тогда соответственно нужно ввести не 4 параметра, а 24. Или если их сделать глобальными, то они без проблем будут доступны в любой части кода? Как бы не запутаться.... | |
|
|
|
|
автор: Maloy (06.05.2005 в 11:47) |
|
|
для: Maloy
(06.05.2005 в 10:14)
| | А нельзя передавать данные из формы, прямо в массив данных? Не в другую страницу, а прямо в переменные? | |
|
|
|
|
|
|
|
для: Maloy
(06.05.2005 в 10:14)
| | А что-то в функции не наблюдается переменной $author?
Вы можете объявить переменные и массивы функции глобальными, если объявите их с атрибутом GLOBAL
| |
|
|
|
|
автор: Maloy (06.05.2005 в 13:07) |
|
|
для: cheops
(06.05.2005 в 12:46)
| | Функция только рисует форму, подставляя нужные значения в поле name, после уже, они пересылаются далее. Можно ли из этой формы, перенести данные прямо внутри функции в этот массив. Щас я попробую через глобал...
Тогда еще вопрос, как через массив перемнных обращаться к их значениям... У меня же массив $t_bk=array("author","title"...). А потом создается пременная $author. Можно ли к ней обратиться через массив. Чтоб загнать это в цикл. Типа:
do
$i++;
$query = "SELECT * FROM $table WHERE $t_bk[$i] = ^t_bk[$i];
while ($i<10)
|
| |
|
|
|
|
автор: Maloy (06.05.2005 в 13:11) |
|
|
для: Maloy
(06.05.2005 в 13:07)
| | точнее...
$$t_bk[$i] = $t_bk[$i];
или ...
$t_bk[$i] = $$t_bk[$i]; | |
|
|
|
|
автор: Maloy (06.05.2005 в 13:27) |
|
|
для: Maloy
(06.05.2005 в 10:14)
| | Все работает. Если объявить global $auth; ,то внутри функции строки:
echo "Author = ".$$nm_bk[0];
echo " Author = ".$auth;
Дают одинаковый результат, значение переменной $auth.
Спасибо всем, кто не дал впасть в отчаяние.... :) | |
|
|
|