神秘500错误

时间:2011-06-17 22:51:16

标签: php

这可能是一个n00b问题,但我不能为我的生活弄清楚我搞砸了什么。我之前遇到过类似的问题,但我认为我更偶然地修复它而不是设计,我真的很想知道我实际上做错了什么。

如果我在pastebin中运行代码,则会出现500错误。但是,如果我注释掉display_wine函数,它运行得很好。如果我运行调试器,它只是突出显示关闭的php标记。我检查并仔细检查以确保我没有任何额外的括号或分号。任何帮助将不胜感激!

<?php

class simpleCMS {

  var $host;
  var $username;
  var $password;
  var $table;
  var $id;


  public function display_wine_list() {
    $q = "SELECT * FROM whino ORDER BY created DESC LIMIT 3";
    $r = mysql_query($q);

    if ( $r !== false && mysql_num_rows($r) > 0 ) {
      while ( $a = mysql_fetch_assoc($r) ) {
        $id = $a['id'];
        $name = stripslashes($a['name']);
        $created = $a['created'];
        $type = $a['type'];

        /**
        $evalt = "require_once '../generator/qrlib.php';";
        eval($evalt);
        QRcode::png('http://qr.htbx.net/simplecms/mob_display.php?id='.$id, '../generator/temp/'.$id.'.png');
        **/

        $entry_display .= <<<ENTRY_DISPLAY

    <div class="post">
        <h2>
            $name
        </h2>
        <p>$created</p>
        <p>$type</p>

    </div>

ENTRY_DISPLAY;
      }
    } else {
      $entry_display = <<<ENTRY_DISPLAY

    <h2> This Page Is Under Construction </h2>
    <p>
      No entries have been made on this page. 
      Please check back soon, or click the
      link below to add an entry!
    </p>

ENTRY_DISPLAY;
    }
    $entry_display .= <<<ADMIN_OPTION

    <p class="admin_link">
      <a href="{$_SERVER['PHP_SELF']}?admin=1">Add a New Entry</a>
    </p>

ADMIN_OPTION;

    return $entry_display;
  }

  public function display_admin() {
    return <<<ADMIN_FORM

    <form action="{$_SERVER['PHP_SELF']}" method="post">

      <label for="name">Name:</label><br />
      <input name="name" id="name" type="text" maxlength="75" />
      <div class="clear"></div>

      <label for="type">Type:</label><br />
      <input name="type" id="type" type="text" maxlength="100" />
      <div class="clear"></div>

      <label for="notes">Notes:</label><br />
      <textarea name="notes" id="notes"></textarea>
      <div class="clear"></div>

      <input type="submit" value="Create This Entry!" />
    </form>

    <br />

    <a href="display.php">Back to Home</a>

ADMIN_FORM;
  }

  public function write($p) {
     if ( $_POST['name'] )
      $name = mysql_real_escape_string($_POST['name']);
    if ( $_POST['type'])
      $type = mysql_real_escape_string($_POST['type']);
    if ( $_POST['grapes'])
      $grapes = mysql_real_escape_string($_POST['grapes']);
    if ( $_POST['notes'])
      $notes = mysql_real_escape_string($_POST['notes']);
    if ( $name && $type && $grapes && $notes ) {
      $created = date ("Y-m-d H:i:s", $phptime);
      $sql = "INSERT INTO whino VALUES('','$name','$type','$grapes', '$notes')";
      return mysql_query($sql);
    } else {
      return false;
    }
 }

  public function connect() {
    mysql_connect($this->host,$this->username,$this->password) or die("Could not connect. " . mysql_error());
    mysql_select_db($this->table) or die("Could not select database. " . mysql_error());

    return $this->buildDB();
  }

  private function buildDB() {
    $sql = <<<MySQL_QUERY
CREATE TABLE IF NOT EXISTS whino (
id          INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name        VARCHAR(75),
notes       TEXT,
created     DATE,
type        VARCHAR(100),
grapes      VARCHAR(75)
)
MySQL_QUERY;

    return mysql_query($sql);
  }

 public function display_wine($id) {
    $q = "SELECT * FROM whino WHERE id = $id";
    $r = mysql_query($q);

    if ( $r !== false && mysql_num_rows($r) > 0 ) {
        while ( $a = mysql_fetch_assoc($r) ) {
            $id = $a['id'];
        $name = stripslashes($a['name']);
        $created = $a['created'];
        $type = $a['type'];

        $entry_display .= <<<ENTRY_DISPLAY

            <div class="post">
                <h2>
                    $name
                </h2>
                <p>$created</p>
                <p>$type</p>

            </div>

        ENTRY_DISPLAY;
        }
    } else {
        $entry_display = <<<ENTRY_DISPLAY

        <h2> This Page Is Under Construction </h2>
        <p>
        No entries have been made on this page. 
        Please check back soon, or click the
        link below to add an entry!
        </p>

        ENTRY_DISPLAY;
    }
    $entry_display .= <<<ADMIN_OPTION

    <p class="admin_link">
    <a href="{$_SERVER['PHP_SELF']}?admin=1">Edit</a>
    </p>

    ADMIN_OPTION;

    return $entry_display;
  } 


}

?>

2 个答案:

答案 0 :(得分:3)

您的HEREDOC syntax不对。

    $entry_display .= <<<ADMIN_OPTION

    <p class="admin_link">
    <a href="{$_SERVER['PHP_SELF']}?admin=1">Edit</a>
    </p>

    ADMIN_OPTION;

    return $entry_display;

了解ADMIN_OPTION;行是如何缩进的? HEREDOC必须处于下一行的开头,因此:

    $entry_display .= <<<ADMIN_OPTION

    <p class="admin_link">
    <a href="{$_SERVER['PHP_SELF']}?admin=1">Edit</a>
    </p>

ADMIN_OPTION;

    return $entry_display;

答案 1 :(得分:0)

问题似乎是您缩进您的heredoc分配的结束标签。无论您的代码中发生了什么其他事情,ENTRY_DISPLAY;(等)都需要一直留在第1列。