おすすめ本

最近のトラックバック

  • event (夢茶爺&苦茶爺のPC奮戦備忘録)

AccRanking

Ad

« 2019年6月 | メイン | 2019年9月 »

2019年7月

2019年7月 8日 (月)

【PHP】「select」タグが入力不可でも値をPOSTするには「option」タグを「disabled」に設定する

PHP でシステムを組んでいると、データの中の区分値などを select タグを用いて入力します。 この区分値を入力不可にしようとして select タグの部分に disabled="disabled" とすることが多いです。

ただこの方法ですと、画面上は select ボックスは表示されるのですが POST 処理で値が渡ってきません。 以下のソースをブラウザで表示して OK を押下すると「select value = 」の所には何も表示されません。

select タグに disabled="disabled" とするのではなく option タグに選択されていないところを disabled="disabled" とし 選択されたいるところに selected="selected" とします。 上記のソースを以下の様に変更しました。


この様にするとドロップダウン表示をした時に selected="selected" とした option タグが通常の表示となり disabled="disabled" としたタグは選択できない灰色の表示になります。

楽天市場
■関連記事
【PHP】「select」タグが入力不可でも値をPOSTするには「option」タグを「disabled」に設定する
【PHP】「stdClass」は「foreach」での処理ができる
【PHP】「stdClass」を関数の引数としての使い方について
【PHP】関数の引数に複数のデフォルト値を設定した場合の注意点について
【PHP】関数の戻り値を複数にする方法(list関数)

2019年7月 6日 (土)

【PHP】「stdClass」は「foreach」での処理ができる

以前 stdClass について以下の記事を書きましたが、 このクラスですが、連想配列的に使えるので当然 foreach の処理が行えます。

【PHP】連想配列の様な「stdClass」の使い方について


これを動作させると以下の様な表示になります。

連想配列の様にキーとその値が取得できています。
stdClass 使いようによってはいろいろできそうに思います。

楽天市場
■関連記事
【PHP】「select」タグが入力不可でも値をPOSTするには「option」タグを「disabled」に設定する
【PHP】「stdClass」は「foreach」での処理ができる
【PHP】「stdClass」を関数の引数としての使い方について
【PHP】関数の引数に複数のデフォルト値を設定した場合の注意点について
【PHP】関数の戻り値を複数にする方法(list関数)

【MySQL】ダミーテーブルをUNIONで連結してコード表を作成する方法

MySQL では以下の様にダミーテーブルが使えます。

ダミーテーブルの名前として DUAL を使って SELECT の中のカラムを適当なものが記述できます。 また、 DUAL が無くても動作します。

そこで、コード表とするために、複数のダミーテーブルからの取得を UNION で連結します。
以下に、3個のコードと名前のセットを返すSQLを記します。

普通はコードマスタか何かでデータを持ちますが、 特殊なコードを追加したい場合に、今回の様にダミーテーブルのデータを UNION で連結することがあります。

楽天市場

■関連記事
【MySQL】ダミーテーブルをUNIONで連結してコード表を作成する方法
【MySQL】ユーザー変数を使ってSELECTに行番号を付加する方法
【MySQL】カラム名を囲むバッククオートについて
【MySQL】UNIONMINUSが無いので、代わりにNOTEXISTSを使う方法について
【MySQL】ユーザ変数を使って連番や、連続日付を取得する方法について

2019年7月 3日 (水)

【PHP】関数の引数に複数のデフォルト値を設定した場合の注意点について

PHP では引数を複数持つユーザー関数の定義は以下の様になります。

関数自体は特に意味がある内容ではありませんが、引数を文字列として連結して返します。

ここでこの第2引数以降をデフォルト値を持つ様にします。 デフォルト設定は、引数の右側にイコール文字を置き、その後にデフォルト値を書きます。 (第2引数以降は全てデフォルト値を持つ必要があります。)



結果表示をコメントで記していますが、デフォルト値が表示されるはずです。

もし、第2引数のみデフォルト値としたい場合に以下の様にしたのですが、PHPのエラーが発生しました。

"func1:1AACCC"の表示を期待したのですが、以下のエラーが発生しました。 第2引数を省略する場合は、第3引数も省略が必要な様です。

そこで第2、第3引数に NULL が指定された場合にはデフォルト値を設定する様にしてみました。 (これだと普通の関数になってしまいました)


