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

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

新規登録して質問してみよう
ただいま回答率
87.20%
MySQL

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

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

PHP

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

MAMP

Mac 上で WordPress などの動的ページのサイトが作れるように環境を構築するフリーソフト

受付中

PHP データベースエラーが出る! ( mysql_result() )

退会済みユーザー

退会済みユーザー

総合スコア0

MySQL

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

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

PHP

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

MAMP

Mac 上で WordPress などの動的ページのサイトが作れるように環境を構築するフリーソフト

4回答

0評価

0クリップ

6286閲覧

投稿2016/09/06 15:54

編集2022/01/12 10:55
/* (^_^) ERRORS (>_<) */ Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in bbs.php on line 7 Warning: mysql_result() expects parameter 1 to be resource, boolean given in bbs.php on line 36 // これ Warning: Cannot modify header information - headers already sent by (output started at bbs.php:7) in bbs.php on line 48 Warning: Cannot modify header information - headers already sent by (output started at bbs.php:7) in bbs.php on line 49 Warning: Cannot modify header information - headers already sent by (output started at bbs.php:7) in bbs.php on line 52

PHP

<?php /* version 5.6.10*/ // MySQL接続部分 $conn = mysql_connect('localhost:8888', 'example', 'example'); mysql_select_db('example', $conn); mysql_query('SET NAMES ujis', $conn); // 投稿処理 if ( !empty($_POST["dopost"]) && !empty($_POST["name"]) ) { // クエリがエラーになったら、テーブルが存在しないと見て新規作成 if ( !mysql_query( "SELECT cout(*) FROM bbs ", $conn) ) { mysql_query( "CREATE TABLE bbs ( id INT UNSIGNED NOT NULL AUTO_INCREMENT, name VARCHAR(255) NOT NULL default '', title VARCHAR(255) NOT NULL default '', body TEXT, pass VARCHAR(255) NOT NULL default '', postdate DATETIME NOT NULL, PRIMARY KEY (id) ) TYPE=MyISAM" , $conn); } // パスワードが指定されていなければ、クッキーのパスワードで上書きする if ( empty($_POST["pass"]) && !empty($_COOKIE["pass"]) ) { $_POST["pass"] = $_COOKIE["pass"]; } // 名前とパスワードの一致を確認 $sql = "SELECT COUNT(*) FROM bbs WHERE name = '" . $_POST["name"] . "' AND pass<>'" . $_POST["pass"] . "'"; $rs = mysql_query($sql, $conn); if ( mysql_result($rs, 0, 0) ) { // 同じ名前で、パスワードの異なるレコードがあれば受付拒否 header( "Location: http://" . $_SERVER['HTTP_HOST'] . $_SERVER['SCRIPT_NAME'] . '?message=' . urlencode('その名前は既に使われています') ); exit; } // 投稿内容をデータベースへ書き込む $sql = "INSERT INTO bbs SET name='" . $_POST["name"] . "', title='" . $_POST["title"] . "', body='" . $_POST["body"] . "', pass='" . $_POST["pass"] . "', postdate=NOW()"; mysql_query($sql, $conn); // 次回の投稿・管理用に、クッキーに名前とパスワードを保存する setcookie( 'name', $_POST["name"], time()+60*60*24*30 ); setcookie( 'pass', $_POST["pass"], time()+60*60*24+30 ); // 投稿したらリダイレクト header( "Location: http//" . $_SERVER['HTTP_HOST'] . $_SERVER['SCRIPT_NAME'] . '?message=' . urlencode('登録しました') ); exit; } // メッセージ削除処理 if ( !empty($_POST['delete']) ) { // パスワードが指定されていなければ、クッキーのパスワードで上書きする if ( empty($_POST["pass"]) && !empty($_COOKIE["pass"]) ) { $_POST["pass"] = $_COOKIE["pass"]; } // idとパスワードが一致したら、削除 $sql = "DELETENFROM bbs WHERE id=" . $_POST["id"] . "AND pass='" . $_POST["pass"] . "'LIMIT 1"; mysql_query($sql, $conn); $message = mysql_affected_rows ? "削除しました" : "パスワードが違います"; // 削除したらリダイレクト header( "Location: http://" . $_SERVER['HTTP_HOST'] . $_SERVER['SCRIPT_NAME'] . "?message=" . urlencode($message) ); exit; } // キャラクーセットの指定 header( "Content-Type: text/html; charset=EUC-JP" ); // HTML開始部 echo '<!DOCTYPE html><html lang="ja"><head><meta http-equiv="Content-Type: text/html; charset=EUC-JP" /><title>脆弱性だらけの掲示板</title></head><body>'; // メッセージがあれば表示 if ( !empty($_GET['message']) ) { echo '<p style="color:red;">' . $_GET['message'] . '</p>'; } // フォーム描画処理 echo '<form action="' . $_SERVER['PHP_SELF'] . '" method="post">'; echo '名前 : <input type="text" name="name" value="' . @$_COOKIE['name'] . '" /><br />'; echo '題名 : <input type="text" name="title" /><br />'; echo '内容 : <br /> <textarea name="body" rows="4" cols="40"></textarea><br />'; echo 'パスワード : <input type="password" name="pass" size="8" value="" /><br /><br />'; echo '<input type="submit" name="dopost" value="投稿" />'; echo '<input type="reset" value="リセット" />'; echo '</form>'; echo '<hr />'; // 過去の投稿表示部分 (最新順に10件のみ表示) $sql = "SELECT * FROM bbs ORDER BY postdate DESC LIMIT 10"; $result = mysql_query($sql, $conn); if ( $result ) { while ( $row = mysql_fetch_array($result, MYSQL_ASSOC) ) { echo '<p>'; echo 'No.' . $row['id'] . '<br />'; echo '題名 : ' . $row['title'] . '<br />'; echo '名前 : ' . $row['name'] . '<br />'; echo '日時 : ' . $row['postdate'] . '<br />'; echo '<blockquote>' . n12br($row['body']) . '</blockquote>'; echo 'パスワード : ' . $row['pass'] . '<br />'; echo '</p><hr />'; } } // 削除よう echo '<form action"' . $_SERVER['PHP_SELF'] . '" method="post">'; echo '記事No.<input type="text" name="id" size="4" />'; echo 'パスワード<input type="password name="pass" size="8" value="" />'; echo '<input type="submit" name="delete" value="記事削除" />'; echo '</form>'; // HTML終了部 echo '</body></html>';

