PHPでのアンケート設置について

このQ&Aのポイント
  • PHPを使用して自身のサイトにアンケートを設置する方法について教えてください。
  • アンケート設置のためのPHPコードの解説と、動作しない場合のトラブルシューティング方法について教えてください。
  • 必要なファイルの準備や設定についても詳しく教えていただけると助かります。
回答を見る
  • ベストアンサー

PHPでのアンケート設置について

PHPでのアンケート設置について 同じカテゴリにて間隔を空けずに他にも質問してますので内容が若干被るかもしれませんがご了承ください。 下記サイトのアンケートを自身のサイトに設置したいと思い、とりあえず動作確認だけでもしてみようとソースをそのままコピペして(phpファイル名とテキストファイル名は変更)サーバーにアップしましたが上手く動作してくれません。 ソースが掲載されているサイトURL:http://rx78.mods.jp/php_sample/questionnaire/index.html -------------ank.php-------------------- <html> <head> <title>アンケート</title> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> </head> <body>あなたの好きな教科を選んで投票してください。 <form name="form" method="post" action="ank.php"> <?php //ラジオボタンを項目ごとに出力 $subject=array('国語','社会','数学','理科','英語'); for($i=0; $i<count($subject); $i++){  echo "<input type='radio' name='kyouka' value='$i'>{$subject[$i]}<br>\n"; } ?> <br> <input type="submit" name="submit" value="投票"> </form> <table border="1"> <?php //データの書き込み $data=file('data2.txt'); for($i=0; $i<count($subject); $i++){ $data[$i]=rtrim($data[$i]); } if($_POST['submit']){ $data[$_POST['kyouka']]++; $fp=@fopen('data2.txt','w'); for($i=0; $i<count($subject); $i++){ fwrite($fp,$data[$i]."\n"); } fclose($fp); } //データの出力 echo "<hr>"; for($i=0; $i<count($subject); $i++){ echo "<tr>"; echo "<td>{$subject[$i]}</td>"; echo "<td><table><tr>"; $wd=$data[$i]*10; //出力幅の設定 echo "<td width='$wd' bgcolor='#eeeeee'> </td>"; echo "<td>{$data[$i]} 票</td>"; echo "</tr></table></td>"; echo "</tr>\n"; } ?> </table> </body> </html> ---------------------------------------- 上記のank.phpファイルと同じディレクトリに空のdata2.txtファイルを用意し、パーミッションを606に設定しました。 アップしてank.phpにアクセスすると真っ白のページになります。 お借りしているレンタルサーバー(Rental Orbit Space )はphp可でパスも設定しました。 上記サイトの他のサンプルを使用してみたらエラーがあった為(ネットで調べて自己解決済)、不信感を覚えこのサンプルのコードにも誤りがあるのでは?と思いましたが、私が初心者な為コードを見てもどこが間違っているのかさえ皆目見当付きません。 そこで詳しい方の力をお借りたくて質問しました。 私自身が半可通な為に説明不足な点もあるかと思いますが、ご教授いただければ幸いです。 何卒よろしくお願い致します。

  • PHP
  • 回答数3
  • ありがとう数12

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

  • ベストアンサー
  • duron
  • ベストアンサー率77% (73/94)
回答No.3

メールフォームの方もですが、もしそのままサイトのソースをコピペしただけならば多分全角スペースが入っているのではないでしょうか?

kazuking1213
質問者

お礼

duronさんご回答ありがとうございます。 ご指摘の通り全角スペースが入っておりました。 修正しサーバーにアップしたところ無事に動作しました。 こういうケースもあるものだととても勉強になりました。 メールフォームの方も同じく修正したところ正常に動作しました。 本当にありがとうございました。

その他の回答 (2)

  • JaneDue
  • ベストアンサー率75% (263/350)
回答No.2

#Ano1 です。 文字コードを不ぞろいにすることで同じ症状を確認しましたので、その辺りだとは思うのですが…。 ちなみに、当該スクリプトは問題なく動作しています。 ・「真っ白なページ」の時、HTMLソース自体はきちんと出力されているか? ソースに何らかのErrorが出力されてはいないか? ・FTPソフトで転送時に自動的に別の文字コードに変換されているということはないか? 確認してみてください。 あとは(問題が文字コードと仮定して) ・ <?php header("Content-type: text/html; charset=SJIS"); ?> を明記してやる ・ またはShift_JIS以外のコードにしてみる(PHP内部の処理コードにあわせてみる) とかです。