楽天市場
■関連記事
【PHP】「select」タグが入力不可でも値をPOSTするには「option」タグを「disabled」に設定する
【PHP】「stdClass」は「foreach」での処理ができる
【PHP】「stdClass」を関数の引数としての使い方について
【PHP】関数の引数に複数のデフォルト値を設定した場合の注意点について
【PHP】関数の戻り値を複数にする方法(list関数)

【MySQL】ユーザー変数を使ってSELECTに行番号を付加する方法

MySQL ではユーザー変数を定義しそれを SELECT 文のなかで使えます。
以下のSQLの実行は行番号を付加する例です。
SET命令でユーザー変数 @NUM を宣言し、その変数を SELECT で使用しています。

結果表示を見れば、行番号として値が表示されていることが分かります。

SET命令と SELECT文の2行が少し気になるので、 調べてみたら以下の様に、SET命令の部分をダミーのテーブルでの宣言として一体化できます。

GROUP BYORDER BY 句を行った場合にも行番号は付加できる様です。

但し、ユーザ変数の計算部分の処理が1行毎最初に処理される様に思いますが、 クエリー結果でその処理順番が保障されるとも限りません。 この辺りは、個々の場合で調べる必要があります。

楽天市場

■関連記事
【MySQL】ダミーテーブルをUNIONで連結してコード表を作成する方法
【MySQL】ユーザー変数を使ってSELECTに行番号を付加する方法
【MySQL】カラム名を囲むバッククオートについて
【MySQL】UNIONMINUSが無いので、代わりにNOTEXISTSを使う方法について
【MySQL】ユーザ変数を使って連番や、連続日付を取得する方法について

【MySQL】カラム名を囲むバッククオートについて

いつも何気なくカラムを使う時には、ほぼカラム名をバッククオート「`」で囲んでいます。
バッククオートは無くても問題は無いのですが、全角文字をカラムにしている場合は 経験上から気持ち悪いのでそうしています。

Oracleなんかだと、バッククオートではなくダブルクォートで囲みます。

以下の記事のテーブルを例にバッククオートでの囲み方を示します。

【MySQL】既に存在するTABLEに複数カラムを位置指定で追加する方法について(ALTER TABLE)


最初の SELECT 文はバッククオート無し TEST1 テーブルの全てを検索していますが、 2番目の SELECT ではカラム及び、テーブル名をバッククオートで囲っています。

バッククオートですが何が有利なのかと言えば、カラム名が予約語でもOKなのです。 (普通は予約語をカラム名にしませんが)
以下の例を見て下さい。 カラム名には相応しくない INSERT ですが、取り敢えずテーブルに追加して SELECT してみます。

結果は問題無く出来る様です。(しかし、予約語はいけませんが。)

バッククオートは少し面倒くさいのですが、カラム名などをはっきりと区別できる点もありますし、 使った方が良いと思います。 (テーブルの別名にもバッククオートは付加できます)

楽天市場


■関連記事
【MySQL】ダミーテーブルをUNIONで連結してコード表を作成する方法
【MySQL】ユーザー変数を使ってSELECTに行番号を付加する方法
【MySQL】カラム名を囲むバッククオートについて
【MySQL】UNIONMINUSが無いので、代わりにNOTEXISTSを使う方法について
【MySQL】ユーザ変数を使って連番や、連続日付を取得する方法について

【MySQL】既に存在するTABLEに複数カラムを位置指定で追加する方法について(ALTER TABLE)

仕様変更などでテーブルのカラム追加が発生しますが、 この時複数のカラムを位置指定で行う方法について記します。

先ずは、最初に例となるテーブルを以下の様に作成します。 このテーブルはテストなので、特に主キーなどは追加しません。


このテーブルの COL2 の次に ADDCOL1ADDCOL2 と言う名前で VARCHAR 属性で追加します。


これを実行してテーブルを見てみると、カラムが追加されたことが分かります。

楽天市場


■関連記事
【MySQL】テーブルカラムは大文字・小文字の区別が無いので注意が必要
【MySQL】テーブル作成時にカラムにAUTO_INCREMENTを設定する方法について
【MySQL】テーブルカラムに後からAUTO_INCREMENTを設定する方法について
【MySQL】文字列カラムに追加で更新する方法について(CONCAT)
【MySQL】既に存在するTABLEに複数カラムを位置指定で追加する方法について(ALTERTABLE)