最近のトラックバック

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

おすすめ本

AccRanking

Ad

カテゴリ「PHP」の25件の記事 Feed

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" としたタグは選択できない灰色の表示になります。

楽天市場

2019年7月 6日 (土)

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

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

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


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

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

楽天市場

2019年7月 3日 (水)

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

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

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

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



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

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

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

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


楽天市場

2018年11月 2日 (金)

【PHP】QRバーコードの生成の方法について

PHPでのQRバーコードの生成方法ですが、以下のサイトにフリーソフトが公開されていますのでこれを使ってみます。

QRcode Perl CGI & PHP scripts ver. 0.50

ページの下の方の「qr_img0.50j.tar.gz (1007KB)」をダウンロードします。

ダウンロードしたファイルを展開し「qr_img0.50j」フォルダができますので、 PHPプログラムのあるディレクトリに全てをコピーします。

このプログラムの使い方は「qr_img0.50j/README.txt」に詳しく書かれていますが、 プログラムの出力が画像データそのものなので、HTMLのIMGタグのURLとして指定すれば ブラウザでQRコードが表示されます。

HTMLのソースは以下の様になります。

Qruploadimg1


PHPのプログラムで使う場合は以下の様なソースになります。

ここで注意するのは「qr_img.php」を呼出す場合は、URLをサイトの先頭から記述することです。
楽天市場

デル株式会社

2018年8月14日 (火)

【PHP】可変変数と可変クラスの使い方について

PHPでは変数に関数名を設定し、その変数の後に括弧(())を付けることで、変数に設定された関数を実行します。 これは、似た様な関数を作成した時に、何かの条件で関数の実行振り分ける時に使えるかと思います。

以下の例では、2個の関数を宣言し、関数名の配列を宣言し、繰り返し処理でそれぞれの関数を実行しています。


結果は以下の表示になります。

それぞれの関数が実行されたことが分かります。


可変関数の方法をクラスにも適用できます。 可変関数の様に別名のクラスを用意し、同じメソッドを持たせてみます。

この結果は以下の様に、クラスが順次生成され、「hello」メソッドが呼び出されることが分かります。


楽天市場

デル株式会社

2018年8月13日 (月)

【PHP】配列の中に参照変数を持つことで別々の変数の要素を操作する

PHPでのプログラムでは変数の参照を扱う場合には、変数の先頭に & を付けます。 配列の要素を操作する場合には以下の様に、配列の中身を受ける変数の先頭に & を付けて処理します。

以下の例では、数値配列を設定し、配列内の要素の値を10倍しています。


結果は以下の表示になります。

配列の全ての要素が10倍されていることが分かります。


ここで、別々の変数の参照を配列に持ち処理する方法を示します。

この結果は以下の様に、3個の変数の値がそれぞれ10倍されたことが分かります。


デル株式会社

2018年5月31日 (木)

【PHP】配列の代入はクローンコピーになる

最近、PHPでのプログラムを組む上で、配列の代入の動作がどうだったか少し心配になったので調べてみました。

配列の代入は、代入元の配列の内容そのものが全てコピーされます。他の言語では代入元のクローンを作成し、 代入先の配列に設定する感じです。

以下のソースは代入を行う簡単な例です。

結果は以下の表示になります。

コピー先の配列の内容が、コピー元の内容と異なっていることが分かります。

但し、代入の所で「&」を使用すると、内容がコピーされるのではなく、参照がコピーされます。

この結果は以下の様に、2個の配列の内容が同じになります。



デル株式会社

2018年4月19日 (木)

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

最近他の人が作ったプログラムの改修作業が在ったのですが、その中で stdClass を使っていて 私は使ったことが無かったので少し調べてみたところ、連想配列の様な使い方ができることを知りました。

クラスを使う場合、普通は別のクラス宣言でクラス名を付けますが stdClass は無名クラスとして クラスオブジェクトを生成する様です。

以下のソースは stdClass を生成し2個のプロパティへの代入を行う簡単な例です。
stdClass で生成されたオブジェクトに対して、プロパティを指定する時点で、 内部的にそのプロパティが生成されるようです。

結果は以下の表示になります。

2個のプロパティに値が設定されていることが確認できます。
尚、このソースに stdVal3 というプロパティを参照する様にしてみます。

この結果は以下の様に、Notice エラーが発生します。
代入設定されていないプロパティを参照することはできない様です。


この stdClass ですが配列に変換することができます。 以下のソースでは stdClass オブジェクトを array オブジェクトに代入し変換しています。

上のソースから stdClass は連想配列的であることが分かります。
尚、 stdVal1 とソース上固定の記述のみしか扱えないわけでは無く、 次の例では stdVal1 の参照を変数を用いて行う方法を示します。

オブジェクトのプロパティを変数で扱えると応用がいろいろ利くと思います。

デル株式会社

2018年4月18日 (水)

【PHP】関数の戻り値を複数にする方法(list関数)

他の言語では難しいのですが、PHPでは関数の戻り値を配列(array)で行い、 結果をlist関数で受けることにより複数の戻り値の様になります。

先ずは、list関数についてみてみます。 以下のソースを見て下さい。

結果は、変数 $d1, $d2, $d3 に配列のそれぞれの値が順番に入るので以下の表示になります。

これを参考にして関数の戻り値を複数にしてみます。

関数の戻り値を list関数で受けることで、3個の変数にばらすことができます。
(この結果の表示は先ほどのものと同様です。)
そこで、関数を少し複雑にして、戻り値を1個の数値データと、配列データを戻してみます。

関数の中身は、配列データを入れ子にして戻り値にしています。配列の中身がさらに配列でも入れられるのでこの様なことができます。

データベースから一連のデータを取得する場合に、データ件数とそのレコードデータを返す場合に使えると思います。
上のソースの結果は以下の様になります。

デル株式会社

2018年4月17日 (火)

【PHP】POSTやGETなどのスーパーグローバル変数のアクセスはfilter_inputを使う方が安全らしい

POSTやGETなどのスーパーグローバル変数へのアクセスは直接以下の様にすることで行えます。
この例では、$_GET変数から id という引数を取得します。

これを filter_input 関数を使うと1行ですっきりします。

但し、これだと引数 id が全く指定されない場合は、変数 $id の中身がNULLになってしまいます。 そこで filter_input 関数の第3引数に FILTER_SANITIZE_STRING を指定すれば id を文字列として 取得できます。

引数 id を整数値として扱いたい場合は、第3引数に FILTER_VALIDATE_INT を指定します。

この場合でも、id=aaa の文字列指定であったり、id= の様に未指定であったりすると 変数 $idfalse で返されます。
これでは不都合があったりしますので、値の規定値、最小値、最大値の指定を filter_input 関数の第4引数に配列で指定します。

指定された min_range指定値と max_range指定値の範囲外の場合は default指定値が返されます。

デル株式会社