kazuking1213
質問者

お礼

JaneDueさん、再度御回答ありがとうございます。 ・「真っ白なページ」の時、HTMLソース自体はきちんと出力されているか? ソースに何らかのErrorが出力されてはいないか? HTML自体も表示されません。 Errorも出力されていません。 ・FTPソフトで転送時に自動的に別の文字コードに変換されているということはないか? 私も前回の回答を頂いた時にそのような事もあるのでわ?と思いサーバー側のphpファイルもチェックしておりましたが、文字コードは変換されていませんでした。 ・ <?php header("Content-type: text/html; charset=SJIS"); ?> を明記してやる ・ またはShift_JIS以外のコードにしてみる(PHP内部の処理コードにあわせてみる) 試みてはみましたが変わらずでした。 親切・丁寧に色々と原因を考えてくださって多謝しております。 ありがとうございます。

  • JaneDue
  • ベストアンサー率75% (263/350)
回答No.1

たぶん文字コードまわりです。 html はcharset=Shift_JIS" ですが、ank.phpが UTF-8など Shift_JIS 以外で保存されていませんか? ソースの文字コードと出力を統一してみてください。

kazuking1213
質問者

お礼

御回答ありがとうございます。 保存したファイルの文字コードを再度確認してみましたが、Shift-JISで保存されていました。 他に原因として考えられることはないでしょうか? お手数をおかけしますが、よろしくお願いします。

