エクセルで入力したもの(10~50件程度)
Excelに書いたものをDBに登録するのであればPHP必要ないのが実際です。
下記のようにあったとして
id | name | date |
---|
1 | test1 | 2019-06-03 |
2 | test2 | 2019-06-03 |
3 | test3 | 2019-06-03 |
4 | test4 | 2019-06-03 |
よくやるのが、Excelのセルに式を埋め込んでINSERT文を作るやり方
id | name | date | SQL |
---|
1 | test1 | 2019-06-03 | ="insert into test (id,name,date) values ("& A1 &",'"&B1&"','"&C1&"');" |
2 | test2 | 2019-06-04 | ="insert into test (id,name,date) values ("& A2 &",'"&B2&"','"&C2&"');" |
3 | test3 | 2019-06-05 | ="insert into test (id,name,date) values ("& A3 &",'"&B3&"','"&C3&"');" |
4 | test4 | 2019-06-06 | ="insert into test (id,name,date) values ("& A4 &",'"&B4&"','"&C4&"');" |
右端の「SQL」列をざっとコピーしてDBに対して直接実行。
VBA組めるのならそれでも良いです。
(Excelにテーブル定義とテストデータを記入してVBAでCREATE TABLE文とINSERT文作るとかやることありますし)
これを全部「ExcelをPHPでアップロードして読み込んでSQL作ってDBに挿入」となると下記のような手順が必要になります。
- ファイルをアップロードする(参考:ファイルアップロードの例外処理はこれぐらいしないと気が済まない)
- アップロードしたExcelをPHPSpreadSheetで読み込み(参考:PhpSpreadsheet Excelファイルの読み込み / PHPでExcelファイルを読み込んで配列にするまでのサムシング)
※2つ目はPHPExcelを使っていますが、PHPSpreadSheetが後継で推奨されています。機能的にはほぼ同等です
0. 取得したデータでループし、INSERT文を作る
0. バルクインサート(データ量少ないのでしたら都度INSERTでも良いです)
ざっと書くとこんな感じ。
もう少し細かくはできますが、そうなるとほぼ詳細設計になるので、1個1個やってみてください。
ただ、既に出ているように「Excelをそのまま読ませる」よりも「ExcelをCSVに変換してCSVを読み込む」ほうがデータとしては扱いやすくなるようにも思います。
MySQLにCSVを直接インポートさせることもできますし。
「理解できない」「わからない」ことが多いとは思いますが、
それはおおよそ「巨大な何かに立ち向かおうとしている」状態だからだと思います。
ファイルアップロードの参考記事を読み進めていくと分かりますが、それだけでも結構色々やることがあります。
全てを一気にやろうとすると「理解できない」「わからない」=「思考停止」に陥ってしまうことになるので、
本当に1つ1つ、なるべく手順を細分化してやっていって積み重ねていくようにしてください。
手順書きましたが、逆からやっていくといいかもしれませんね。
0. 固定データを1件INSERTする
0. 固定データを配列で作った件数分INSERTする
0. ファイルをサーバーに直接置いて読み込んで配列化、INSERTする
0. PHPでファイルアップロードを行う
0. アップロードしたファイルを読み込むように修正する
想定通りに動かない場合は、必ずPHPマニュアルは読むこと、エラーは調べること、デバッグをすること
です。