PHPで問題を出題するプログラムを作成する方法

このQ&Aのポイント
  • PHPを使用して問題を出題するプログラムを作成する方法について解説します。
  • write.phpというファイルで問題を入力し、hantei.phpというファイルでデータベースに格納する方法について説明します。
  • 回答欄に回答を入力してもデータベースに格納されない問題が発生しています。それを解決するためには、forループで回す度に<input>タグのname属性を変更し、変更したnameを受け取って格納する必要があります。
回答を見る
  • ベストアンサー

PHPで問題を出題するプログラムを作っています

write.phpというファイルで入力し、hantei.phpというファイルでデータベースに格納を行おうとしています 回答欄はデータベース内の模範解答が入っているテー ブルのレコード数を数えてforループで表示しています。 表示された回答欄に回答を入力しても、データベースに格納されません。 調べたところ、forループで回す度に<input name="responce" type="text" id="responce">のなかのnameが変わらなければならないとのことです。 また、変化したnameを受け取って格納しなければならないと書いてありました。 エラー内容は Undefined index: responce0 in hantei.php on line 16 Undefined index: responce1 in hantei.php on line 17 Undefined index: responce2 in hantei.php on line 18 Undefined index: responce3 in hantei.php on line 19 Undefined index: responce4 in hantei.php on line 20 Undefined index: responce5 in hantei.php on line 21 となっていました 以下ソースコードです。 write.php <form action="hantei.php" method = "get"> <?php //データベースの選択 mysql_connect('localhost', 'root', '') or die(mysql_error()); mysql_select_db('text_book'); mysql_query('SET NAMES UTF8'); <?php //レコード数の計算 $ans = mysql_query("SELECT COUNT(answer) FROM `write` WHERE problem_id = 1"); //回答欄の表示 for($i = 0; $i <= $ans; $i++){ echo"$i"; ?> <dd> <input name="responce" type="text" id="responce" /> </dd> <?php } ?> <input type="submit" valued="送信する"> hantei.php <?php //データベースの選択 mysql_connect('localhost', 'root', '') or die(mysql_error()); mysql_select_db('text_book'); mysql_query('SET NAMES UTF8'); //回答結果の格納 $response = sprintf("INSERT INTO learner_responce SET responce='%s'", mysql_real_escape_string($_GET["responce0"]), mysql_real_escape_string($_GET["responce1"]), mysql_real_escape_string($_GET["responce2"]), mysql_real_escape_string($_GET["responce3"]), mysql_real_escape_string($_GET["responce4"]), mysql_real_escape_string($_GET["responce5"]) ); mysql_query($response) or die(mysql_error()); ?> <form method = "get" action = "write.php"> <input type="submit" valued="戻る">

  • PHP
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

質問は問題・疑問点を簡素にピンポイントで書かれたほうが良いと思いますよ。 私の代わりに無料でソースコード作って的質問はよほどな人じゃないと回答来ないかと・・・・

X-bone
質問者

お礼

初投稿なのでどのように書いたらわかりやすいのかが分からなかったため、冗長な文になってしましました。 アドバイス通りにもっと簡潔な文章にします。 ありがとうございます

