Отправляет email-рассылки с помощью сервиса Sendsay

[TC] php. передача сценария

Здравствуйте, уважаемые!

Мне нужно, чтобы введенное в форму имя отображалось в другом php-файле.

<body> //anketa1.php
<form action="resultat1.php" method="post">
<input type="text" name="name" value=""><br>
<input type="submit" value="Отправить!">
</form>";
</body></html>

<body> //resultat1.php
<?
print "Привет, $name!";

</body></html>

Файл resultat1.php открывается, но значение переменной $name не
отображается. Например, отображается Привет, !

Подскажите, где поискать загвозку?
С уважением,
Грызунов Александр. Самара.

Ответить   "eastreb" Sun, 8 Feb 2009 19:47:33 +0300 (#820415)

 

Ответы:

Здравствуйте, Eastreb.

Пробуйте так

<body> //resultat1.php
<?

$name = $HTTP_POST_VARS['name'];
print "Привет, $name!";

А вообще вам лучше подписаться на вот этот лист и задавать туда такие
вопросы.
Вот этот лист

inet.webbuild.webbuilding-list@subscribe.ru

--
Всех благ

Ответить   "Bitrushev" Sun, 8 Feb 2009 19:48:41 +0200 (#820432)

 

Приветствую всех.

$HTTP_POST_VARS -- не рекомендуется использовать, начиная с php 4 и выше (как
и другие $HTTP_..._VARS имена).
В php 5 поддержка этих имен отключена по умолчанию и на хостингах обычно ее
не включают. В php 6 предполагается вообще исключить эти имена.

Успехов. Анатолий.

Ответить   "i_chay" Mon, 9 Feb 2009 00:53:35 +0400 (#820507)

 

Здравствуйте, Александр.

В PHP есть три типа переменных для хранения и обработки введённой в форму информации:
$_GET, $_POST, и $_REQUEST. В Вашем случае данные формы можно передать на страницу
обработки с помощью переменных $_POST или $_REQUEST (обратите внимание на регистр
букв).

PHP-код в файле resultat1.php должен выглядеть следующим образом:

<?php
$name = $_POST['name'];
print "Привет, $name!";

или

<?php
$name = $_REQUEST['name'];
print "Привет, $name!";

Подробнее на эту тему можно почитать здесь:
http://www.intuit.ru/department/pl/php5/7/

Ответить   Maria Rasstanaeva Sun, 8 Feb 2009 20:15:55 +0300 (#820452)

 

Vande omentaina, Maria!

Мария, а почему бы не экстрактнуть этот массив да и всё?
<?
extract ($_POST, EXTR_SKIP);
Обычно, правда, на хостингах это сами делают и можно к элементам этих
массивов обращаться как к переменным.
P.S. Девушка-программер? Уважаю.

Ответить   Anarendil Mon, 9 Feb 2009 01:26:32 +0200 (#820526)

 

Здравствуйте, Anarendil.

Наверное, так будет изящнее выглядеть, особенно, если форма имеет
много полей. Но "я пока не волшебник ..." и судить о преимуществах того
или иного способа не возьмусь.

То есть, всё что мы с вами тут понаписали, вообще не нужно? Тогда
почему вариант Александра не работает? Или я Вас как-то нетак поняла?

Ответить   Maria Rasstanaeva Mon, 9 Feb 2009 08:23:17 +0300 (#820574)

 

Приветствую всех.
Андрей пишет:

Во-первых, зачем множить сущности? Во-вторых, это не рекомендуется делать в отношении
пользовательских данных (т.е. суперглобалов $_POST, $_GET и т.п.)
Warning
Do not use extract() on untrusted data, like user-input (
$_GET, ...). If you do, for example, if you want to run old code that relies
on
register_globals temporarily, make sure you use one of the non- overwriting
extract_type values such as EXTR_SKIP and be aware that you should extract in
the same order that's defined in
variables_order
within the php.ini .

Кстати, если импорт пользовательского ввода действительно нужен позарез и импорт
осуществляется в глобальную область,то рекомендуется использовать import_request_variables().

Ну, собственно, исходный вопрос как раз демонстрировал обратное.

На хостингах делают не это. На некоторых хостингах в настройках php включен параметр
register_globals, который предписывает php импортировать в глобальное пространство
переменные из массивов $_POST, $_GET (и т.п.).
Однако:
This feature has been DEPRECATED as of PHP 5.3.0 and REMOVED as of PHP 6.0.0.
Relying on this feature
is highly discouraged.

А в php4 этот параметр рекомендуется устанавливать в off:
; - register_globals = Off [Security, Performance]
; Global variables are no longer registered for input data (POST, GET, cookies,
; environment and other server variables). Instead of using $foo, you must
use
; you can use $_REQUEST["foo"] (includes any variable that arrives through
the
; request, namely, POST, GET and cookie variables), or use one of the specific
; $_GET["foo"], $_POST["foo"], $_COOKIE["foo"] or $_FILES["foo"], depending
; on where the input originates. Also, you can look at the
; import_request_variables() function.
; Note that register_globals is going to be depracated (i.e., turned off
by
; default) in the next version of PHP, because it often leads to security
bugs.
; Read http://php.net/manual/en/security.registerglobals.php for further
; information.

Успехов. Анатолий.

Ответить   "i_chay" Mon, 9 Feb 2009 10:43:26 +0400 (#820590)

 

Vande omentaina, i_chay!

Could you give the import_request_variables() description here or at
least the link to that description?
Кстати, ещё вопрос: а почему на
некоторых хостах (http://sweb.ru/,
например) к элементам массивов
$_POST и $_GET можно обращаться
напрямую ($foo=...), а к элементам
массива $_SESSION - нет? Или это
отдельный параметр? Я всегда считал,
что register_globals и за это
отвечает...

Ответить   Anarendil Mon, 9 Feb 2009 14:45:37 +0200 (#820725)

 

Приветствую всех.

Андрей пишет:

http://ru.php.net/import_request_variables

register_globals не влияет на $_SESSION, в том числе и по этой причине рекомендуют
работать через $_SESSION, а не при помощи функции session_register(), на поведение
которой register_globals оказывает влияние (session_register не рекомендуется
к использованию и будет удалена в php6).

...NV, GET,
POST, COOKIE and SERVER variables are populated in global scope
http://ru.php.net/manual/en/ini.core.php#ini.register-globals

... If your script uses session_register(), it will not work in environments
where the PHP directive
register_globals is disabled.

http://ru.php.net/manual/en/function.session-register.php

Успехов. Анатолий.

Ответить   "i_chay" Mon, 9 Feb 2009 21:56:48 +0400 (#820825)

 

Vande omentaina, eastreb!

Кроме того, что мы вам тут посоветовали, могу ещё сказать такую вещь,
за которую многие профи меня, наверное, запинают и побьют каменьями,
но я её всё равно скажу.
Очень не рекомендую вам давать имена переменных, совпадающих с
чем-либо вроде атрибута тега или типа поля. Во-первых, запутаетесь
сами, а во-вторых, PHP почему-то не очень адекватно реагирует на такие
переменные.
Например, так, по моему мнению, очень плохо:
<input type=text name=\"name\">
<input type=hidden name=\"hidden\">
Я в таких случаях ставлю перед именем букву u, что значит user -
пришло от пользователя. Например:

<input type=\"text\" name=\"uname\" size=\"30\">

Ответить   Anarendil Mon, 9 Feb 2009 18:31:42 +0200 (#820805)