Перейти к содержимому

Сервис обмена электронных валют


Передача данных между страницами.

#1 RussiaStudent

RussiaStudent
  • Пользователь
  • 19 сообщений
  • Репутация: 0
0

Отправлено 18 Декабрь 2008 - 17:14

Я уже месяц изучаю PHP, дочитываю свою первую книгу по этому языку, но в этой книге толком не написано как передаются данные между страницами... В книге только показана передача данных через форму методами GET и POST, да и в них я толком разобраться не сумел.
Вот к примеру есть у меня страница index.php с формой и 3 полями данных
...
<form method="GET" action="file.php">
   <input type="text" name="pole1">
   <input type="text" name="pole2">
   <input type="text" name="pole3">
</form>
...
Почему при передаче хоть методом GET хоть POST у друга данные передаются, а у меня нет?
Вот файл file.php
<?
echo "поле1:".$pole1;
echo "поле2:".$pole2;
echo "поле3:".$pole3;
?>

В книжке вообще мало что написано, есть примерчик, но он не работает...
И всё же я очень бы хотел узнать, какие методы передачи данных существуют :)

 

 

  • 0

#2 KURT [197BD]

KURT [197BD]
  • Пользователь
  • 31 сообщений
  • Репутация: 0

Отправлено 18 Декабрь 2008 - 17:23

потому что у тебя опция "register_globals" в конфигурационном файле php.ini установлена в "off".

в твоем случае лучше использовать массивы $_POST и $_GET

<?
echo "поле1:" . $_GET['pole1'];
echo "поле2:" . $_GET['pole2'];
echo "поле3:" . $_GET['pole3'];
?>



можешь передавать значения переменных через адрессную строку (это тот же GET метод). При этом, после наименования файла, к котрому обращаешься, после символа "?" перечисляются переменные и их значения (после сивола "="). можно передавать несколько переменных сразу. Для этого, необходимо их отделить друг от друга символом "&".
Наример, ссылка
<a href="index.php?page=news&id=12">news</a>
будет передавать в файл index.php переменную "page" со значением "news" и переменную "id" со значением "12". Значение переменных доступны в массиве $_GET:
$_GET['news'], $_GET['id'] ...
  • 0

#3 RussiaStudent

RussiaStudent
    Topic Starter
  • Пользователь
  • 19 сообщений
  • Репутация: 0

Отправлено 18 Декабрь 2008 - 17:27

Оо не знал... Спасибо, что открыл мне глаза. То есть ты хочешь сказать, что переданные данные находятся в данных массивах?
Тогда чтобы мне использовать данные переданные методом POST или GET мне нужно обращаться к ним так?
$_GET['имя'] или $_POST['имя']
Просто я думал раньше, что переменные имеют тоже имя, что и при передаче из формы...
  • 0

#4 KURT [197BD]

KURT [197BD]
  • Пользователь
  • 31 сообщений
  • Репутация: 0

Отправлено 18 Декабрь 2008 - 17:37

Просто я думал раньше, что переменные имеют тоже имя, что и при передаче из формы...


это возможно, при включенной опции "register_globals=on". Но это не безопасно =)
  • 0

#5 RussiaStudent

RussiaStudent
    Topic Starter
  • Пользователь
  • 19 сообщений
  • Репутация: 0

Отправлено 18 Декабрь 2008 - 17:41

Спасибо и всё таки... Как же ещё можно передавать данные на PHP? Ведь если бы мы могли передавать данные только через формы, то PHP был бы очень примитивен. Искал в интернете по данному вопросу. Было что-то сказано про URL сайта, ещё что-то про cookies и какие-то сессии...
Вы бы не могли мне разъяснить поточнее, что каждое из этих слов значит? И лучше с маленким примерчиком для закрепления... Буду очень благодарен :)
  • 0

#6 KURT [197BD]

KURT [197BD]
  • Пользователь
  • 31 сообщений
  • Репутация: 0

