質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.62%

  • PHP

    19784questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • MySQL

    5686questions

    MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

  • Cloud9

    404questions

    Cloud9は、クラウドからのプログラミングが可能になるWebサービス。IDEとしての機能が搭載されており、GitHubやHerokuなど他ツールとの連携も可能です。ブラウザ上で動くため、デバイスに関係なく開発環境を準備できます。

PHPがブラウザでソースのみ表示される

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 2
  • VIEW 192

wanwano2828

score 2

 PHPをブラウザ上でプレビューすると、ソースのみが表示されてしまう。

ここに質問の内容を詳しく書いてください。
以前にPHPで本棚サイトを為すシステムを作り、動作も大丈夫でした。
久しぶりにcloud9を開いてプレビューをしたときに以下の問題が発生しました。

 発生している問題・エラーメッセージ

プログラムの一切が表示されず、ソースコードがそのまま出力。

 該当のソースコード

<?php
    function h($str) {
        return htmlspecialchars($str, ENT_QUOTES, 'UTF-8');
    }

    // MySQLサーバ接続に必要な値を変数に代入
    $host = 'localhost';
    $username = 'root';
    $password = '';
    $db_name = 'bookshelf';

    // 変数を設定して、MySQLサーバに接続
    $database = mysqli_connect($host, $username, $password, $db_name);

    // 接続を確認し、接続できていない場合にはエラーを出力して終了する
    if ($database == false) {
        die('Connect Error (' . mysqli_connect_errno() . ') ' . mysqli_connect_error());
    }

    // MySQL に utf8 で接続するための設定をする
    $charset = 'utf8';
    mysqli_set_charset($database, $charset);

    // ここにMySQLを使ったなんらかの処理を書く

    // bookshelf_form.phpから送られてくる書籍データの登録
    if ($_POST['submit_add_book']) {
        // まずは送られてきた画像をuploadsフォルダに移動させる
        $file_name = $_FILES['add_book_image']['name'];
        $image_path = './uploads/' . $file_name;
        move_uploaded_file($_FILES['add_book_image']['tmp_name'], $image_path);

        // データベースに書籍を新規登録する
        $sql = 'INSERT INTO books (title, image_url, status) VALUES(?, ?, "unread")';
        $statement = mysqli_prepare($database, $sql);
        mysqli_stmt_bind_param($statement, 'ss', $_POST['add_book_title'], $image_path);
        mysqli_stmt_execute($statement);
        mysqli_stmt_close($statement);
    }

    // ステータス変更の処理
    if ($_POST['submit_book_unread']) {
        // 未読へ変更
        $sql = 'UPDATE books SET status="unread" WHERE id=?';       // 実行するSQLを作成
        $statement = mysqli_prepare($database, $sql);                // セキュリティ対策をする
        mysqli_stmt_bind_param($statement, 'i', $_POST['book_id']);  // id=?の?の部分に代入する
        mysqli_stmt_execute($statement);                             // SQL文を実行する
        mysqli_stmt_close($statement);                               // SQL文を破棄する
    }
    elseif ($_POST['submit_book_reading']) {
        // 読中へ変更
        $sql = 'UPDATE books SET status="reading" WHERE id=?';
        $statement = mysqli_prepare($database, $sql);
        mysqli_stmt_bind_param($statement, 'i', $_POST['book_id']);
        mysqli_stmt_execute($statement);
        mysqli_stmt_close($statement);
    }
    elseif ($_POST['submit_book_finished']) {
        // 読了へ変更
        $sql = 'UPDATE books SET status="finished" WHERE id=?';
        $statement = mysqli_prepare($database, $sql);
        mysqli_stmt_bind_param($statement, 'i', $_POST['book_id']);
        mysqli_stmt_execute($statement);
        mysqli_stmt_close($statement);
    }

   if ($_POST['submit_book_delete']) {
       //【課題】削除実行
       $sql = 'DELETE FROM bookshelf.books WHERE id = ?';
       $statement = mysqli_prepare($database, $sql);
        mysqli_stmt_bind_param($statement, 'i', $_POST['book_id']);
        mysqli_stmt_execute($statement);
        mysqli_stmt_close($statement);
   }
    // 未読数のカウント
    $sql = 'SELECT COUNT(*) as count FROM books where status = "unread"';
    $result = mysqli_query($database, $sql);
    $record = mysqli_fetch_assoc($result);
    $count_unread = $record['count'];
    // 読中数のカウント
    $sql = 'SELECT COUNT(*) as count FROM books where status = "reading"';
    $result = mysqli_query($database, $sql);
    $record = mysqli_fetch_assoc($result);
    $count_reading = $record['count'];
    // 読了数のカウント
    $sql = 'SELECT COUNT(*) as count FROM books where status = "finished"';
    $result = mysqli_query($database, $sql);
    $record = mysqli_fetch_assoc($result);
    $count_finished = $record['count'];

    // どれも$resultにレコードが代入されるので、どの場合でも$resultを使う
    if ($_POST['submit_only_unread']) {
        // 未読ステータスの書籍だけを取得する
        $sql = 'SELECT * FROM books WHERE status="unread" ORDER BY created_at DESC';
    }
    elseif ($_POST['submit_only_reading']) {
        // 読中ステータスの書籍だけを取得する
        $sql = 'SELECT * FROM books WHERE status="reading" ORDER BY created_at DESC';
    }
    elseif ($_POST['submit_only_finished']) {
        // 読了ステータスの書籍だけを取得する
        $sql = 'SELECT * FROM books WHERE status="finished" ORDER BY created_at DESC';
    }
    else {
        // 登録されている書籍を全て取得する
        $sql = 'SELECT * FROM books ORDER BY created_at DESC';
        $statement = mysqli_prepare($database, $sql);
        mysqli_stmt_bind_param($statement, 'i', $_POST['book_id']);
        mysqli_stmt_execute($statement);
        mysqli_stmt_close($statement);
    }

    // if-elseif-else 文なので、 $sql には必ず上記いずれかの SQL 文が入る
    // いずれかの $sql を実行して $result に代入する
    $result = mysqli_query($database, $sql);

    // MySQLを使った処理が終わると、接続は不要なので切断する
    mysqli_close($database);

