HTML / PHP форма - PullRequest
       10

HTML / PHP форма

0 голосов
/ 15 апреля 2010

Я пытаюсь закодировать все в одном контакте HTML / PHP с проверкой ошибок. Когда я загружаю этот файл в мой браузер, там нет HTML. Я начинающий php-программист, поэтому, скорее всего, забыл что-то довольно очевидное.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>All In One Feedback Form</title>
</head>

<body>


<?
$form_block = "
<input type=\"hidden\" name=\"op\" value=\"ds\">
<form method=\"post\" action=\"$server[PHP_SELF]\">
<p>Your name<br />
<input name=\"sender_name\" type=\"text\" size=30 value=\"$_POST[sender_name]\" /></p>
<p>Email<br  />
<input name=\"sender_email\" type=\"text\" size=30 value=\"$_POST[sender_email]\"/></p>
<p>Message<br />
<textarea name=\"message\" cols=30 rows=5 value=\"$_POST[message]\"></textarea></p>
<input name=\"submit\" type=\"submit\" value=\"Send This Form\" />

</form>";

if ($_POST[op] != "ds") {
 //they see this form
 echo "$form_block";

} else if ($_POST[op] == "ds") {


 if ($_POST[sender_name] == "") {
  $name_err = "Please enter your name<br>";
  $send = "no";
}

 if ($_POST[sender_email] == "ds") {
  $email_err = "Please enter your email<br>";
  $send = "no";
}

 if ($_POST[message] == "ds") {
  $message_err = "please enter message<br>";
  $send = "no";
}

 if ($send != "no") {
  //its ok to send
  $to = "jack@xxxxxxx.com.au";
  $subject = "All in one web site feed back";
  $mailheaders = "From: website <some email address@hhhh.com> \n";
  $mailheaders .= "Reply-To: $_POST[sender_email]\n";
  $msg = "Email sent from this site www.ccccc.com\n";
  $msg .= "Senders name: $_POST[senders_name]\n";
  $msg .= "Sender's E-Mail: $_POST[sender_email]\n";
  $msg .= "Message: $_POST[message]\n\n";
  mail($to, $subject, $msg, $mailheaders);

  echo "<p>Mail has been sent</p>";
}

else if ($send == "no") {
 echo "$name_err";
 echo "$email_err";
 echo "$message_err";
 echo "$form_block";
}

}

?>

</body>
</html>

К вашему сведению, я пробую пример из книги под названием PHP 6 Fast and Easy Wed Development

ОБНОВЛЕНИЕ !!!

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

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>All In One Feedback Form</title>
</head>

<body>



<input type="hidden" name="op" value="ds">
<form method="post" action="">
<p>Your name<br />
<input name="sender_name" type="text" size=30 value="" /></p>

<p>Email<br  />
<input name="sender_email" type="text" size=30 value=""/></p>
<p>Message<br />
<textarea name="message" cols=30 rows=5 value=""></textarea></p>
<input name="submit" type="submit" value="Send This Form" />

</form></body>
</html>

Ответы [ 6 ]

3 голосов
/ 15 апреля 2010

Попробуйте переключить теги

'<?' to: '<?php'

Ваша среда разработки может не распознавать короткие теги, поэтому создается пустая страница.

Когда вы получаете доступ к исходному коду страницы, видите ли вы теги doctype / html / body?

1 голос
/ 15 апреля 2010

В качестве стилистического совета вы можете прочитать о синтаксисе HEREDOC . Вы могли бы создать свою форму и присвоить переменную без экранирования:

$form_block = <<<EOL
<input type="hidden" name="op" value="ds">
<form method="post" action="$_SERVER[PHP_SELF]">
<p>Your name<br />
<input name="sender_name" type="text" size=30 value="$_POST[sender_name]" /></p>
<p>Email<br  />
<input name="sender_email" type="text" size=30 value="$_POST[sender_email]"/></p>
<p>Message<br />
<textarea name="message" cols=30 rows=5 value="$_POST[message]"></textarea></p>
<input name="submit" type="submit" value="Send This Form" />
</form>
EOF;

Также следует помнить, что слепая вставка предоставленных пользователем данных в форму в том виде, в каком вы есть (sender_name и sender_email), может привести к тривиальным атакам между сайтами. Подумайте, что произойдет, если пользователь заполнил форму и включил двойную кавычку в любое поле, но вызвал ошибку формы другим способом (например, двойная кавычка в sender_name, но оставил sender_email пустым). Двойная кавычка вставляется в форму и преждевременно завершает атрибут «значение» поля ввода.

Чтобы смягчить это, передайте все значения, которые будут вставлены в форму, сначала через htmlspecialchars(), что будет экранировать любые специальные символы.

1 голос
/ 15 апреля 2010

Нашел это. Ваше скрытое поле ввода не находится внутри тегов формы и не отправляется при отправке формы, что не вызывает остальной код PHP.

Итак, вместо:

...
<input type=\"hidden\" name=\"op\" value=\"ds\">
<form method=\"post\" action=\"$server[PHP_SELF]\">
...

Поменяйте их местами, как ::

...
<form method=\"post\" action=\"$server[PHP_SELF]\">
<input type=\"hidden\" name=\"op\" value=\"ds\">
...

Очень непослушный.

1 голос
/ 15 апреля 2010

Вы пропустили некоторые тире при попытке получить доступ к некоторым переменным $ _POST и $ _SERVER.

Пример: это $ _POST ['op'], а не $ _POST [op]

также $ _SERVER [PHP_SELF], а не $ server [PHP_SELF]

( ! ) Notice: Undefined variable: server in /home/vidves/public_html/www01/test.php on line 14
Call Stack
#   Time    Memory  Function    Location
1   0.0011  111512  {main}( )   ../test.php:0

( ! ) Notice: Undefined index: sender_name in /home/vidves/public_html/www01/test.php on line 16
Call Stack
#   Time    Memory  Function    Location
1   0.0011  111512  {main}( )   ../test.php:0

( ! ) Notice: Undefined index: sender_email in /home/vidves/public_html/www01/test.php on line 18
Call Stack
#   Time    Memory  Function    Location
1   0.0011  111512  {main}( )   ../test.php:0

( ! ) Notice: Undefined index: message in /home/vidves/public_html/www01/test.php on line 20
Call Stack
#   Time    Memory  Function    Location
1   0.0011  111512  {main}( )   ../test.php:0

( ! ) Notice: Use of undefined constant op - assumed 'op' in /home/vidves/public_html/www01/test.php on line 25
Call Stack
#   Time    Memory  Function    Location
1   0.0011  111512  {main}( )   ../test.php:0

( ! ) Notice: Undefined index: op in /home/vidves/public_html/www01/test.php on line 25
Call Stack
#   Time    Memory  Function    Location
1   0.0011  111512  {main}( )   ../test.php:0
1 голос
/ 15 апреля 2010

Вы можете использовать HTML с php следующим образом

<?php if ($_POST[op] != "ds") {  ?>

<input type="hidden" name="op" value="ds">
<form method="post\" action=\"$server[PHP_SELF]\">

/ * ваш HTML-код здесь * /

</form>";

<php } else if ($_POST[op] == "ds") {  ?>...............
0 голосов
/ 15 апреля 2010

Некоторые установки заботятся о расширениях файлов. Ваш файл называется * .html или * .php?

Нередко * .html просто отправляется клиенту, тогда как * .php анализируется php-движком, а затем клиентом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...