Функция php не определена - PullRequest
0 голосов
/ 13 января 2012

У меня есть функция со значением по умолчанию ничего, например:

function output_message($message="") {
  if (!empty($message)) { 
    return "<p class=\"message\">{$message}</p>";
  } else {
    return "";
  }
}

Затем я повторяю сообщение в форме входа в систему. Если есть ошибки, он будет отображать сообщение, но если нет ошибок, он просто ничего не должен делать. Когда моя страница загружается, она говорит, что моя функция не определена. Ниже моя HTML-страница.

<?php
require_once("../../includes/functions.php");
require_once("../../includes/session.php");
require_once("../../includes/database.php");
require_once("../../includes/user.php");

if($session->is_logged_in()) {
  redirect_to("index.php");
}

// Remember to give your form's submit tag a name="submit" attribute!
if (isset($_POST['submit'])) { // Form has been submitted.

  $username = trim($_POST['username']);
  $password = trim($_POST['password']);

  // Check database to see if username/password exist.
  $found_user = User::authenticate($username, $password);

  if ($found_user) {
    $session->login($found_user);
    redirect_to("index.php");
  } else {
    // username/password combo was not found in the database
    $message = "Username/password combination incorrect.";
  }

} else { // Form has not been submitted.
  $username = "";
  $password = "";
}
<html>
  <head>
    <title>Photo Gallery</title>
    <link href="../stylesheets/main.css" media="all" rel="stylesheet" type="text/css" />
  </head>
  <body>
    <div id="header">
      <h1>Photo Gallery</h1>
    </div>
    <div id="main">
        <h2>Staff Login</h2>
        <?php echo output_message($message); ?>

        <form action="login.php" method="post">
          <table>
            <tr>
              <td>Username:</td>
              <td>
                <input type="text" name="username" maxlength="30" value="<?php echo htmlentities($username); ?>" />
              </td>
            </tr>
            <tr>
              <td>Password:</td>
              <td>
                <input type="password" name="password" maxlength="30" value="<?php echo htmlentities($password); ?>" />
              </td>
            </tr>
            <tr>
              <td colspan="2">
                <input type="submit" name="submit" value="Login" />
              </td>
            </tr>
          </table>
        </form>
    </div>
    <div id="footer">Copyright <?php echo date("Y", time()); ?>, Kevin Skoglund</div>
  </body>
</html>
<?php if(isset($database)) { $database->close_connection(); } ?>

Я не уверен, почему я получаю эту ошибку, потому что в своей функции я устанавливаю значение по умолчанию $ message в функции. output_message ($ сообщение = "").

Может кто-нибудь взглянуть на мой код и сказать мне, почему он говорит мне, что моя функция не определена. Спасибо.

Ответы [ 2 ]

1 голос
/ 13 января 2012

Судя по вашему комментарию, кажется, что это не функция, которая не определена, а переменная.

Проблема не в самой функции, там ваша переменная $message установлена ​​впустая строка, если в функцию не передана переменная.

Проблема в вызове вашей функции:

<?php echo output_message($message); ?>

Здесь вы вызываете свою функцию с переменной, также называемой $message,но совершенно не связан с переменной $message в вашей функции.Эта глобальная переменная не существует, и поэтому php выдает вам предупреждение.

То, как вы определили свою функцию, означает, что вы можете вызывать ее следующим образом:

<?php echo output_message(); ?>

без проблем;если переменная не указана, переменная $message в функции устанавливается на пустую строку.

Однако при использовании:

<?php echo output_message($any_variable_name); ?>

будет выдано предупреждение, если $any_variable_name неопределяется в области, в которой вы находитесь (в данном случае это глобальная область).

0 голосов
/ 13 января 2012

Я действительно не знаю, где вы используете output_message, но, по-моему, проблема в том, что эти функции "redirect_to" могут быть проблемой.

Эти функции в большинстве случаев выполняют что-то вроде этого:

   header( 'Location: http://some_where_on.yourweb' );

Убедитесь, что вы сделали правильные включения в .php файл, где вы используете функцию output_message.

Кроме того, я бы порекомендовал следовать советам, которые Фил и Йерун рассказали в комментариях:

  • отсутствует?> Перед тегом
  • добавить init_set («display_errors», «On»); error_reporting (E_ALL)
  • инициализировать переменные, такие как $ message, чтобы избежать предупреждений и побочных эффектов
  • Старайтесь не смешивать рендеринг с логикой (этот мой)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...