台灣最大程式設計社群網站
線上人數
1340
 
會員總數:243171
討論主題:187987
歡迎您免費加入會員
討論區列表 >> PHP >> 想請教從表單接收到動態欄位後,如果動態組成SQL語法寫入資料庫!
[]  
[我要回覆]
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
想請教從表單接收到動態欄位後,如果動態組成SQL語法寫入資料庫!
價值 : 10 QP  點閱數:3472 回應數:25

樓主

端茶小弟
門外漢
0 11
222 40
發送站內信


前面的表單是動態產生的,然後我寫了一段接收的程式,如下
if(count($_POST)>0)
{
foreach($_POST as $k=>$v)
{
echo $k."=".$v .'<BR>';
}
}
可是要怎樣,動態組成SQL語法,寫入資料庫,不知有什麼好方法,提供建議,謝謝,感恩
我是這樣想,先弄為陣列,然後組成sql語法,不過會有很多個sql語法,這樣效率就會變差
最好的方式,當然是一次解決

INSERT INTO 資料表名(欄位1, 欄位2,欄位3)VALUES('值1', '值2','值3');

欄位及值都動態去組合

本篇文章發表於2012-02-01 13:49
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
回應

溫子
捐贈 VP 給 溫子 檢舉此回應
隨便找一套 php framework 都可以辦到不用自己寫
本篇文章回覆於2012-02-01 18:25
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
回應

浩瀚星空
捐贈 VP 給 浩瀚星空 檢舉此回應
一般來說~~~動態式的欄位名稱,不建議使用欄位指定法。
因為欄位名稱不固定,但您的資料表一定得要有這些全部的欄位名稱存在,很不符合空間效益。

正確來說,不是用單一欄位來儲存動態式的資料,就是用分表來儲存。才是最好的處理方式。

但你的問題我也回答一下好了
指定欄位插入可以用如下的SQL語法來幫你處理,這樣在程式上也比較容易處理,並不一定要用VALUES插入資料。

INSERT INTO 資料表名
SET
欄位1 = 資料1,
欄位2 = 資料2,
欄位4 = 資料4
...............
本篇文章回覆於2012-02-02 09:49
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
最有價值解答

Solty
檢舉此回應
呃..我懶得說明這是怎麼一回事...基本上這是我用來處理小專案的自製輪,節錄一段
魚給你,會不會吃就看你自己囉

用法就是檔案include進來後(必須使用PDO)


本篇文章回覆於2012-02-02 11:25
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
作者回應

端茶小弟
檢舉此回應
版主:
您說
「因為欄位名稱不固定,但您的資料表一定得要有這些全部的欄位名稱存在,很不符合空間效益」
當然要有這些欄位,才能呀,那怎樣才會府合空間效益?

「正確來說,不是用單一欄位來儲存動態式的資料,就是用分表來儲存。才是最好的處理方式」
我並沒有說要用單一欄位存儲,我只是有多個欄位要插入資料,你會錯意了

說明下,假設我資料庫有以下欄位
欄位1,欄位2,欄位3,欄位4....都是資料庫已經有的欄位,但我這次只要去更新 欄位2,欄位4,下次可能更新欄位1,欄位2,每次不一樣,這是我要的目標,還有新增記錄這樣子

本篇文章回覆於2012-02-03 10:36
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
作者回應

端茶小弟
檢舉此回應
to Solty

專業,研究一下,謝謝,
本篇文章回覆於2012-02-03 10:42
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
作者回應

端茶小弟
檢舉此回應
to Solty
這實在太深了…功力深厚!有點給他複雜的,我是指PDO物件的程式碼
本篇文章回覆於2012-02-03 10:50
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
回應

浩瀚星空
捐贈 VP 給 浩瀚星空 檢舉此回應
你還是跟上次犯的毛病一樣,沒辦法知道人家跟你說的東西。

因為你題目堙A有先說了你是動態式產生名稱。
所以其欄位名稱在基本認知上就是屬於未知的情況。必需要做規化式的處理。

何謂規化式的處理,如將欄位名稱統一為 file1,file2,file3.........
如果表單中可以無限或有一定數量的欄位文字框的情況。假設限制30個好了。
那你在表的欄位,就必需得要有這30個欄位,而且還不一定全用上。
就算一開始不用那麼多欄位,來做成動態式的處理增加欄位好了,還是會有空間浪費的問題存在。