PHPサイバーテロの技法という本でwebアプリのセキュリティ対策について学んでいるのですが、その本のPHPはバージョンが古く、データベースへの接続はmysql_connectを使用しています。
私には現代風のPDOに書き換えることができないのでMAMPでPHPのバージョン設定を5.6.10にし、PHPMyAdminを用いてユーザーを作成し、プログラムを実行し、投稿ボタンより投稿したのですが、エラーとなります。

いろいろ調べてみると、真偽値がどうこうとのことですが、全くわかりません。
また、サンプルコードでも同じエラーが出ます。

どうしたら、上記のプログラムを実行できますか?

Warning: mysql_result() expects parameter 1 to be resource, boolean given in bbs.php on line 36

このエラー(↑)はどう対応したらいいのですか?

ちなみに本書での実行環境であるXAMPPで実行したら、サンプルコードでは登録しましたの文字のみが表示されました。
私のプログラムは相変わらずエラーです。

※ 先述した通り、私にはmysql_connectをPDOのプログラムに書き換える能力がないのでPDOを使いなさいとの回答はお控えください...
書き換えたコードをくれるのであれば別ですが...!

良い質問の評価を上げる

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

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

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

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

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

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

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

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

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

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

会員登録して回答してみよう

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

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

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

MySQL

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

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

PHP

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

MAMP

Mac 上で WordPress などの動的ページのサイトが作れるように環境を構築するフリーソフト