?>
<!DOCTYPE html>
<html lang="ja">
    <head>
        <meta charset="utf-8">
        <title>Bookshelf | カンタン!あなたのオンライン本棚</title>
        <link rel="stylesheet" href="bookshelf.css">
    </head>
    <body>
        <header>
            <div id="header">
                <div id="logo">
                    <a href="./bookshelf_index.php"><img src="./images/logo.png" alt="Bookshelf"></a>
                </div>
                <nav>
                    <a href="./bookshelf_form.php"><img src="./images/icon_plus.png" alt=""> 書籍登録</a>
                </nav>
            </div>
        </header>
        <div id="cover">
            <h1 id="cover_title">カンタン!あなたのオンライン本棚</h1>
            <form action="bookshelf_index.php" method="post">
                <div class="book_status unread active">
                    <input type="submit" name="submit_only_unread" value="未読">
                    <div class="book_count"><?php print h($count_unread); ?></div>
                </div>
                <div class="book_status reading active">
                    <input type="submit" name="submit_only_reading" value="読中"><br>
                    <div class="book_count"><?php print h($count_reading); ?></div>
                </div>
                <div class="book_status finished active">
                    <input type="submit" name="submit_only_finished" value="読了"><br>
                    <div class="book_count"><?php print h($count_finished); ?></div>
                </div>
            </form>
        </div>
        <div class="wrapper">
            <div id="main">
                <div id="book_list" class="clearfix">
<?php
                    if ($result) {
                        while ($record = mysqli_fetch_assoc($result)) {
                            // 1レコード分の値をそれぞれ変数に代入する
                            $id = $record['id'];
                            $title = $record['title'];
                            $image_url = $record['image_url'];
                            $status = $record['status'];
?>
                            <div class="book_item">
                                <div class="book_image">
                                    <img src="<?php print h($image_url); ?>" alt="">
                                </div>
                                <div class="book_detail">
                                    <div class="book_title">
                                        <?php print h($title); ?>
                                    </div>
                                    <form action="bookshelf_index.php" method="post">
                                        <input type="hidden" name="book_id" value="<?php print h($id); ?>">
                                        <div class="book_status unread <?php if ($status == "unread") print "active"; ?>">
                                        <input type="submit" name="submit_book_unread" value="未読">
                                        </div>
                                        <div class="book_status reading <?php if ($status == "reading") print "active"; ?>">
                                            <input type="submit" name="submit_book_reading" value="読中">
                                        </div>
                                        <div class="book_status finished <?php if ($status == "finished") print "active"; ?>">
                                            <input type="submit" name="submit_book_finished" value="読了">
                                        </div>
                                    </form>
                                    <form action="bookshelf_index.php" method="post">
                                        <input type="hidden" name="book_id" value="<?php print h($id); ?>">
                                        <div class="book_delete">
                                          <input type="submit" name="submit_book_delete" value="削除する"><img src="images/icon_trash.png" alt="icon trash">
                                        </div>
                                    </form>
                                </div>
                            </div>
<?php
                        }
                        mysqli_free_result($result);
                    }