Отправлено 18 Декабрь 2008 - 17:52

про URL я написал выше =)
про остальное напишу попозже, если никто не опередит :)
  • 0

#7 Vialls

Vialls
  • Пользователь
  • 581 сообщений
  • Репутация: 1

Отправлено 18 Декабрь 2008 - 18:55

Cookie - это массив данных, который хранится у пользователя на компьютера (в браузере).
Что бы установить Cookies в PHP, нужно использовать функцию setcookie():
<?php
  setcookie("name", "value"); // Устанавливаем Cookie-переменную с именем name, и значением - value
?>
Что бы считать куки, нужно обратится к массиву $_COOKIE:
<?php
  if (!empty($_COOKIE["name"])) // Если переменная не пустая, то
	echo $_COOKIE["name"]; // Вывести, значение куки с именем name
?>

Сессии - это более крутой вид передачи данных, который работает примерно так-же как Cookies, но может работать с выключенными Cookies в браузере (скрыто, через GET-запросы и др., точно не знаю - не интересовался).
Что бы использовать сессии нужно их "активировать" с помощью функции session_start(), для установки значений и доступа к ним, используем массив $_SESSION:
<?php
  // Page1
  session_start();
  $_SESSION["name"] = "value";
?>
<?php
  // Page2
  session_start();
  if (!empty($_SESSION["name"]))
	echo $_SESSION["name"];
?>
Но сессии имеют небольшой минус, при зыкрытии браузера, все данные удаляются, в то время как у Cookies - нет.

Кстате, советую на php.net почитать про функцию setcookie(), там много еще дополнительных параметров, например - время автоматического удаления переменной и др.

P.S.
Опередил :)

К автору:
Сожгите свою книгу, и купите нормальную :P
  • 0

#8 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 18 Декабрь 2008 - 19:19

Методы передачи данных с одной страницы на другую

Метод передачи данных формы
(методы GET или POST, есть ещё парочка, но о них не будем)

У нас есть файл-передатчик(transmitter) 1.php
.............
<form method="[GET или POST]" action="2.php">
   <input type="text" name="pole1"> Текстовое поле <br>
   <input type="password" name="pole2"> Поле для ввода пароля <br>
   <input type="checkbox" name="pole3" value="[значение]"> Чекбокс(галка) <br>

   Радиокнопки
   <input type="radio" name="pole4" value="[значение 1]"> - вариант1 
   <input type="radio" name="pole4" value="[значение 2]">  - вариант2
</form>
.............
И есть файл-приемник(receiver) 2.php
<?php
echo $_GET['pole1']; //выдаст значение введённое в текстовое поле
echo $_GET['pole2']; //выдаст значение введённое в поле для ввода пароля
echo $_GET['pole3']; //Если галка стоит вернёт: [значение], иначе: пустое значение ""
e[b][/b]cho $_GET['pole4']; //Вернёт значение выбранного пункта радиокнопки ([значение 1] или [значение 2])

/* С POST тоже самое */
?>
Принципиальное отличие GET и POST:

GET передаётся вместе с URL страницы приёмника. Цепляется к ней сразу после имени в виде перечислений
? - означает начало передачи данных
& - разделяет перечисления
= - приравнивает к имени переменной значение
URL(адрес): 2.php?pole1=[значение]&pole2=[значение]&pole3=[значение]&pole4=[значение]
Какие-то значения могут быть пустыми, это значит, что им не присвоили никакого значения.

POST предаётся другой странице по средством прикрепления данных к заголовком отправки запроса HTTP.
Поэтому как передаются данные будет не видно, да и какие данные. Обычно используют именно его, особенно при работе с формой загрузки, когда нужно передавать файл в виде бинарных данных.