不過依照你#4的說法,可以確定的是你並非是這樣的規化性欄位。只是希望有什麼欄位更新什麼欄位。
我上面說的只是建議你,像你這樣的做法,最好是用單一欄位或是分表處理。並非是我去誤會你用單一欄位。

依照你的需求我在#2給你的SQL碼就能做到了。單純的使用SET命令來定義你想增加的更新的欄位就好了。程式碼也比較單純。不需要去用到VALUES還得去產生欄位名稱跟變數名稱兩個值出來做插入。

#3給你的答案就是利用VALUES來做插入,其53~60行就是在產生VALUES的欄位名稱跟對應值。也就是寫成一個類來幫你處理。你只要將陣列放進去就行了。
但如果直接用SET命令你可以更單純的處理。

人家#3都直接將東西給你了,你還不會用。它已經給你簡化了插入的動作了。雖然是用PDO的方式。我猜你可能也不知道怎麼去使用。
那只是給你一個理念而已。

說那麼多也沒什麼用,直接給你實例好了,只是希望你能明白。



這樣是否可以了解了呢????還是不了解我就沒辦法。不會又說我會錯意了吧。
本篇文章回覆於2012-02-03 11:57
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
作者回應

端茶小弟
檢舉此回應
to 浩瀚星空
版主你講話在機車一點沒關係,我是欠你很多錢是嗎?跟我在那大小聲什麼,不爽就不要回答,當什麼版主,沒人叫你回答ok..
本篇文章回覆於2012-02-03 14:04
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
9樓
作者回應

端茶小弟
檢舉此回應
我犯什麼毛病,關你什麼事…我是你小弟是嗎?
本篇文章回覆於2012-02-03 14:04
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
10樓
作者回應

端茶小弟
檢舉此回應
不要在那賣弄技術啦,不是只有技術就利害到那去,人外有人,天外有天…
本篇文章回覆於2012-02-03 14:06
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
11樓
作者回應

端茶小弟
檢舉此回應
人家#3都直接將東西給你了,你還不會用-->我有說不會用,你不要在那猜會不會用,會不會用,也關你屁事,全世界就你最強,行了吧!
本篇文章回覆於2012-02-03 14:10
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
12樓
作者回應

端茶小弟
檢舉此回應
我才覺得你看不懂別人在說什麼,自已在那猜,笑死人了…看不懂國字呀!真是欠人罵!我有說我不會用嗎?你又知道我不會用,那隻眼晴看到,還是你屁股看到了…笑死人
本篇文章回覆於2012-02-03 14:12
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
13樓
回應

浩瀚星空
捐贈 VP 給 浩瀚星空 檢舉此回應
是的~~~感謝您的指教。

沒必要為了我這小小的版主去觸犯版規。勞費您的心神。浪費小鋪的資源。
我就遵從您的意願,將不在回答您的問題。免得我的屁眼去看到您,讓您覺得不舒服。

並祝您早日成功解決問題。
本篇文章回覆於2012-02-03 15:26
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
14樓
作者回應

端茶小弟
檢舉此回應
我已經寫出來了,我是用另一種方式,更簡潔的方式


參考其他高手的文章,如下
http://www.blueshop.com.tw/board/FUM20041006152627A9N/BRD20110401202833IG2.html

已經順利解決,處理流程大概是這樣

1、從表單取值-->表單欄位不固定,依據我前一頁的sql語法產生的
2、籍由$_POST取值,放入陣列處理,移除最後一個陣列
3、再把陣列用implode函數處理
4、把處理完的結果,放入SQL語法,就搞定了啦!

更簡潔的作法
本篇文章回覆於2012-02-03 17:37
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
15樓
回應

浩瀚星空
捐贈 VP 給 浩瀚星空 檢舉此回應
是的,吳先生,非常高興你能用你的方式來解決這樣困難的問題。
問題解決請記得結案。建議#3是最佳解答。並祝您開發愉快。

本篇文章回覆於2012-02-03 18:00
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   

回覆
如要回應,請先登入.