2006年11月1日 星期三

foreach和DB Operation Tips

從朋友的code看到這樣的寫法:

foreach($_POST as $key => $value) ${$key} = $value;

以前都要這麼寫

$id = $_POST["id"]; $password = $_POST["password"]; ...

用foreach和間接變數索引真是簡單多了,也可以把資料存在陣列,再用foreach輸出,達到data和view分離(延伸說明可查MVC):

// data, 從DB取出使用者資料 $list = array(); $result = db_query("SELECT * FROM `user_data`;"); while($arr = dbl_fetch_assoc($result)) $list[$arr['sn']] = $arr['name']; ... // view, 輸出使用者下拉式選單 <select name="user"> <? foreach($list as $id => $name) echo "<option value=\"$id\">$name"; ?> </select>

ronnywang補充對$_SESSION用這招foreach時,要注意寫回去的設定:

// in the beginning of the code foreach ( $_SESSION as $key => $value ){ ${$key} = $value; $_SESSION[ $key ] = &${key}; // save reference }

比方用到$_SESSION[”permission”],在上面的寫法之後,就能直接對$permission讀寫,如果少了save reference那行,$permission = 3不會把值寫回$_SESSION[”permission”]裡。

另外想到SMF對db query的寫法也滿讚的,將DB field name和value存到陣列裡,再透過implode合成query指令的內文,這種做法很有彈性:

// $regOptions['register_vars']是關聯陣列,key用DB field db_query(" INSERT INTO {$db_prefix}members (" . implode(', ', array_keys($regOptions['register_vars'])) . ") VALUES (" . implode(', ', $regOptions['register_vars']) . ')', __FILE__, __LINE__);

沒有留言:

張貼留言