作者clubflymf (clubfly)
看板PHP
標題Re: [請益] 核取方塊&MySql
時間Wed Jun 10 09:22:11 2009
基本上這只是舉例...
可見您沒去思考 陣列唷....
對單筆資料來說
其實連 for 或是 foreach 都不用寫的...
當您設定 選核方塊為 陣列時
假設您選了 唱歌 畫畫
當您送出後
php 已經產生了 request 與 post 陣列如下
Array
(
[q] => Array
(
[0] => 唱歌
[1] => 跳舞
)
)
那您在 插入資料庫後
能直接寫成
$sql = " insert into xxx
set 興趣1 = '".$_REQUEST['q']['0']."',
興趣2 = '".$_REQUEST['q']['1']."',
興趣3 = '".$_REQUEST['q']['2']."',
.................................ETC ";
另外
sql 除錯的部份
您可以 把sql echo 出來
先別急著 mysql_query
然後把您產生的 echo 出來的 sql
輸入資料庫後 看看錯誤在那了
phpmyadmin 應該 有裝吧 @@
※ 引述《sun1988 (風)》之銘言:
: 感謝你的教法,可我試過了,我顯示一直錯誤
: 這是選核取方塊部份
: <input type="checkbox" name="q[]" value="唱歌">
: <input type="checkbox" name="q[]" value="跳舞">
: <input type="checkbox" name="q[]" value="畫畫">
: 如果我想的沒錯
: $size = sizeof('q'); <=這裡應該是這樣?
: for($i=0 ; $i<$size ; $i++)
: {
: $SQL = "insert into chkb set ckb1 = '".q[$i]."'"; <=這裡應該是這樣?
: }
: 因為我這樣子弄完顯錯誤是
: Parse error: syntax error, unexpected '[' in C:\AppServ\www\q2.php on line 19
: 而第19行就是$SQL 這一段
: ※ 引述《clubflymf (clubfly)》之銘言:
: : 若您是使用 陣列 存值的話
: : for 跟 foreach 都可以使用
: : 也可以存入 1-3 的
: : 兩著差在一個用變數去比對
: : 一個是用key去比對
: : 舉個例子
: : 若您將興趣的值 用array接收
: : 如下
: : <input type="checkbox" name="ins[]" value="唱歌">
: : <input type="checkbox" name="ins[]" value="跳舞">
: : <input type="checkbox" name="ins[]" value="畫畫">
: : 送出資料後
: : 會有一個array產生 $_request 印出來看看 來$_post 也可以
: : $size = sizeof(? ); //自己動手找答案了...XD
: : for ($i =0 ; $i<$size ; $i++){
: : $SQL = "INSERT INTO XXX
: : SET XXX=".array[$i]."''
: : ............... ";
: : }
: : foreach ($array AS $KEY=> $val ){
: : $SQL = "insert into XXX
: : SET XXX='".$val['0'] ." '
: : ....................... ";
: : }
: : 把php 的array 當 tree 來看
: : 一個門牌一個值 應該很好懂的 ^ 0 ^
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.32.116.173
推 appleboy46 :insert into set ? 06/10 09:38
推 kylekai :Sql 語法好像有錯?... 06/10 09:46
insert into 表單名稱 set 欄位1 = "值1",
欄位2 = "值2"
跟
insert into 表單名稱('欄位1','欄位2')
values('值1','值2')
兩者都可以使用
差別在於
用set 時
沒設定的欄位 會直接為資料庫 default
使用 原始的 table field 跟 values 若有少打發生錯誤時
會直接中斷 而 set 只是不更新 欄位
valus 用法 欄位一多 不好檢查
大概是這個樣子
※ 編輯: clubflymf 來自: 114.32.116.173 (06/10 10:08)
→ clubflymf :補充一點 MYSQL 3.22.10 以後才支持 SET的用法 @@ 06/10 10:16
推 kylekai :受教了.. 最近都寫 function 自動array=>sql.. :p .. 06/10 10:18
→ clubflymf :直接把ARRAY MAP 過去SET 就可以不用FUNCTION了 ^^ 06/10 10:27
推 dspswen :有學有推 06/10 10:33
推 kylekai :不懂你的意思.我都是 insert('tablename',$data); 06/10 13:02
→ kylekai :function 裡面應該就是你說 array map to set,insert 06/10 13:02
推 appleboy46 :我也都是用 kylekai 說的方式下去撰寫 06/10 13:50
→ appleboy46 :不管是 insert 或者是 update 都是如此 06/10 13:50
哈...我說的MAP 應該說 就直接 對陣列資料處理 XD
PHP的 ARRAY 蠻有趣的 只要有 KEY 就能對應相對的值
所以就可以少寫涵式嚕
一個 FOR 或 FOREACH 就能處理了 ^^
※ 編輯: clubflymf 來自: 114.32.116.173 (06/10 15:33)
→ kylekai :函式內也是foreach, 另外加上 escape 等吧. 06/10 15:54
→ kylekai :我想我跟 appleboy 都不喜歡主程式一堆foreach... 06/10 15:54
→ kylekai :所以才會把那些一直重複的foreach處理包function. 06/10 15:54
→ kylekai :anyway ..既然是一樣的..就不用多說了..:) 06/10 15:55
推 shadowjohn :重覆性太高的工作都用function :D 06/10 17:01
→ shadowjohn :分頁﹑表格﹑DB to array﹑array to DB﹑... ... 06/10 17:02
推 sun1988 :P謝各位的教學 我懂了 06/11 20:41