2015-09-21 3 views
2

У меня есть функция PHP, которая отображает сообщение об ошибке как часть проверки формы, я смешал в некотором HTML, чтобы создать для нее страницу;PHP останавливается после возврата

function displayMessage($msg) 
    { 
     ?> 
     <!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="X-UA-Compatible" content="IE=EDGE"/> 
     <meta http-equiv="Content-Type" content="text/html; charset=Windows-1252"/> 
     <title>Error sending message</title> 
     <meta name="viewport" content="width=device-width, initial-scale=1" /> 
     </head> 
     <body> 
     <div style="box-sizing: border-box; width:100%;font-family:arial;font-size:16px;color:#333333;background:#ffe6e3;padding:10px;background:#ffe6e3;border:1px solid #fb8d8d;"> 
     <?php return $msg; ?> 
     </div> 
     </body> 
     </html> 
     <?php 
    } 

При выполнении кода все выглядит прямо в браузере, однако, глядя на исходный код останавливается сразу после того, как появится сообщение так замыкающая DIV, тело и HTML-теги не отображаются.

Как я могу их показать, я попробовал эхо вместо возврата, но отображает сообщение об ошибке, но все еще обрабатывает форму.

+0

Как вы звоните 'displayMessage()'? – AbraCadaver

+0

Я думаю, вы хотите использовать 'echo' not' return'. Несмотря на это, это неверно. Вы думаете, что PHP похож на JS. – CodeGodie

ответ

4

Вы используете функции неправильно, (по аналогии с require_once). Функции должны быть вызваны и возвращать значение, не используемое для включения динамического кода таким образом. Причина, по которой он останавливается после return $msg, заключается в том, что вы сообщаете функции о возврате переменной с именем $ msg и завершении дальнейшего выполнения функционального блока.

Я предложил бы использовать что-то вроде этого

function displayMessage($msg) 
    { 
     $html = <<<EOD 
     <!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="X-UA-Compatible" content="IE=EDGE"/> 
     <meta http-equiv="Content-Type" content="text/html; charset=Windows-1252"/> 
     <title>Error sending message</title> 
     <meta name="viewport" content="width=device-width, initial-scale=1" /> 
     </head> 
     <body> 
     <div style="box-sizing: border-box; width:100%;font-family:arial;font-size:16px;color:#333333;background:#ffe6e3;padding:10px;background:#ffe6e3;border:1px solid #fb8d8d;"> 
     $msg; 
     </div> 
     </body> 
     </html> 
     EOD; 
    return $html; 
    } 
echo displayMessage($msg); 
1

return с функции средство instantly going back to whoever called it. Значит, ни одна из строк ниже return не будет выполнена.

0

Вместо использования return, изменить на echo. return означает, что вы хотите вернуть что-то вне функции. Один из способов использования возврат будет:

function displayMessage($msg) 
     { 
      return '<!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="X-UA-Compatible" content="IE=EDGE"/> 
      <meta http-equiv="Content-Type" content="text/html; charset=Windows-1252"/> 
      <title>Error sending message</title> 
      <meta name="viewport" content="width=device-width, initial-scale=1" /> 
      </head> 
      <body> 
      <div style="box-sizing: border-box; width:100%;font-family:arial;font-size:16px;color:#333333;background:#ffe6e3;padding:10px;background:#ffe6e3;border:1px solid #fb8d8d;"> 
      '.$msg.' 
      </div> 
      </body> 
      </html>'; 
     } 

И при вызове функции вы просто сделать:

<?php echo displayMessage(); ?> 

Или вы можете изменить echo:

function displayMessage($msg) 
    { 
     echo ' 
     <!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="X-UA-Compatible" content="IE=EDGE"/> 
     <meta http-equiv="Content-Type" content="text/html; charset=Windows-1252"/> 
     <title>Error sending message</title> 
     <meta name="viewport" content="width=device-width, initial-scale=1" /> 
     </head> 
     <body> 
     <div style="box-sizing: border-box; width:100%;font-family:arial;font-size:16px;color:#333333;background:#ffe6e3;padding:10px;background:#ffe6e3;border:1px solid #fb8d8d;"> 
     '.$msg.' 
     </div> 
     </body> 
     </html>' 
    } 

И называют функции:

<?php displayMessage(); ?> 
+2

Зачем ПП «попробовать это»? Хороший ответ всегда будет объяснять, что было сделано, и почему это было сделано именно так, не только для OP, но и для будущих посетителей SO. [Это не сложно заработать достаточно, чтобы комментировать.] (Http://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-can-i- сделай-вместо) –

+0

Да, ты прав. Но я думал, что он будет заниматься исследованием эхо-функции. В следующий раз я отправлю весь ответ. –

+0

Вы можете изменить ваш ответ – CodeGodie

1

Изменение ниже:

<?php return $msg; ?> 

To:

<?php echo $msg; ?> 

return ключевое слово должно использоваться только внутри вызова функции.

1

return означает «вернуть это значение из функции и прекратить выполнение функции». Ключевое слово, что вы на самом деле ищет это echo:

function displayMessage($msg) 
{ 
    ?> 
    <!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="X-UA-Compatible" content="IE=EDGE"/> 
    <meta http-equiv="Content-Type" content="text/html; charset=Windows-1252"/> 
    <title>Error sending message</title> 
    <meta name="viewport" content="width=device-width, initial-scale=1" /> 
    </head> 
    <body> 
    <div style="box-sizing: border-box; width:100%;font-family:arial;font-size:16px;color:#333333;background:#ffe6e3;padding:10px;background:#ffe6e3;border:1px solid #fb8d8d;"> 
    <?php echo $msg; ?> 
    </div> 
    </body> 
    </html> 
    <?php 
}