[PHP-users 13825] Re: 関数の戻り値の使い方

tamura php-users@php.gr.jp
Fri, 07 Mar 2003 14:41:00 +0900


田村です、毎度。

竹内さん、すみません。
> 悪意がないものだと頭では理解できているのですが、
> 敢えて今頃しゃしゃり出てきました。
 そのように、とられたとすれば、まことに申し訳ありません。

>  多くの人からアドバイスを受け、田村さんなりに頑張って
> 関数を完成させたというのでしたら、どこをどう修正したのか
> 公開しても良いものではないでしょうか。見ず知らずの人に

 私の修正した関数は、

function updatesql($svname, $tbname, $usname, $psname, $COL_DATS,
$WHERE){
  $set = ' SET ';
  foreach ($COL_DATS as $key => $dat){
    $set .= (strlen($dat) == 0)? "{$key}=NULL,": "{$key}='{$dat}',";
  }
  $set = chop($set, ',');
  $sql  = 'UPDATE '.$tbname.$set.' where '.$WHERE;
  $conn = mysql_connect($svname, $usname, $psname);
  $result = mysql_query($sql, $conn);
  return($result);
}

で、実行部は

$COL_DATS = array (category_code=>$category_code, category_name=>$category_name, category_explain=>$category_explain);
$WHERE = "category"."_id=".$category_id;
$sql = updatesql($svname, $tbname, $usname, $psname, $COL_DATS, $WHERE);

です。

>  田村さんが求めている理想とはかけ離れているかもしれませんが
> 似たようなことを私がするとすれば、DBのフィールド名とHTMLの
> フォームタグのプロパティ名を同じものにして、それを$_REQUEST
> で受け取り、それを一旦適切に処理を施してから関数に渡すと思います。
 私は、HTMLのフォームタグのプロパティ名を、以下の$fdnameにあわせて下記
のようにしたのですが、

$conn = mysql_connect($svname, $usname, $psname) or die("接続エラー");
$cnt=0;
$result=mysql_list_fields($dbname, $tbname, $conn);
while ($cnt<mysql_num_fields($result)){
  $fdname[$cnt]=mysql_fieldname($result, $cnt);
  $cnt++;
} 
(中略)
<td colspan=2><input type="submit" value="追加登録" name="submit"></td>
<td><input type="text" name="fdname[1]" value="<?= cnv_dispstr($fdname[1])
?>"></td>
<td><input type="text" name="fdname[2]" value="<?= cnv_dispstr($fdname[2])
?>"></td>
<td><input type="text" name="fdname[3]" value="<?= cnv_dispstr($fdname[3])
?>"></td>

各フィールドに、フィールド名(category_codeに$category_codeなど)が入っ
てあきらめたのです。

> 似たようなことを私がするとすれば、DBのフィールド名とHTMLの
 今度は、DBのフィールド名からあわせて試してみます。

>  タイプミスが多いと、ML参加者が田村さんの代わりにお願い
> されなければならないのでしょうか。タイプミスが多いという
> 自覚があるのでしたら、それをなくせば完成するという代物では
> ないのですか。

>  プログラマは自分で構築していくシステムの規則をある程度
> 自由に設定できるはずです。田村さんが考えているのは、自分で
> 規則性を定義できることを否定しているような感じを受けます。

 おっしゃることがよく理解できないのですが、A部内で作ったものを、B部で利
用する場合、DBが変わりますが、$sql文が汎用に作成してあれば、効率があがる
と思います。仮に、私の定義する規則性というならば、上のようなことなのです。

 最後に、説明のまずさや、抜けている部分がありましたことは、お許しくださ
い。決して悪意のものではありません。