2011-06-17 10 views
0

これはn00bの質問かもしれませんが、私の人生のために、私は何をねじっているのか理解できません。私は以前も同様の問題を抱えていましたが、設計よりも偶然にそれを修正したと思います。実際に間違っていることを本当に知りたいのです。ミステリー500エラー

私が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; 
    } 


} 

?> 
+0

そのコードは、クラスを宣言する以外に何もしません。発生したエラーの詳しい情報を得るには、Apacheのエラーログを確認する必要があります。 – Alp

答えて

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;行がインデントされていますか。ヒアドキュメントのは、次のような、次の行の先頭にある必要はあり:

$entry_display .= <<<ADMIN_OPTION 

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

ADMIN_OPTION; 

    return $entry_display; 
+0

HEREDOCを修理した後の証明:http://codepad.org/yktbQPVz –

+0

そして、HEREDOCを修理する前に:http://codepad.org/sn6mGsu4 –

+0

ありがとうございました。それは私がHEREDOC構文を実際に理解していないことはかなり明白ですが、私は今それを得たと思います。 –

0

問題があるように思われる、貴社のヒアドキュメントの割り当てのためのインデント決算ラベル。 ENTRY_DISPLAY;(など)は、コード内で何が起こっているかにかかわらず、列1まで左に移動する必要があります。

+0

私はそれが愚かな質問だったと思ったが、それは知るのに非常に有用である。ありがとうございました! –

+0

@ sh1ps:本当に愚かな質問ではない(少なくとも最初の時間ではない:-)。コマンドラインから実行すると、 'Parse error:構文エラー、予期せぬ$ end of test.php in line 182'というエラーが発生しました。まあ、ファイルには* 181行しか入っていなかったので、私はすぐに見積もりなどを閉じることができなかったことをすぐに知っていました。まともなシンタックスカラーエディタは、これらの種類のものを捕まえるのに便利です。 –