チェックボックスを並べて選択させたものを、次のページにPOSTして処理するときに、歯抜けの配列ができます。
PHPのfor文でループするときに、配列のcountを最大数にしちゃうと、添字の方が大きかったりしてうまくいきません。
これまでは歯抜けにならない配列をわざわざ用意して、それで回していました。
歯抜けになっている配列について、添字の最小と最大を知るにはどうしたらいいんでしょうか?
添字を配列で返す array_keys() と、
配列の最大値を返す max() を組み合わせて、
max(array_keys($a));
とすればOK.
なるほど。 ということは、最小を知りたいならmin()ですね。
EBOMとMBOMをつなぐために、MBOM側テーブルに自動採番(Auto_increment)のカラムを追加しました。
EBOMの中から手配する部品を選択したら、MBOMにレコードを追加する訳ですが、その時に自動採番された番号をEBOM側テーブルのカラムに書きこんでやる必要があります。
MBOMにレコードを追加した結果、新しく採番された値を知るためには、どうすればよいのでしょうか?
MySQLのAUTO_INCREMENTで生成された値を簡単に取得する方法 - Webプログラマー+WebデザイナーなZARU日記
方法としては2つあり、PHPの関数 mysql_insert_id() で取得する方法と、MySQLの関数 last_insert_id() で取得する方法があります。
PHPの関数の方が簡単だそうですが、カラムの型がBIGINTだと正しい値を返してくれないそうです。 MBOMのインデックスも BIGINTなのでダメですね。
そこでMySQLの関数を使ってやってみたのですが、どうやってもゼロが返ってきます。 でも phpMyAdmin で INSERT 文に続けて SELECT last_insert_id() を実行すると、ちゃんと取得できます。
last_insert_id() は同じ接続での直近のクエリについて値を返してくるのですが、自分の場合は1つのクエリを発行するごとに PHPが MySQLへの接続と解除をしているからかな?
という訳で、別の方法をとりました。
MySQL :: auto increment(オートインクリメント):次の値を取得する [Tipsというかメモ]
あるテーブルにレコードをインサートする前に、どうしても「次の auto increment の値」を取得する必要があったのでメモ。
mysql 5.0.37 で検証
以下のクエリを実行します。
SHOW TABLE STATUS WHERE Name = 'テーブル名'
んでもって、「Auto_increment」カラムの値を取得すればいい訳ですね。
それにしても、そろそろデータベースへの同時書き込みについての対策をちゃんとやらねば(えっ?)。