?>
                </div>
            </div>
        </div>
        <footer>
            <small>© 2016 Bookshelf.</small>
        </footer>
    </body>
</html>

 試したこと

cloud9、Mysqlの再起動。
cloud9上とブラウザの別タブでプレビュー

 補足情報(FW/ツールのバージョンなど)

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • mts10806

    2018/05/03 19:05

    asahina1979さん。それですね。コード自体はロジックとか文法部分はともかくとして問題なさそうですし。

    キャンセル

  • wanwano2828

    2018/05/03 19:16

    >asahina1979さん すみません。まだプログラミングを学んだばかりで適切な回答ができておりませんでした。mime-typeは特に設定しておりません。

    キャンセル

  • mts10806

    2018/05/06 18:57

    あとはざっくり確認しかないですね。例えば前半のPHP部分だけ残して他は全部削除して(もちろん全体バックアップはとってから作業して) どうなるか、前半を削除して後半のみを残した場合、とか。サーバーが正常稼働していてphpファイルなのであればどこに原因があるか少しずつ削って突き詰めていかなければなりません。あと、可能であれば、画面キャプチャを添付していただくことは可能ですか?見ている回答者側が思っていることと質問者さんが見ているものが全く同じとは限りません(その際、ドメイン部分のみマスクをかけたアクセスURLがわかるような状態にしていただけると助かります)

    キャンセル

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.62%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    動的にレコードを更新するプログラムにおいて、レコードを更新するパートができない

    動的にレコードを更新するプログラムをつくっています。 update2のボタンを押してレコードを選択すると、名前や値段を入力するフォームが表示され、それに入力すればレコードを更新で

  • 解決済

    mysqliで書き直したい。

    これをmysqliにしたいのですが、どのようにかけるのでしょうか? 初心者なので、mysqliはやったことがないのですが... <?php $dsn = "mysql:db

  • 解決済

    複数の変数のupdateについて

    各店舗(id)のリーダー(leaders)に、なる(value=2)ならない(value=3)をupdateしたいのですが以下のコードを実行してもカラムの値が変わることはありません

  • 解決済

    【PHP】ログイン機能の実装

    PHP初心者です。 PHPの勉強がてら、会員制のページを作成してます。 新規会員登録機能は実装できていますが、 ログイン機能の実装がうまくいきません。 やりたいことを実

  • 解決済

    PHP MySQL の連携

    PHPのWEBサイトで名前、年齢を登録ボタンを押すとMYSQLのテーブルに格納させる設定方法を教えて下さい。(レンタルサーバで各ソフトはインストールしています。)  PHPとMYS

  • 解決済

    [PHP]POSTに失敗してしまいます

    PHP勉強中の者です。現在自動販売機作成ツールの管理画面を作成しているのですが、POSTの処理につまずいてしまっています。 ご教授頂ければ幸いです。 現在作成しているコードは以下の

  • 解決済

    検索結果ページのnullの場合の条件分岐について

    勤務地等何かを選択すると、 検索結果が表示されるのですが、全件表示がうまくいきません。 問題:何も選択せずに検索ボタンを押すと、 0件と表示される。 試した方法 ●$_PO

  • 解決済

    PHPで検索機能を作成していますが、NULLになります。

    PHPで検索機能を作成しています。 あいまい検索で検索できるようにしていますが、下記の画像のように検索フォームから→検索結果画面を見るとNULLになってしまいます。 本当は、キ

同じタグがついた質問を見る

  • PHP

    19784questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • MySQL

    5686questions

    MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

  • Cloud9

    404questions

    Cloud9は、クラウドからのプログラミングが可能になるWebサービス。IDEとしての機能が搭載されており、GitHubやHerokuなど他ツールとの連携も可能です。ブラウザ上で動くため、デバイスに関係なく開発環境を準備できます。