Метод передачи данных через URL(адресную строку)
Вот к приеру у нас есть обычная ссылка на странице
<a href="./file.php">Ссылка</a>
Нажав на которую пользователь попадёт на страницу с именем file.php.
Тогда мы можем воспользоваться всё теме методом передачи GET и сформировать список параметров сами
<a href="file.php?[имя_переменной1]=[значение1]&[имя_переменной2]=[значение2]"></a>
Тогда при переходе по данной ссылке мы можем использовать данные переменные
<?php
echo $_GET['имя_переменной1']; //Выведет [значение1]
echo $_GET['имя_переменной2']; //Выведет [значение2]
?>

Метод передачи данных через Cookies
Для этого нам понадобится знание хранения данных в браузере.
В данном случае все данные будут храниться в папке вашего компьютера определяемой браузером. Такие данные существуют только определённое количество времени. Через которые они просто чистятся, также их можно удалить и через сами браузеры
В сокращённом виде определение функции можно записать так:
setcookie([имя_cookie], [значение], [время_существования_в_секундах]);
Вот к примеру я задаю cookie(печенье в простонародии) с именем name, со значением "Vasya" на 20 секунд;
setcookie("name", "Vasya", 20);
Подробнее смотреть тут определение cookies
Теперь на какую страницу данного сайта в течении 20 секунд после зарезервирования(определения) данной cookie мы не перешли, эта переменная будет доступна
<?php
echo $_COOKIE['name']; //Выведет Vasya
?>

Метод передачи данных через Сессии(Sessions)
Эти переменные хранятсмя на сервере в временной папке и доступ к ним имеет исключительно только сервер. Сессии существуют до закрытия пользователем браузера. Но в отличии данных уникальный идентификатор сессии хранится либо в COOKIES о которых мы говорили выше, либо передаётся через переменную GET способом, о котором мы уже также сказали. На этом останавливаться не будем... [ Почитаем про сессии(sessions) ]

Для начала нужно зарегистрировать сессии на странице, это делается помощью функции session_start()
Затем можно с помощью глобального массива $_SESSION заносить в сессию значения
Вот пример: file1.php
<?php
session_start(); // Объявили о том что мы будем использровать сессию

/* заносим значения в сессию */

$_SESSION["param1"] = [Значение_1]; // С помощью глобального массива
$_SESSION["param2"] = [Значение_2]; // С помощью глобального массива


?>

Пока вы не закроете браузер вы можете использовать данные переменные на всём сайте, на котором они были зарегистрированны
<?php
session_start(); // Объявили о том что мы будем использровать сессию

echo $_SESSION["param1"]; //Выведет [Значение_1]
echo $_SESSION["param2"]; //Выведет [Значение_2]
?>

Помимо этих способов существуют ещё, самые важные я вам перечислил.
Есть также способ передачи данных скрипту JS, который будет реализовывать отправку данных на сервер в рабочем режиме
(Вы сможете продолжать работать с сайтом)
На основе этой передачи работает принцип AJAX технологии.


И конечно же... Все перечисленные типы можно совмещать на одной странице, например... Передача данных формы+данные через URL
.............
<form method="[GET или POST]" action="2.php?id=1">
   <input type="text" name="pole1"> Текстовое поле <br>
</form>
.............
Думаю вам будет всё понятно... Если нет задавайте вопросы.
  • 0

#9 RussiaStudent

RussiaStudent
    Topic Starter
  • Пользователь
  • 19 сообщений
  • Репутация: 0

Отправлено 18 Декабрь 2008 - 21:46

Оо как много информации. Спасибо большое :) Буду читать и вникать.
Возникнут вопросы обращусь...
Ещё раз огромное всем спасибо
  • 0

#10 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 19 Декабрь 2008 - 02:36

Я всегда рад помочь в изучении, только вы приводите что-нибудь в пример, что у вас не получается, а мы вместе разберём ваши ошибки!
Удачи в изучении. Ждём ваших успехов и продвижения :)
  • 0

robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85


Оформление форума – IPBSkins.ru