このサイトはPHPを独習する際に作成したスクリプトを基に、プログラム言語初心者のための入門講座として作成しました。PHPは初心者に親しみやすく、解りやすいプログラム言語です。これからプログラムを学ぶ人の参考になればと思います。
簡単テーブル作成装置
PHPでホームページを作るのに慣れてくるとHTMLがけっこう面倒な気がしてきます。特にテーブルを使った表を作る場合、色や文字の配置を何度も調整するのはとても時間のかかる作業です。 そこでPHPを使って簡単にテーブルを作り、HTMLを出力することができれば、それをコピーして作成することができるはずです。 よし、作ってみよう!って思ったのですが、これって、ホームページ・ビルダーがあれば普通にできることでした。 しかし、まぁできるかどうか、やってみました。 簡単ってのは「このスクリプトでできることが簡単なことだけ」と言う意味で、スクリプトを簡単に作成できると言うことではありません。始めて見たら、色々と問題が出てきて苦労しました。
第一の問題は送信と受信
タテとヨコの数字を設定すると、それに応じた入力欄が現れ、そこに文字を入力することでテーブルを表示させようと言う計画です。 ところが早速行き詰まり!考えたら、送信に使うフォームの数が解らないではないですか。セルの数が作成する表によって入力欄は無限に変化する訳です。
諦めかけたのですが、「while で回したら?」思い、テーブルタグを組み合わせてみました。
echo "<table>"; //テーブル開始 $a = 1; while($a <= タテの数){ echo "<tr>"; $b = 1; while($b <= ヨコの数){ echo "<td><input type='text' name='$a'></td>"; //ここにinputを入れる $b++; } echo "</tr>"; $a++; } echo "</table>";
おもしろいですね。見事に指定したタテヨコで入力欄が並びます。入力欄のnameは$aで数字が順につくのでこれが使えます。これで送信はOKです。
これができるなら、受取もwhileが使えるのではないか?そこでセルの数だけwhileで回しながら受信できるかなとためしたら、OKでした。
$cnt = 1; while($cnt < セルの数){ $data[$cnt] = $_POST[送信name($cnt)]; $cnt++; }
formで作った入力欄の数とPOSTで受け取る番号が同じならちゃんとデータを受け取ってくれるのです。
inputのサイズは文字数?
inputを入れることには成功したのですが、sizeの設定に苦労しました。テーブル全体の幅を680としてヨコに並ぶセルの数からinputのサイズを決めなければ、入力欄が綺麗にならんでくれません。inputのsizeはピクセルではないのでサイズを簡単に出すことができないのです。そして試行錯誤の結果できた計算式がこれです。どういう方法で導きだされたかは覚えていません。
入力欄のサイズ = (138-5*ヨコ数)/ヨコ数;
データの保存
データの保存もちょっと厄介ですね。なんせいくつのデータが保存されるのかがわからないからです。 保存データは「&#&」(実際は半角)でつないでいるのですが、表の設定(色や線)はともかく各セルに入力された文字はいくつになるのかがわかりません。そこで、 設定データ%%%セルデータ%%%文字配置データ 全体を%%%で3つにわけ、それぞれのデータは「&#&」で区切ると言う方法を取りました。セルに入力されたデータは数がわからないのでやはり、whileで回しながらつなげて行きます。
$save .= "%%%"; $cnt= 1; while($cnt < セルの数){ $save .= "".$data[$cnt]; $cnt++; }
新出の関数
今回始めて使った関数が in_array です。ファイルを保存する際に1から順に番号をつけて行くとします。そして、あるファイルが不必要で削除できるとしたら、新しいファイルは欠番をうめていくべきだと思うのです。 例えば12345のファイルがあり、4を削除したら、新規ファイルは4にしたいですよね。これを行うために使ったのがこの関数です。ファイル名を配列に取り込み、番号があるかどうかを調べます。1〜4なら5を、1245なら3をと言う仕組みです。 あまり、使ったことがないのですが、今回は !in_array と関数の前に「!」をつけて逆の使い方です。つまり調べるファイル名がないときに break するようにしました。 in_array(調べるファイル名, ファイル名の配列)
$cnt = 1; while($cnt <= $f_num){ //1からファイル数より1回だけ多く繰り返す if(!in_array("$cnt", ファイル名の配列)) { //ファイル名をの中に1から順に番号があるかを調べる break; //なければそこでストップ } $cnt++; }
実は「こんな感じ」で動かしてるスクリプトは4ファイルしか作成できません。5個目のファイルを作成すると2〜4のどれかに勝手に上書されるようにしました。ファイル削除はないので、1245と言う並びにはなりませんから、この方法使う必要はないですね。でも、どこかで再利用できそうです。
HTMLを表示
これは<textarea>に入れてあげるだけですから問題ないですね。 さて苦労した割には使い道あるのかなぁ。ブログなんかで表にしたい時、それもHTMLが使える場合でないとダメですが・・・ スクリプトも思った以上に長いです。それからセルの結合はムリですね。ん〜これもPHP向きではなかったかもしれない!やっぱりホームページ・ビルダーかな?
⇒こんな感じ |