Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Форма в функции
 
 автор: 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=. Получается что все переменные так и остаются внутри функции и не передаются глобально? Как можно это обойти? Если вынести кнопку из функции, поможет?Не хочется постоянно писать один и тот же код...

   
 
 автор: cernos   (06.05.2005 в 10:27)   письмо автору
 
   для: 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=
и все... Я так понял отдельно форму для передачи данных создать не удастся...

   
 
 автор: XPraptor   (06.05.2005 в 11:03)   письмо автору
 
   для: 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)
 

А нельзя передавать данные из формы, прямо в массив данных? Не в другую страницу, а прямо в переменные?

   
 
 автор: cheops   (06.05.2005 в 12:46)   письмо автору
 
   для: Maloy   (06.05.2005 в 10:14)
 

А что-то в функции не наблюдается переменной $author?
Вы можете объявить переменные и массивы функции глобальными, если объявите их с атрибутом GLOBAL
<?php
  
GLOBAL $author;
?>

   
 
 автор: 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.
Спасибо всем, кто не дал впасть в отчаяние.... :)

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования