0

私は友人のプロジェクトに取り組んでおり、彼のデータベースとインターフェイスするための簡単なWebサイトの設計を担当しています。私は彼のページの1つに次のコードを書きました。

<!DOCTYPE html>

<html>
    <head>
        <title>Narcissus-OTS</title>
        <meta charset="utf-8" />
        <!--<meta http-equiv="refresh" content="3;url=./account.php" />-->
    </head>
    <body>
        <?php include("./common/database.php"); ?>
        <?php
            //Grabs user-submitted credentials from previous page
            $accountid = mysql_escape_string($_POST["acc"]);
            $password = mysql_escape_string($_POST["pass"]);
            $confirmation = mysql_escape_string($_POST["passtwo"]);
            //Insures there is no duplicate database entry for accountid
            $querycheck = $db->query("
                SELECT *
                    FROM accounts a
                    WHERE a.name = $accountid
                ");
            $checkifone = $querycheck->rowCount();
            //If no duplicate entry...
            if ($checkifone == 1) {
                echo "There is already an account with that name; please choose a different account number.";
            } else {
            //Confirms if passwords match
                if ($password == $confirmation) {
                    $passhash = sha1($password);
                    $database = $db->query("
                        INSERT INTO accounts
                            VALUES (NULL , '$accountid', '$passhash', '65535', '0', '', '1', '0', '0', '1');
                    ");
                    echo "Your account has been successfully created.";
                //If passwords do not match
                } else {
                    echo "Your passwords did not match, please try again.";
                }
            }
        ?>
    </body>
</html>         

</body>ページを読み込んでページソースを表示すると、終了タグまたは終了タグが表示されないようです</html>。コードをトレースしましたが、欠落しているセミコロンや括弧が表示されません。私の人生のために、私はこれを理解することができません。パスワードが一致しない場合にのみ、終了タグが正しく表示されます(一番下にネストされたelseステートメント)。

編集; そして、誰かがそれを言う前に、私mysql_escape_stringは非推奨であることを知っています。

edit2; database.phpは次のようになります...

<?php
    $SERVER   = "localhost";
    $USERNAME = "redacted";
    $PASSWORD = "redacted";
    $DATABASE = "redacted";
    $db = new PDO("mysql:dbname={$DATABASE}; host={$SERVER}", $USERNAME, $PASSWORD);
    $db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
?>
4

1 に答える 1

1

この問題や将来このような問題を解決するための最善の策はtail、サーバーログを調べて、問題が正確に何であるかを判断することです。

の場合apache2

tail -f /var/log/apache2/error.log

の場合nginx

tail -f /var/log/nginx/error.log

于 2013-02-02T04:26:10.240 に答える