Чем заменить $PHP_SELF?

  • Автор темы Kotjara
  • Дата начала

Kotjara

Guest
Чем заменить $PHP_SELF?

При переходе на PHP5 с его register_globals=off скрипты с <form method='POST' action='$PHP_SELF' >естественно перестали работать. Замена на <form method='POST' action='_SERVER[$PHP_SELF]'> или <form method='POST' action='_SERVER["$PHP_SELF"]'> выдают ошибки. Чем можно заменить значение action, чтобы страница со сценарием перезагружалась после сабмита?
 

Kotjara

Guest
Эта композиция также не работает. Вот отрывок моего сценария
$block="<form method='POST' action='$PHP_SELF' onsubmit='return FrontPage_Form1_Validator(this)' language='JavaScript' name='FrontPage_Form1'>
содержание формы
</form>";
Далее я работаю с $block.
Замена на $block="<form method='POST' action="'.$_SERVER['PHP_SELF'].'" ... дает
parse error, unexpected T_CONSTANT_ENCAPSED_STRING
 

alexhemp

Новичок
а зачем вообще форме, которая сабмитится на тот-же скрипт, что ее и генерирует action. На себя форма сабмититься чудесно вообще без action :)
 

MD

Guest
alexhemp, иногда вызываешь форму с параметрами в урл, если сабмитить на себя без акшн, то пойдут и параметры. это не всегда нужно. :)
 

md5hash

Новичок
А ведь вопрос поначалу был совсем другой :)
В общем я как самый хитрый , никогда не указываю в action если надо перегрузить текущий скрипт. А так $_SERVER[PHP_SELF], и работает без всяких кавычек :)
Так что присоединяюсь к остальным.
 

SiMM

Новичок
> А так $_SERVER[PHP_SELF], и работает без всяких кавычек
Ерунду больше не городите.
[m]language.types.array#language.types.array.foo-bar[/m]
 

md5hash

Новичок
SiMM имелся ввиду следующий вариант
<?
echo $_SERVER[PHP_SELF];
echo "<br>" ;
echo $_SERVER['PHP_SELF'];
?>
Выведет одно и тоже
 

Kotjara

Guest
Всё равно при выполнении скрипта данные не уходят, хотя форма и обновляется. Я взял уже примитивный скрипт - данные хоть постом, хоть гетом - с формы уходят, а скрипт не видит переменных. Может ли быть причиной Apache-2.0.54 с его проблемным threaded MPM? Я компилил его по умолчанию без поддержки этой фигни, но может надо включать поддержку prefork MPM принудительно или что-то подправить в httpd.conf? Или это не поможет?
Кстати, правильный синтаксис action='{$_SERVER['PHP_SELF']}' (пример 34-2 мануала)
 

Фанат

oncle terrible
Команда форума
Kotjara
ты никогда не слашул о такой штуке, как "Просмотр HTML кода"? Рекомендую. Рулезная вещь.
 

Ivannn

Guest
А переменные можно (нужно) брать из массива $_POST:
$_POST['var']

(может, в этом проблема?)
 

Kotjara

Guest
<html> <body>
<?
$block="
<form method='POST' action='{$_SERVER['PHP_SELF']}' >
<input type='text' name='name' >
<textarea name='text1' ></textarea>
<input type='submit' value='Отправить' name='submit' > <input type='reset' value='Очистить' name='reset' >
<INPUT TYPE='hidden' NAME='op' value='ds'>
</form>";

if (@$op != "ds") {
echo "$block";
exit;
}
$text2=ereg_replace("[*(&|>|<|/|//|\|;|/|)*]","",$text1); //фильтр спецсимволов
$name=ereg_replace("[*(&|>|<|/|//|\|;/|)*]","",$name);

//защита от матов
$mat= array("&#234;&#238;&#231;&#229;&#235;");
$nis=strtr($text2, "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ", "абвгдеёжзийклмнопрстуфхцчшщъыьэюя");
foreach($mat as $value) {
$isk=strpos($nis,$value);
if($isk !== false){
echo"<SCRIPT LANGUAGE='JavaScript'>
<!--
alert ('Ваше послание содержит ругательство!')
-->
</SCRIPT>";
echo $block;
exit;
}}
$dbname="guestbook";
$tablename="guestbook";
@$connect=mysql_connect("localhost","root","pass") or die ("Невозможно подключиться к MySQL");
@$db=mysql_select_db($dbname, $connect) or die ("Невозможно выбрать БД");
$data=date("j.m.Y H:i");
$sql="INSERT INTO $tablename(name,data,text) VALUES ('$name','$data','$text2')";
@$result=mysql_query($sql,$connect) or die ("Невозможно выполнить запрос");
if ($result !=0){
echo"<SCRIPT LANGUAGE='JavaScript'>
<!--
alert ('Ваше послание добавлено!');
location .replace('./guestbook_frame.htm');
-->
</SCRIPT>";
}
?>
</body></html>

$sql получает нулевые $name и $text2 и база отказывается записывать строку. С $data всё OK.
А при просмотре HTML кода: action=/путь к этому скрипту/имя скрипта. Вместо подколок лучше помогли бы разобраться.
 
Сверху