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

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

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

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

PHP

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

Q&A

2回答

372閲覧

MySQLとPHPを使ったクイズを作りたい

ques346

総合スコア60

MySQL

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

PHP

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

0グッド

0クリップ

投稿2025/03/01 21:02

実現したいこと

スターレンタルサーバーの無料版で、MySQLとPHPを使ったクイズを作りたい
一応ここ(https://tetsudoulab.com/yontaku-quiz-php-mysql/ 鉄道ラボ, 4択クイズの作成方法(ランダム出題、MySQL活用))を参考に
※もし無理であれば別サイトでも良いです

発生している問題・分からないこと

(データベースへの接続なので省略)
の記載方法が分からない。
あと、諸々のMySQLの操作方法が分からない。
文章だけでは分かりにくいので、「補足」に図を添付しました。

エラーメッセージ

error

1(データベースへの接続なので省略) 2の記載方法が分からない。 3あと、諸々のMySQLの操作方法が分からない。 4文章だけでは分かりにくいので、「補足」に図を添付しました。

該当のソースコード

php

1<?php 2(データベースへの接続なので省略) 3//出題する色を表示 4foreach ($dbh->query('select * from kanyokyoka where id=1') as $row){ 5         } 6echo '<div style="width:300px; height:200px; background-color:',$row['color'],'"></div><br>'; 7//出題する色の選択肢を入れ替える 8$question = array(); 9$question = array($row['name'],$row['other1'],$row['other2'],$row['other3']); 10shuffle($question); 11?> 12<form method="POST"> 13   <?php foreach($question as $value){ ?> 14   <input type="radio" name="question" value="<?php echo $value; ?>" /> <?php echo $value; ?><br> 15   <?php } ?> 16   <input type="hidden" name="answer" value="<?php echo $answer ?>"> 17</form><br> 18<?php 19echo '<div style="width:300px; height:200px; background-color:',$row['color'],'"></div><br>の正解は'; 20echo $row['name']; 21echo '<br><br>'; 22?> 23<form method="POST"><input type="submit" value="次の問題へ"></p> 24</form>

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

まずphpadminを操作して、図1のようにsampleテーブルを作り、同様にCOLを1~5まで作成し、
SQLに
INSERT INTO sample
VALUES ('#8b4239', '鳶色(とびいろ)', '海老茶', 'マルーン' ,'弁柄色')
という記述を5回実行して、図2の行のようにしました。

サイトによると、excelファイルを使うようなのですが、やり方が分からず、エラー等も出て諦めました。
エクセルファイルをインポートし、かつphpadminでエクセルファイルをいじる?みたいなのですが、どうやれば良いのでしょうか・・・。

あと、phpファイルですが、おそらくphpはサイトにあるソースをquiz.phpで保存してFFFTPでUpし、ブラウザからアクセスすれば良いと思うのですが・・・

(データベースへの接続なので省略)

の部分に何を書けば良いのか分かりません。

補足

イメージ説明

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ques346

2025/03/02 05:46

もしこのサイト(鉄道の)を参考にすることが難しいのであれば、 MySQL,PHPのクイズ作成サイトがあれば、他に教えて頂けると幸いです。
guest

回答2

0

hiroki-oさんの回答で大体完了しているので
補助的な部分を解説します。


全体的なコード

なにこれ……誰をターゲットにしてるのか全くわからん
まずMySQLに接続するための機能はPHPには2通り用意されています

まぁPDO使うのがデフォみたいな所はあるんですが、流石にどっち使っているのか書くのは礼儀だろと
すんなり「これPDOじゃなかったっけ?ああ、メソッドの使い方的にやっぱりこっちっぽいな」とわかる人間だと
記事の想定読者よりレベルが高すぎる

むしろ記事の中にあるPHPのコードが雑魚すぎて読めん……ってなる
残念ながらあまり良い記事とは言えないですね

推測するにプログラミングとは無関係の方(質問者さんに毛が生えた程度の初心者プログラマ)が
電車のボディって似たような色味してるのに別の名前で分かりづらいよなぁ
何回同じ事聞くねん!……せや!クイズにしたら面白いかもしれん!?と閃いた感じでしょうか

ネット上にこういうものは沢山あるにはありますが
大抵がGitHubとかに上がってて、見たけりゃ勝手に見ろ形式でしょうから
かなり敷居が高いと思います

やっぱり書籍とpaizaの二軸が王道になるかと思います


PHPで飯を食っていくならば、PDOは絶対に覚えましょう。

hiroki-oさんの回答ではlocalhost等と入力していますが、
レンタルサーバーでは同じマシン上でPHPとMySQLを動かしていないと思われるので
アカウント開設メールや管理画面などで何処に接続すれば使えるか教えてくれると思うので探してみてください。


Excelは編集画面で範囲選択からのコピーを行い
テキストエディタでペーストすると、行は改行区切り、列はタブ文字区切りの形式のテキストデータになります。

これは一般的にTSV(tab separate value)と呼ばれ、
CSV(comma separate value)の親戚みたいな存在です。

php

1// エクセルからコピペして連れて来る 2$tsv = <<<LABEL 3a b c d 4e f g h 5LABEL; 6// var_dump(explode(PHP_EOL, $tsv)); 7// array(2) { [0]=> string(8) "a b c d " [1]=> string(7) "e f g h" } 8 9foreach (explode(PHP_EOL, $tsv) as $row) { 10 // var_dump(explode("\t", $row)); 11 // array(2) { [0]=> string(8) "a b c d " [1]=> string(7) "e f g h" } 12 // array(4) { [0]=> string(1) "e" [1]=> string(1) "f" [2]=> string(1) "g" [3]=> string(1) "h" } 13}

PHPは単独でMySQLサーバへアクセスして読み書きできますから
phpmyadminの管理画面でExcelを死にそうな顔で編集しなくても、
これでSQLのinsert分を作ってforeach文でいっきに流し込めばすぐ解決することでしょう。
(高等テクとしてバルクインサートと呼ばれる数千件のデータを一撃で入れてしまう必殺技もありますが割愛)

insert文が実行出来なかったとしても、preタグの中につらつらと文字列を書き込んで
phpmyadminでコピペすれば解決でしょう

こんな感じ

php

1<html> 2<pre> 3<?php 4$tsv = <<<LABEL 5#8b4239 鳶色(とびいろ) 海老茶 マルーン 弁柄色 6#8b4239 鳶色(とびいろ) 海老茶 マルーン 弁柄色 7#8b4239 鳶色(とびいろ) 海老茶 マルーン 弁柄色 8#8b4239 鳶色(とびいろ) 海老茶 マルーン 弁柄色 9#8b4239 鳶色(とびいろ) 海老茶 マルーン 弁柄色 10LABEL; 11// 2行目以降のデータは知らん 12 13foreach (explode(PHP_EOL, $tsv) as $row) { 14 $sql = "INSERT INTO sample 15VALUES ('{$row[0]}', '$row[1]', '$row[2]', '$row[3]', '$row[4]')"; 16?> 17<?= $sql ?> 18<?php 19} 20?> 21</pre> 22</html>

投稿2025/03/03 07:16

miyabi-sun

総合スコア21320

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ques346

2025/03/03 22:13

ありがとうございます、後日これをみながらやってみます
guest

0

FreeBSD 14.2、Apache 2.4.62、MySQL 8.4.2、PHP 8.3.15で確認しました。

スターレンタルサーバー特有の事情は知りませんが、下記の手順でローカルで動作したので、参考にしてください。
不明な点は、コメントしてください。

DBの準備

create database testdb;
create table kanyokyoka ( id int not null primary key, color varchar(100), name varchar(100), other1 varchar(100), other2 varchar(100), other3 varchar(100));
insert into kanyokyoka(id, color, name, other1, other2, other3) value(1, '#8b4239', '鳶色(とびいろ)', '海老茶', 'マルーン', '弁柄色');

ソース
3箇所、変更しています。

  • DB接続を追記
  • select文の次の行のインデントがエラーになるので、インデントを消す
  • $answerが何に使用するのか不明で警告になるので、valueから消す
<?php $server_name = 'localhost'; // サーバー名 $user_name = 'user'; // DB接続のユーザー名 $password = 'pass'; // DB接続のパスワード $database_name = 'testdb'; // DB名 $charset = 'utf8mb4'; $opt['PDO::ATTR_EMULATE_PREPARES'] = false; $dsn = "mysql:host={$server_name};dbname={$database_name};charset={$charset}"; try { $dbh = new PDO($dsn, $user_name, $password, $opt); } catch (PDOException $e) { exit; } //出題する色を表示 foreach ($dbh->query('select * from kanyokyoka where id=1') as $row){ } echo '<div style="width:300px; height:200px; background-color:',$row['color'],'"></div><br>'; //出題する色の選択肢を入れ替える $question = array(); $question = array($row['name'],$row['other1'],$row['other2'],$row['other3']); shuffle($question); ?> <form method="POST">    <?php foreach($question as $value){ ?>    <input type="radio" name="question" value="<?php echo $value; ?>" /> <?php echo $value; ?><br>    <?php } ?>    <input type="hidden" name="answer" value=""> </form><br> <?php echo '<div style="width:300px; height:200px; background-color:',$row['color'],'"></div><br>の正解は'; echo $row['name']; echo '<br><br>'; ?> <form method="POST"><input type="submit" value="次の問題へ"></p> </form>

上記のPHPファイルをWebサーバーの所定の場所に配置して、ブラウザから叩くと、クイズが表示されます。
リロードボタンを押すたびに、選択肢の順番が変化するのが確認できます。

Excelに関してリンク先を読みましたが、insert文を作成するためのツールとして使用しているだけです。
ExcelファイルそのものをMySQLに読み込ませるわけではないです。
(単に作成したinsert文をコピペしているだけ)

(参考)
DB接続方法(下記の図4)
https://tetsudoulab.com/php-WordPress/

完成品
https://tetsudoulab.com/shikisai-2kyu-kanyo-trap-mondai/

ローカルでの実行結果
イメージ説明

投稿2025/03/02 15:43

hiroki-o

総合スコア1323

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

miyabi-sun

2025/03/03 05:01

> foreach ($dbh->query('select * from kanyokyoka where id=1') as $row){ > } > echo '<div style="width:300px; height:200px; background-color:',$row['color'],'"></div><br>'; これは何なんだと頭捻ってましたが、$row変数を定義したかっただけみたいですね 最初の3行見た時点でギブアップ、コードリーディングすら出来ずに途方にくれてました よく頑張った!GJ!!
ques346

2025/03/03 22:13

ありがとうございます、後日これをみながらやってみます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

アカウントをお持ちの方は

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

ただいまの回答率
85.32%

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

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

質問する

関連した質問