2014-02-07 5 views
0

Я сделал это php, но я не могу заставить его работать правильно. Когда я набираю имя или слово, я получаю Error 404.Получение ошибки 404 при проверке

«Редактировать»: Спасибо, я больше не получаю ошибку 404, но он все еще не работает, когда я набираю имя. Текст, который я вводил, и когда я нажимаю кнопку ввода, стирается и возвращается к началу. Кто-нибудь знает, если я что-то пропустил и как это исправить?

Код:

<? 
    if(!isset($_REQUEST["name"])&&(!empty($_REQUEST["name"]))) 
    { 
      echo "Hello".$_REQUEST["name"]; 
    }else 
      echo "You have to type something!"; 
?> 

<hr/> 
<form method="post" action="<?=$_PHP_SELF?>"> 
    <input type="text" name="name"/> 
</form> 
+2

<форма метода = "сообщение" действие = ""> или user1844933

+0

'$ _SERVER ['PHP_SELF']' is уязвим для xss attack.hence использовать 'htmlspecialchars()' или 'filter_input()' – krishna

+1

С другой стороны, оставляя действие пустым, также не соответствует HTML 4 RFC. – Raptor

ответ

1

Заменить:

<?=$_PHP_SELF?> 

с

<?php echo $_SERVER['PHP_SELF']; ?> 

Там нет такого понятия, называется $_PHP_SELF по умолчанию. Кроме того, будьте осторожны, короткие короткие PHP-теги могут быть помечены как устаревшие в некоторых версиях PHP.


Как отмечали @krishna, используя $_SERVER['PHP_SELF'] может привести к XSS атаки. Используйте команду htmlspecialchars(), чтобы избежать URL-адреса.

С другой стороны, оставляя атрибут action пустым, не соответствует спецификациям HTML 4 и 5. См. Это answer. Если вы считаете, что помещать фактический URL-адрес в атрибут action, вы можете использовать action="?" или action=".", который работает так же, как action="".

1

попробовать это

<?=$_SERVER['PHP_SELF']?> 

или

<form method="post" action=""> 
+0

Остерегайтесь, они разные. например, 'www.example.com/script.php' не равно' www.example.com/script.php? id = 123' – Raptor

0

Вы используете $_PHP_SELF неправильно.

Тип вместо:

<?=$_SERVER['PHP_SELF']?> 
0

Пожалуйста, используйте код, приведенный ниже. Я изменил форму действий, а также изменили следующую строку из

!isset($_REQUEST["name"]) 

в

isset($_REQUEST["name"]) 

Как эффективно, прежде чем вы проверяли имя не было задано и не пусто.

<? 
if(isset($_REQUEST["name"])&&(!empty($_REQUEST["name"]))) 
{ 
    echo "Hello ".$_REQUEST["name"]; 
} 
else 
{ 
    echo "You have to type something!"; 
} 

?> 
<hr/> 
<form method="post" action=""> 
<input type="text" name="name"/> 
</form> 
0
<? 
if(isset($_REQUEST["submit"])&&(!empty($_REQUEST["name"]))) 
    // and you are not checking for submission 
{ 
echo "Hello".$_REQUEST["name"]; 
} 
else 
echo "You have to type something!"; 
?> 
<hr/> 
<form method="post" action=""> 
<input type="text" name="name"/> 
<input type="submit" name="submit" /> // where is the submission ?? 
</form> 
1

$_SERVER['PHP_SELF'] уязвимы для атак XSS.Поэтому постарайтесь, чтобы избежать его и использовать htmlspecialchars() или filter_input как этот

action="<?php echo filter_input(INPUT_SERVER, 'PHP_SELF', FILTER_SANITIZE_URL) ?>"

или

action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"], ENT_QUOTES, "utf-8"); ?>"

вместо

action="<?php echo $_SERVER['PHP_SELF']?>"

+1

Хорошо отметить, что 'PHP_SELF' уязвим для атак XSS. Рекомендуем использовать 'htmlspecialchars()' для более старой среды хостинга, поскольку 'filter_input()' вводится только после PHP 5.2.0. – Raptor

Смежные вопросы