関連するQ&A

  • アンケートについて

    現在サイトを作成しているのですが、そこにPHPで作成されたアンケートを設置したいと考えています。コードなどを公開しているサイトを検索していて私の理想どうりのアンケートを見つけ、設置する事は出来たのですが、そこに制限を付けたいと考えてます。 一度『投票』のボタンを押したら1時間は投票出来ないようにしたいのですが、私にPHPの知識がないのでコードを見てもどのようにすれば制限できるようになるのかが分かりません。 その公開されていたPHPのコードは下記になります。 あなたの好きな教科を選んで投票してください。 <form name="form" method="post" action="questionnaire.php"> <?php //ラジオボタンを項目ごとに出力 $subject=array('国語','社会','数学','理科','英語'); for($i=0; $i<count($subject); $i++){  echo "<input type='radio' name='kyouka' value='$i'>{$subject[$i]}<br>\n"; } ?> <br> <input type="submit" name="submit" value="投票"> </form> <table border="1"> <?php //データの書き込み $data=file('data.txt'); for($i=0; $i<count($subject); $i++){ $data[$i]=rtrim($data[$i]); } if($_POST['submit']){ $data[$_POST['kyouka']]++; $fp=@fopen('data.txt','w'); for($i=0; $i<count($subject); $i++){ fwrite($fp,$data[$i]."\n"); } fclose($fp); } //データの出力 echo "<hr>"; for($i=0; $i<count($subject); $i++){ echo "<tr>"; echo "<td>{$subject[$i]}</td>"; echo "<td><table><tr>"; $wd=$data[$i]*10; //出力幅の設定 echo "<td width='$wd' bgcolor='#eeeeee'> </td>"; echo "<td>{$data[$i]} 票</td>"; echo "</tr></table></td>"; echo "</tr>\n"; } ?> </table> 知識がないなりに色々検索してクッキーを使用して制限をかけてみたのですが、エラーがでてしまいました。 ご存知の方いらっしゃいましたらご教授ください。 よろしくお願いします。

    • 締切済み
    • PHP
  • PHP 九九表

    PHPで九九の表を作っているのですが、 どうしてもここまでしか出来ませんでした。 <tr>,<td>を消してみると 数字が横に一列に表示されており、かけ算にはなっているのですが、 表にはどうしてもなりません。 なにかが違うのは分かっているのですが、ないが違うのか分かりません。 誰かお分かりになるかたがいましたらお伺いできませんでしょうか。 <?php echo '<table>'; echo '<tr>'; for ($i = 1; $i <= 9; $i++ ) { for ($j = 1; $j <= 9; $j++ ) echo '<td>' $i * $j'</td>'; echo '</tr>'; } echo '</table>'; ?>

    • ベストアンサー
    • PHP
  • phpでのアンケート編集

    社員旅行のアンケート編集のphpです。 (???)のところがどうしてもわからなくて上手く動きません。 どなたか回答お願いします。 <?php session_start(); ?> <html> <head> <body> <font size=5><b>社員旅行アンケート集計</b></font><br><br> <?php $db = mysql_connect("localhost","",""); mysql_select_db("syain_db"); $query = "SELECT * FROM trvl_t"; $result = mysql_query($query); if(mysql_num_rows($result) == 0) print"<br>無し"; else{ for($i = 0;$i <4;$i++) $cnt[$i] = 0; while($row = mysql_fetch_array($result))(???) mysql_close($db); echo "<table border =1>"; echo "<tr><td>旅行先</td><td>希望者数</td></tr>"; for($i=0;$i<4;$i++){ echo "<tr align=center>"; if($i == 0) echo "<td>北海道</td>"; elseif($i == 1) echo"<td>沖縄</td>"; elseif($i == 2) echo"<td>韓国</td>"; elseif($i == 3) echo"<td>香港</td>"; echo "<td>".(???)."</td>"; echo"</tr>"; } echo "</table>"; } ?>

    • ベストアンサー
    • PHP
  • CSVファイルを読み込んで表示するPHP

    <?php setlocale(LC_ALL, 'ja_JP'); if( $handle = fopen( 'data.csv', 'r' ) ){ echo '<table border=1 cellspacing=0 bordercolor=#ff6600 align=center>'; if( ( $data = fgetcsv( $handle ) ) !== FALSE ){ echo '<tr style="background-color:#FFCCFF">'; for( $i = 0; $i < count( $data ); $i ++ ){ if($i===0){ echo '<td align=center width=160px>' . $data[$i] . '</td>'; }else{ echo '<td align=center width=60px>' . $data[$i] . '</td>'; } } echo '</tr>'; } while( ( $data = fgetcsv( $handle ) ) !== FALSE ){ echo '<tr>'; for( $i = 0; $i < count( $data ); $i ++ ){ echo '<td align=center>' . $data[$i] . '</td>'; } echo '</tr>'; } echo '</table>'; } fclose($handle); ?> ■data.csvの内容 品名,数量,予備 AAA,1,1 BBB,1,1 CCC,1,1 上記のPHPは2列まで表示されるようになっています。 それを3列まで表示できるようにしたいのですが、 初心者なので、どう記述したらいいのか分かりません。 どうか、ご教授お願いします。

    • ベストアンサー
    • PHP
  • PHP かけ算

    PHPを使い下記の表を作ろうとしております。 ぱっと見た所あと少しで出来そうな気もするのですが、 なにかが間違っています。 誰かお分かりになるかたが今したらお伺いできますでしょうか。 | 1 2 3 4 5 6 7 8 9 -------------------------------- 1| * 2 * 4 * 6 * 8 * 2| 2 * 6 * 10 * 14 * 18 3| * 6 * 12 * 18 * 24 * 4| 4 * 12 * 20 * 28 * 36 5| * 10 * 20 * 30 * 40 * 6| 6 * 18 * 30 * 42 * 54 7| * 14 * 28 * 42 * 56 * 8| 8 * 24 * 40 * 56 * 72 9| * 18 * 36 * 54 * 72 * <table border ="1"> <?php for($i = 0; $i <=9; $i++){ echo'<tr>'; if($i == 0){ echo '<td>&nbsp;</td>'; } else { echo'<td>'.$i.'</td>'; } for($j = 1; $j<=9; $j++){ if($i == 0){ echo'<td>'.$j.'</td>'; continue; } if($i*$j % 2 == 0) { echo '<td>'. $i * $j.'</td>'; } else { echo '<td>*</td>'; } } echo '</tr>'; } ?> </table>

    • ベストアンサー
    • PHP
  • PHPでカレンダーを作成するにあたって(祝日)の出力

    PHP初心者です。 勉強をかねて、PHPでカレンダーを作成しています。 カレンダー自体は作成できたと思うのですが、祝日も考慮したいので、どうコーディングすれば良いでしょうか? カレンダーは下記のように作成致しました。 <html> <head> <title>カレンダー</title> <link rel= "stylesheet" href="ookawa.css" type="text/css"> </head> <body> <table> <th colspan="7"><font size="+1"> <?php echo date("Y"); ?> <?php echo "/"; ?> <?php echo date("m"); ?> </font><font size="+1"></font></th> <tr> <td><font size="-1">日</font></td> <td><font size="-1">月</font></td> <td><font size="-1">火</font></td> <td><font size="-1">水</font></td> <td><font size="-1">木</font></td> <td><font size="-1">金</font></td> <td><font size="-1">土</font></td> </tr> <?php //当月の1日の曜日 $startwday = date("w", mktime(0, 0, 0, date("n"), 1, date("Y"))); //当月の最後の曜日 $endmday = date("t"); //当月の1日までの空欄 for($i = 0 ; $i < $startwday ; $i++) { if(($count % 7) == 0) { echo "<tr>"; } echo "<td> </td>"; $count++; } //●日付の書き込み for($i = 1 ; $i <= $endmday ; $i++) { if(($count % 7) == 0) { echo "<tr>"; } if($i == date("j")) { //☆本日の場合、背景色を黄色にする☆ echo "<td bgcolor=\"FFFF00\">"; } else { echo "<td align=\"center\ bgcolor=\"FFFF00\">"; } if(($count % 7) == 0) { //☆日曜日の場合、文字色を赤色にする☆ echo "<font color=\"red\">"; } elseif(($count % 7) == 6) { //☆土曜日の場合、文字色を青色にする☆ echo "<font color=\"blue\">"; } echo "$i"; if(($count % 7) == 0 or ($count % 7) == 6) { echo "</font>"; } echo "</td>"; $count++; if(($count % 7) == 0) { echo "</tr>\n"; } } //当月の最終日以降の空欄 for( ; ($count % 7) != 0 ; ) { echo "<td> </td>"; $count++; if(($count % 7) == 0) { echo "</tr>\n"; } } ?> </table> </body> </html> アドバイスを宜しくお願い致します。

    • 締切済み
    • PHP
  • 繰返しを繰り返す【php】

    たとえばですが、 for($i=0; $i < 31; $i++){ $table ="<td>★</td><td>●</td>"; } echo <<<EOM <table> <tr><td>名前</td>{$table}</tr> </table> EOM; という処理を10回繰り返したい場合はどのようにしたらいいのでしょうか。 上記のプログラムを丸々whileで囲んでみたのですが、うまく表示されませんでした。

    • ベストアンサー
    • PHP
  • PHPでCSVデーターの表示について

    PHPでCSVデーターの表示について 教えてください。PHPでCSVデーターを表示したいのですが一覧表示ではなくテキストをクリックして特定のデーターを表示させようと考えております。 CSVデーターの中身(CSV.csv) 一郎,男,20歳 二郎,男,22歳 一子,女,24歳 二子,女,26歳 --data.php-- <?php $csvFile = 'CSV.csv'; $tempCSV = file_get_contents($csvFile); $tempCSV = mb_convert_encoding($tempCSV,'utf-8','SJIS-win'); $fp = tmpfile(); fwrite($fp,$tempCSV); rewind($fp); setlocale(LC_ALL,'ja_JP.UTF-8'); while ($arr = fgetcsv($fp,1024)) { list ($name,$sex,$age) = $arr; echo '<p>',<a href="01.php">' . $name . '</a>','</p>'; } fclose($fp); function h($string) { return htmlspecialchars($string, ENT_QUOTES); } ?> 一郎をクリックしたら一郎のデーターだけを(01.php)で表示させたいのですがよく分りません。 01.phpは今のところ一覧表示されるものを置いてあります。 --01.php-- <?php $csvFile = 'CSV.csv'; $tempCSV = file_get_contents($csvFile); $tempCSV = mb_convert_encoding($tempCSV,'utf-8','SJIS-win'); $fp = tmpfile(); fwrite($fp,$tempCSV); rewind($fp); setlocale(LC_ALL,'ja_JP.UTF-8'); while ($arr = fgetcsv($fp,1024)) { list ($name,$sex,$age) = $arr; echo '<table border=1>'; echo '<tr>'; echo '<td>','名前','</td>'; echo '<td>'.$name.'</td>'; echo '</tr>'; echo '<tr>'; echo '<td>','性別','</td>'; echo '<td>'.sex.'</td>'; echo '</tr>'; echo '<tr>'; echo '<td>','年齢','</td>'; echo '<td>'.$age.'</td>'; echo '</tr>'; echo '</table>'; } fclose($fp); function h($string) { return htmlspecialchars($string, ENT_QUOTES); } ?> 本を読んだり、ググったりしてヒントになる様な物を探しているのですが中々見つかりません。 初心者で申し訳ありませんが、どなたか教えていただけないでしょうか?

    • ベストアンサー
    • PHP
  • PHPでカレンダーを作成する際の計算がわかりません

    PHPを勉強し始めた初心者です。 参考書を片手にカレンダーを作成しているのですが、 その参考書に記載されている計算の意味がわかりません。 ///////以下抜粋 <?php //年月日を取得する if ($_SERVER['REQUEST_METHOD'] = "POST") { $yyyy = $_POST["yyyy"]; $mm = $_POST["mm"]; } else { $yyyy = date("Y"); $mm = date("m"); } //年月選択リストを表示する echo "<form method=\"POST\" action=\"" . $_SERVER['PHP_SELF'] . "\">"; echo "<table><tr><td>"; //年 echo "<select name=\"yyyy\">"; for ($i = 2000; $i <= 2020; $i++) { echo "<option"; if ($i == $yyyy) { echo " selected "; } echo ">$i"; } echo "</select>年"; //月 echo "<select name=\"mm\">"; for ($i = 1; $i <= 12; $i++) { echo "<option"; if ($i == $mm) { echo " selected "; } echo ">$i"; } echo "</select>月"; echo "</td>"; echo "<td><input type=\"submit\" value=\"表示\" name=\"sub1\"></td>"; echo "</tr></table></form>"; //カレンダーを表示する echo"<table border=\"1\">\n <tr>\n <td>日</td>\n <td>月</td>\n <td>火</td>\n <td>水</td>\n <td>木</td>\n <td>金</td>\n <td>土</td> </tr>"; //1日の曜日を取得する $wd1 = date("w", mktime(0,0,0,$mm,1,$yyyy)); $d = 0; $lastd = date("d", mktime(0,0,0,$mm + 1, 0, $yyyy)); for ($i = 0; $i <= 5; $i++) { if ($d >= $lastd) {break;} echo "<tr>"; for ($j = 0; $j <= 6; $j++) { $d = $i * 7 + $j - $wd1 + 1; if ($d > $lastd or $d < 1) { echo "<td> </td>"; } else { echo "<td>$d</td>"; } } echo "</tr>"; } echo "</table>"; ?> /////////////////// 上記のソースの for ($i = 0; $i <= 5; $i++) { if ($d >= $lastd) {break;} echo "<tr>"; for ($j = 0; $j <= 6; $j++) { $d = $i * 7 + $j - $wd1 + 1; if ($d > $lastd or $d < 1) { echo "<td> </td>"; } else { echo "<td>$d</td>"; } } echo "</tr>"; } この部分で、なぜ5なのかとかなぜこういう計算式なのかとかがわかりません。 どなたかこのソースの意味をご教授願いませんでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • 自動で増えてくれるPHP

    以前に質問させて頂いた内容をもとに、以下のようなものを作成しました。 以前の質問 → http://okwave.jp/qa/q6858703.html 作成したもの ↓ 【Aサーバ】「a.txt」(データ用) $name01='一子'; $age01='11'; $name02='二郎'; $age02='22'; 【Bサーバ】「b.html」(表示用) <?php $data = file_get_contents ('http://www.A/a.txt'); foreach (explode("\n" , $data) as $value) { if (preg_match ("/\\$(.+)='(.+)'/", $value, $matches)) { $$matches[1] = $matches[2]; } } echo '<table>'; echo '<tr><th>'.$name01.'</th><td>'.$age01.'</td></tr>'; echo '<tr><th>'.$name02.'</th><td>'.$age02.'</td></tr>'; echo '</table>'; ?> ここで質問なのですが、↑のような仕組みで、a.txtの中身が $name03='三太'; $age03='33'; $name04='~~'; $age04='~~'; と増えていった場合、b.htmlの echo '<tr><th>'.$name~~.'</th><td>'.$age~~.'</td></tr>'; が自動的に増えてくれるようなものを作りたいと考えています。 配列(?)を使うという方法も調べてみたのですが、分からず……。 ご教示願います。

    • ベストアンサー
    • PHP