関連するQ&A

  • 【php】改行にエスケープ文字が入る

    phpで  $_GET['a'] = stripslashes($_GET['a']); $_GET['a'] = mysql_real_escape_string($_GET['a']); $_GET['a'] → インサート と途中に stripslashes mysql_real_escape_string をはさんでから GETやPOSTを取得してるんですが改行が改行コードに変わってしまいます。 例えば質問フォームとかで  ---------------------------------------- 質問内容 ---------------------------------------- なんたら かんたら  ↓ サブミット ---------------------------------------- 投稿確認 ---------------------------------------- なんたら\n\rかんたら みたいなかんじです。 一旦文字コードをEUCにかえてから mysql_real_escape_stringを挟んだりしたりもしてみてますが 改行が改行コードになってしまいます。

    • ベストアンサー
    • PHP
  • PHP エラー

    PHP勉強中の初心者です。会員登録画面を作り動作確認しているのですが ログインするときに下記のエラーが出ます。 Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'nakahiro7'@'localhost' (using password: NO) in /home/nakahiro7/nakahiro7.webcrow.jp/public_html/public_html/login.php on line 15 Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in /home/nakahiro7/nakahiro7.webcrow.jp/public_html/public_html/login.php on line 15 Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'nakahiro7'@'localhost' (using password: NO) in /home/nakahiro7/nakahiro7.webcrow.jp/public_html/public_html/login.php on line 16 Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in /home/nakahiro7/nakahiro7.webcrow.jp/public_html/public_html/login.php on line 16 Warning: mysql_query() [function.mysql-query]: Access denied for user 'nakahiro7'@'localhost' (using password: NO) in /home/nakahiro7/nakahiro7.webcrow.jp/public_html/public_html/login.php on line 18 Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in /home/nakahiro7/nakahiro7.webcrow.jp/public_html/public_html/login.php on line 18 Access denied for user 'nakahiro7'@'localhost' (using password: NO) login.phpのソースは下記です <?php require('dbconnect.php'); session_start(); if ($_COOKIE['email'] != ''){ $_POST['email'] = $_COOKIE['email']; $_POST['password'] = $_COOKIE['password']; $_POST['save'] = 'on'; } if(!empty($_POST)) //ログインの処理 if ($_POST['email'] != '' && $_POST['password'] != ''){ $sql = sprintf('SELECT * FROM member WHERE email="%s" AND password="&s"', mysql_real_escape_string($_POST['email']), mysql_real_escape_string(sha1($_POST ['password']))); $record = mysql_query($sql) or die(mysql_error()); if ($table = mysql_fetch_assoc($record)) { //ログイン成功 $_SESSION['id'] = $table['id']; $_SESSION['time'] = time(); //ログイン情報を記録する if ($_POST['save'] == 'on') { setcookie('email',$_POST['email'],time()+60*60*24*14); setcookie('password',$_POST['password'], time()+60*60*24*14); } header('Location: index.php'); exit();}else{ $error['login'] = 'failed'; }}else{ $error['login'] = 'blank'; } ?> <div id="lead"> <p>アドレスとパスワードを入力しログインしてください</p> <p>メンバーズ登録がまだの方はこちら</p> <p>&raquo;<a href="join/">メンバーズ登録をする</a></p> </div> <form action="" method="post"> <d1> <dt>アドレス</dt> <dd> <input type="text" name="email" size="35" maxlength="255" value="<?php echo htmlspecialchars($_POST['email']); ?>" /> <?php if($error['login'] == 'blank'): ?> <p class="error">*アドレスとパスワードを記入ください</p> <?php endif; ?> <?php if ($eoor['login'] == 'failed'): ?> <p class="error">*ログインに失敗しました。正しく入力してください。</p> <?php endif; ?> </dd> <dt>pasword</dt> <dd> <input type="password" name="password" size="35" maxlength="255" value="<?php echo htmlspecialchars($_POST['password']); ?>" /> </dd> <dt></dt> <dd><input id="save" type="checkbox" name="save" value="on"> <label for="save">次回から自動的にログイン</label> </dd> </d1> <div> <input type="submit" value="Log in"/></div> </form> ググりまくりましたが解決できませんでした。 エラーの解決方法 その他ご指摘ありましたらお願いいたします。

    • ベストアンサー
    • PHP
  • エラーの意味と対策

    PHP-MySQL間でデータを更新するプログラムを作成、PHPファイルを 読み出し更新を行おうとしたところ、以下のメッセージが表示されました。 データの更新はできているのですが、このメッセージがよくわかりません。 Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'ODBC'@'localhost' (using password: NO) in E:\(ディレクトリ)\delete.php on line 106 Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in E:\(ディレクトリ)\delete.php on line 106 ここに書かれているコードはSQLで $sql_update = "UPDATE ITEM SET DELETE_FLAG=1,LASTUPDATE_USER='".htmlspecialchars(mysql_real_escape_string($_COOKIE["loginuser"]),ENT_QUOTES)."',LASTUPDATE_DTTM=NOW() WHERE ITEM_ID=".$key; となっています。 今のところ「mysql_real_escape_string」をはずすとエラーが出ないのですが、 エラーの意味、原因、対策についてコメントいただければと思います。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHPのPDOについて

    例えば手続き型でしたら、値をデータベースに追加するとき $sql = sprintf( 'INSERT INTO member SET id=%d, message="%s" ', mysql_real_escape_string($id), mysql_real_escape_string($message) ); mysql_query($sql) or die(mysql_error()); など「mysql_real_escape_string」を使って多少なりともセキュリティーをかけると思うのですが、PDOですと下記に書かれている以外に見たことないのですが、「mysql_real_escape_string」などはやらなくても大丈夫ということなのでしょうか? PDOの場合 $sql = 'INSERT INTO member SET id=?, message=?'; $stmt = $db->prepare($sql); $stmt->execute(array($id, $message)); 色々調べてみたのですがいまいち分からないためよろしくお願いします。

    • ベストアンサー
    • PHP
  • よくわかるPHPの教科書から、

    「Twitter風ひとこと掲示板」の作成でのエラー。 [OK] ・データーベース作成 ・会員登録画面から登録可能 ・データベースを見ると登録されていること確認 http://higelatta.bob.buttobi.net/nise_twitter/index.php http://higelatta.bob.buttobi.net/nise_twitter/login.php [NG] ・ログイン画面でログイン後、TOPのindex.php画面に飛んだとき、エラーが発生 ■エラー内容 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-5, 5' at line 1 以上です。 SQL文にエラーがありますと、バージョンがどーのこーのといっているようですが、 具体的な解決方法がわかりません。 以下に、TOPのindex.phpのソースを少々添付いたします。 <?php session_start(); require('dbconnect.php'); if (isset($_SESSION['id']) && $_SESSION['time'] + 3600 > time()) { // ログインしている $_SESSION['time'] = time(); $sql = sprintf('SELECT * FROM members WHERE id=%d', mysql_real_escape_string($_SESSION['id']) ); $record = mysql_query($sql) or die(mysql_query()); $member = mysql_fetch_assoc($record); } else { // ログインしていない header('Location: login.php'); } // 投稿を記録する if (!empty($_POST)) { if ($_POST['message'] != '') { $sql = sprintf('INSERT INTO posts SET member_id=%d, message="%s", reply_post_id=%d, created=NOW()', mysql_real_escape_string($member['id']), mysql_real_escape_string($_POST['message']), mysql_real_escape_string($_POST['reply_post_id']) ); mysql_query($sql) or die(mysql_error()); header('Location: index.php'); } } // 投稿を取得する $page = $_REQUEST['page']; if ($page == '') { $page = 1; } $page = max($page, 1); 以上です。 長々と申し訳ありません。 おそらく、 if (isset($_SESSION['id']) && $_SESSION['time'] + 3600 > time()) { 付近に問題があるのかなと思うのですが、 詳しい方ご教授願います。

    • ベストアンサー
    • PHP
  • レンタルサーバでPHP(pico)からMySQLに接続したい

    初めて質問させていただきます。 phpもmySQLも初心者なのでもしおかしいところや足りないところがありましたらご指摘ください。 レンタルサーバ(お名前.com)にて、xoops cubeをインストール。 picoモジュールを追加。 phpmyadminモジュールを追加し、自前テーブルを作成。 picoのコンテンツ編集により、phpプログラムを記述し、自前テーブルに接続。 やっている内容は、 リストボックスで選択された単語からDBを検索するフォームをPOSTで送信 次ページにて一覧を表示する です。 自分記述したphpプログラムでDBConnectしています。 問題箇所は、 検索結果は表示され、想定した通りのhtmlが表示されるのですが、ページの一番下に以下のコメントが表示されてしまいます。 Warning [PHP]: mysql_real_escape_string() [function.mysql-real-escape-string]: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in file xoops_trust_path/modules/pico/main/index.php line 83 Warning [PHP]: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in file xoops_trust_path/modules/pico/main/index.php line 83 色々調べてみたところ、socketの相違だと思い、以下を調べました。 phpinfo()にて表示されたsocketは「/tmp/mysql.sock」 phpmyadminから見た変数socketは「/tmp/mysql.sock」 上記のように、相違はない模様。 DBの内容も取って来れてるので問題はないのですが、画面に常にエラー表示がされてしまうのはとても気になります。 原因に思い当たるふしがあればご教授願えませんでしょうか。 ちなみにレンタルサーバなのでphp.iniは変更出来ません。

    • 締切済み
    • PHP
  • MySQLでshal()関数のエラーがでます

    Fatal error: Call to undefined function shal() in C:\xampplite\htdocs\HP2\join\check.php on line 14 とエラーがでてきます。 原因がわからなくて困っています。 どなたか回答よろしくお願いします。 if (!empty($_POST)) { //登録処理をする $sql = sprintf('INSERT INTO members SET name="%s", email="%s", password"%s", created"%s"', mysql_real_escape_string($_SESSION['join']['name']), mysql_real_escape_string($_SESSION['join']['email']), shal(mysql_real_escape_string($_SESSION['join']['password'])), date('Y-m-d H:i:s')); mysql_query($sql) or die(mysql_error()); unset($_SESSION['join']); header('Location: thanks.php'); } ?>

    • ベストアンサー
    • MySQL
  • php5+Mysql5による条件検索とその表示方法が上手く動作しないのでどなたかご指摘をお願いします。

    phpにて条件検索を行っているのですが、『where』以下を$変数にすると動かなくなってしまいます。記述部分で何が間違っているのでしょうか? 以下記述↓ <? $link = db_con(); //←DB接続 $sql = "select * from tbl where id = '" . mysql_real_escape_string( $_GET['id'] ) . "' and name like '%" . mysql_real_escape_string( $_GET['name'] ) . "%' "; $result = mysql_query( $sql ) ; $num_rows = mysql_num_rows( $result ); ?> ここまで↑ を下記のように『where』以下を$変数にして代入 $変数した場合↓ <? $where .= "id = '" . mysql_real_escape_string( $_GET['id'] ) . "' and name like '%" . mysql_real_escape_string( $_GET['name'] ) . "%' "; $link = db_con(); //←DB接続 $sql = "select * from tbl where $where "; $result = mysql_query( $sql ) ; $num_rows = mysql_num_rows( $result ); ?> ここまで↑ どなたかご指摘をお願いします。

  • どうしてもPHPのエラーが消えまえん。

    今週からPHPを勉強し始めました。 書籍を元に勉強をしているのですが、書籍通りの内容で書き、 どんなに調べても、どうしてもエラーが消えません。 お知恵をお貸し頂けると幸いです。 エラー内容はコチラです。 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ':20130514235839, created="2013-05-15 08:27:09"' at line 1 エラーページのコードは下記です。 <?php session_start(); require('../function.php'); if(!isset($_SESSION['sign_up'])){ header('Location: index.php'); exit(); } if (!empty($_POST)) { // 登録処理をする $sql = sprintf('INSERT INTO members SET name="%s", mail="%s", pass="%s", image=:%s, created="%s"', mysql_real_escape_string($_SESSION['sign_up']['name']), mysql_real_escape_string($_SESSION['sign_up']['mail']), mysql_real_escape_string(sha1($_SESSION['sign_up']['pass'])), mysql_real_escape_string($_SESSION['sign_up']['image']), date('Y-m-d H:i:s') ); mysql_query($sql) or die(mysql_error()); unset($_SESSION['sign_up']); header('Location: finish.php'); exit(); } 念のため、phpmyadminの画面をあげておきます。 http://cl.ly/image/3M002J1S0q0N 以上よろしくお願い致します。

    • ベストアンサー
    • PHP
  • PDOとmysql_real_escape_str

    PDOとmysql_real_escape_string() RHEL5 Apache2.x PHP Version 5.3.5 MySQL 5.1.45 を使っています。 PDOでMySQLにアクセスしている場合、、 mysql_real_escape_stringを使うと エラーになります。 Warning: mysql_real_escape_string(): Access denied for user 'apache'@'localhost' (using password: NO) in /var/www/html/hogehoge/main.php on line 190 Warning: mysql_real_escape_string(): A link to the server could not be established in /var/www/html/hogehoge/main.php on line 190 で、いろいろ調べてみたのですが、 PDOを使っている場合は、mysql_real_escape_stringは不要と書いてある場合と、PDOはSQLの脆弱性があると書いてある場合がありました。 実際はどうするのがいいのでしょうか? 以下は、とりあえずうごいているが、脆弱性がのこっているのか分からないコードです。 どうぞよろしくお願い申し上げます。 $dsn = "mysql:dbname={$objConifg->dbName}; host=127.0.0.1"; $user = $objConifg->dbUser;; $passwd=$objConifg->dbPass; try { $db = new PDO($dsn,$user,$passwd); $db->exec('SET NAMES utf8'); //print 'DB接続OK.'; } catch (PDOException $e){ die("接続エラー: {$e->getMessage()}"); } ・ ・ ・ ・ $stt = $db->prepare("select * from keywords where keyword_h1_url = \"{$REQ_PATH}\""); $stt->execute(); ========================================

    • 締切済み
    • PHP

専門家に質問してみよう