おすすめ本

最近のトラックバック

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

AccRanking

Ad

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

2011年4月25日 (月)

checkboxとフォーム変数について

checkboxとPHPに渡されてくるフォーム変数について、すこし調べてみました。

以下の様なPHPソースを実行させると、チェックを入れた一番下の値しかフォーム変数に渡されないことがわかります。
ラジオボタンの様な動作になっています。


ここでvalue="1"のcheckboxの前にhiddenを追加してみます。


この場合の動作は、チェックボックスに1個でもチェックがあれば、最後のチェックボックスの値が"foo"として 渡されますが、チェックが無ければhiddenの値である"0"が渡されます。
この方法を使えば、デフォルト値的なことができますが、少々イレギュラーな使い方ではあります。
通常は、isset($_POST["foo"]を調べれば同じことができますが。


チェックボックスの使い方であれば、以下の様にするのが一般的です。


ただし、この方法だとfooの配列としてフォーム変数が渡されますが、配列の添え字が詰まった形で渡されてきます。
twoとfourにチェックをして送信した場合は、フォーム変数が以下の様になります。
($_POSTをprint_r()関数で出力してもの)
$_POST:Array ( [foo] => Array ( [0] => 2 [1] => 4 ) [tx] => 送信 )

もし、添え字も値と合わせたいのであれば、以下の様にします。




この場合、twoとfourにチェックをして送信した場合は、フォーム変数が以下の様になります。

($_POSTをprint_r()関数で出力してもの)
$_POST:Array ( [foo] => Array ( [2] => 2 [4] => 4 ) [tx] => 送信 )

楽天市場

2011年4月18日 (月)

phpMyAdminでcreate functionではまったこと

MySQLで関数を作成する必要に迫られて今回初めて作成してみました。
処理の内容は、数値文字列で小数点以下の無駄な"0"を省く処理です。

実際の関数は下の様なものです。

このソースをそのままphpMyAdminのSQLを実行するボックスにコピーし、「実行する」ボタンを押下してもうまく作成されない。
よくよくネットで調べると、2行目のデリミタの設定命令などはmysqlをコマンドで起動しその中で行うようです。

phpMyAdminのSQL実行のボックスの下にデリミタという入力する部分があることに気が付き、ここに // を入力し、
上のソースの「create function...」から「end//」までを実行ソースのボックスにコピーし実行しました。
結果うまく作成することができました。

2011年4月16日 (土)

PHPでExifを扱う(PEL)

デジタルカメラや、携帯で撮影した画像のほとんどはJPEGファイルにして保存されます。
このJPEGファイルには各種の属性がEXIF(Exchangeable image file format)という規格で登録されています。このEXIF情報をPHPで扱う場合に、PHPの標準のEXIF関数を利用します。しかし、この関数には読み込みはあるのですが、書込みがありません。

そこで書込みのできるライブラリを探してみると、「PEL」というライブラリがありました。
このライブラリはフリーソフトでPHPのみで書かれていますし、 結構使えそうです。このライブラリは以下のURLからダウンロードができます。

http://pel.sourceforge.net/

このライブラリを利用した、EXIFを含んだ画像ファイルのリサイズの例を以下に示します。
(尚このソースはサンプルとして付属していたものを少し変更したものです)

楽天市場

2010年8月 3日 (火)

PHP5のソースをPHP4で動作させた時にはまったこと

最近、とあるPHP5で作成したプログラムをPHP4で動作させなければならなくなり、 早速そのソースをPHP4の動いてるサーバに移行しブラウザでアクセスしてみても 画面が真っ白になるだけでした。

そんなに難しい処理ではないので、ただソースをアップロードしてやれば動くだろうと高をくくっていました。
ちょっとあせってしまって、色々調べたら、クラスの書き方がPHP4とPHP5では違う様です。

その違いですが、以下の3点を直しました。

1.クラス内の変数にPrivate,Publicなどの修飾子は使用出来ないので、全てvarで宣言する。
  (PHP4では変数宣言は全てPublic扱いになる)

2.関数の宣言にもPrivateの修飾子を付けられない。
  (PHP4では関数宣言は全てPublic扱いになる)

3.クラスのコンストラクタはクラス名と同じ関数を用意する。

変更前のソース

変更後のソース

楽天市場

2009年12月26日 (土)

phpMyAdminでTEXT型のカラムの表示を文字列で行う場合

MySQLの管理用ソフトとしてphpMyAdminを使用されている人は多いと思いますが、TEXT属性のカラムの表示を行うと以下の表示になるはずです。

[BLOB - 30 バイト]

これでは内容が分からないので、文字列がそのまま表示されると便利です。
そこで、「config.inc.php」の最後の方に以下の1行を追加します。

$cfg['ShowBlob'] = true;

ただし、「config.inc.php」の権限の書込みを許可したままにしておくと以下のエラーが表示されますので注意して下さい。

Wrong permissions on configuration file, should not be world writable!

あとデフォルトの設定のままだと、1800秒(30分)何もせずに、他の作業を行うと再ログイン画面が表示されます。
これも結構面倒なので、時間を延ばす場合は「config.inc.php」に以下の1行を追加します。

$cfg['LoginCookieValidity'] = '18000'; //18000秒にしました。

2009年12月10日 (木)

ラジオボタンをdisabledにするとPOSTされてこない

最近仕事でPHPを久々に触っていますが、ラジオボタンの簡単なところでではまってしまった。

ある登録画面で、状態設定のラジオボタンを設置し、全ての入力項目を入れた後で「確認」ボタンで一旦画面の項目を全てdisabledの指定で再表示し、更に「登録」ボタンで実際のDBに登録するという手順です。(以下の様なソースです)

...
<?
if ( 確認ボタン押下時? ) {
    $strDisabled = "disabled";
}

$strChecked1 = "";
$strChecked2 = "";
if ($strStatus == 1) {
    $strChecked1 = "checked";
} elseif($strStatus == 2) {
    $strChecked2 = "checked";
}
?>
<input type="radio" name="radioButton" value="1" <?=$strChecked1?> <?=$strDisabled?>/>状態1
<input type="radio" name="radioButton" value="2" <?=$strChecked2?> <?=$strDisabled?>/>状態2
...

disabledの状態で、POST処理を行なうわけですが、いくら$_POST["radioButton"]を見ても変数が宣言されていません。いくらやってもradioButtonは渡されてこないわけで、DBには値が
登録されません。他のtype="text"のものは渡されてくるのにtype="radio" は渡されない。

type="radio" でdisabled指定のものはPOSTされてこないことを思い出し、状態のデータをtype="hidden" で退避しておくことで、事なきを得ました。

たった2,3ヶ月PHPを触っていないだけでこの有り様、もう少し精進しないと...
しかし、仕様とはいえ、type="text"ではPOSTされるのなら、type="radio"でも
渡されても良い様な気がしますが。