在PHP中使用複選框和一個數據庫

介紹

在php幫助論壇,如何處理問題的複選框出現很頻繁。 通常,人們希望能夠選擇哪些行數據庫的更新/刪除/拋出窗外。

這個概念是非常簡單的。 它涉及到命名你的複選框作爲一個數組,使用mysql條款。 本教程的目的是給一個簡單的例子,希望,下次有人問,我可以指出他們的教程,而不是重新解釋。

的節目。

數據庫

看到我們要更新數據庫,我們需要一張桌子和一些數據。 這是一個表之前我做了:

創建表“tutorial_users”(“id”INT(10)非空AUTO_INCREMENT,“用戶名”VARCHAR(50)非空,“管理”非常小的整數(1)非空的默認' 0 ',

主鍵(“id”))引擎=MYISAM

和一些數據。 不用猜也知道我只是在電視上看:

插入“tutorial_users”(“id”,“用戶名”,“管理”)

值(

零,“Stewie”,' 0 '),(

零,“彼得”,' 0 '),(

零,“布萊恩”,' 0 '),(

零,梅格的,' 0 '),(

零,“路易斯”,' 0 '),(

零,“克里斯”,' 0 '),(

零,“抹油了失聰的人”,' 0 '),(

零,“困境”,' 0 ');

這是一個簡單的設置。 用戶的表和字段稱爲管理,這是該領域我們將更新。

如果你的(或加; 我們都平等機會)誰喜歡一個快速修復的完整代碼。 否則,我們會將它分解。

的代碼

< ?php
包括(“connect.php”);
美元更新=假;如果(數($ _POST)>0){
美元的管理=$ _POST[“管理”];
到(“intval中”,美元的管理);
美元的管理=內爆(”、“,美元的管理);
mysql_query(“更新tutorial_users設置管理= 0”)或trigger_error(mysql_error(),E_USER_ERROR);
mysql_query(“更新tutorial_users設置管理= 1,id(admin)美元”)或trigger_error(mysql_error(),E_USER_ERROR);
美元更新=真正的;}? >< ! DOCTYPE html公共”——/ / W3C / / DTD的XHTML 1.0 Strict / / EN " " http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd " ><htmlxmlns=“http://www.w3.org/1999/xhtml”><頭><元http-equiv=“內容類型”內容=“text / html; charset = utf - 8”/ ><標題>phpfreaks複選框教程< /標題>< /頭><身體>
<表單動作= "< ?php echo $ _SERVER[“PHP_SELF”];? >”方法= " post " >
< ?php
如果(美元更新= = =真正的){
回聲“< div >權限更新! < / div > ';}? ><表><tr><th>用戶名< /th><th>管理員權限< /th>< /tr>< ?php
美元的sql=“選擇id、用戶名admin tutorial_users命令id ASC”;
美元的結果=mysql_query(美元的sql)或trigger_error(mysql_error(),E_USER_ERROR);而(列表($ id,美元的用戶名,美元的管理)=mysql_fetch_row(美元的結果)){
美元的檢查=(美元的管理= =1)嗎?”=“檢查”檢查:”;
回聲“< tr > < td >”。美元的用戶名。' < / td > < td > < input type = "複選框" name = value =“管理[]”。$ id。“””。美元的檢查。' / > < / td > < / tr > '。“\ n”;}? ><tr> <道明colspan=“2”> <輸入類型=“提交”的名字=“提交”價值=“更新權限”/ > < /道明> < /tr>< /表>< /形式>< /身體>< /html>

插曲

謝謝你的堅持。 在我們仔細看看這些代碼之前,我只是想說一點關於複選框和它們是如何工作的。

你可能意識到很多其他的表單元素,如文本字段,如果你離開他們空白的他們仍然會出現在$ _POST / $ _GET數組——只是一個空白值。

另一方面,複選框更像按鈕。 如果你不檢查他們,他們不會出現在數組中。 假設你選擇他們,他們會把你給他們的價值或在默認情況下。 牢記這一點,以後會很重要。

把它分解

我要開始分解通過代碼從打開表單標籤,看到之前你必須填寫,你可以處理它。

<表單動作= "< ?php echo $ _SERVER[“PHP_SELF”];? >”方法= " post " >
< ?php
如果(美元更新= = =真正的){
回聲“< div >權限更新! < / div > ';}

我們有一個標準形式使用post方法,並操作相同的頁面。 我們也會顯示一條消息如果數據庫更新,因爲我們這樣的好。

<表><tr><th>用戶名< /th><th>管理員權限< /th>< /tr>

我們將設置一個表中列出的用戶名和特權。 如果你不喜歡錶,真不走運。

美元的sql=“選擇id、用戶名admin tutorial_users命令id ASC”;
美元的結果=mysql_query(美元的sql)或trigger_error(mysql_error(),E_USER_ERROR);

我們從數據庫中選擇我們需要的字段(不能忘記的id,因爲我們將使用此識別每一行)和執行查詢錯誤檢查。

而(列表($ id,美元的用戶名,美元的管理)=mysql_fetch_row(美元的結果)){

如果你不熟悉這個列表()構造,它允許我們從數字索引數組分配大量的變量。 我厭倦了使用美元行,因此改變。 重要的是要使用mysql_fetch_row(),這樣你得到一個數字索引數組(而不是一個關聯),你創建的變量與您所選擇的順序相同查詢。 看到手冊頁多一點。

美元的檢查=(美元的管理= =1)嗎?”=“檢查”檢查:”;
回聲“< tr > < td >”。美元的用戶名。' < / td > < td > < input type = "複選框" name = value =“管理[]”。$ id。“””。美元的檢查。' / > < / td > < / tr > '。“\ n”;

內部循環,我們首先計算出如果複選框應該自責。 也就是說,如果用戶目前擁有管理員權限。 三元操作符的使用使這短暫而甜蜜的。 我們爲每個用戶然後回聲一行。

請注意,我們的名字複選框管理[]。 這意味着$ _POST['管理']是一個數組。 數組中所有標記框的事實。 還請注意,我們將值設置爲用戶的id。

<tr> <道明colspan=“2”> <輸入類型=“提交”的名字=“提交”價值=“更新權限”/ > < /道明> < /tr>< /表>< /形式>< /身體>< /html>

最後,我們做一個提交按鈕,完成我們的html。 我不知道你,但是我發現表單沒有提交按鈕有點不滿意。

接下來,我們將看看處理。

處理表單

包括(“connect.php”);
美元更新=假;

首先,我們有一個文件的連接我們數據庫。 我會給你文件,但是我個人更願意保持對自己的用戶名和密碼。 我們還創建一個變量,說我們還沒有更新數據庫…。

如果(數($ _POST)>0){
美元的管理=$ _POST[“管理”];
到(“intval中”,美元的管理);

我們的if語句將確保這段代碼只運行如果表單被提交。 我們創建一個局部變量$ _POST數組。 然後我們做一些驗證。 我們不希望任何討厭的用戶修改這些值的形式做一些SQL注入,我們確保這個數組中的每個值都是一個整數到函數。 再一次看到手冊頁如果你不太確定這個函數是如何工作的。

“如果我沒有整數作爲我的價值觀?” 好問題。 您可能想使用mysql_real_escape_string(),如下所示:

到(“mysql_real_escape_string”,美元的管理);

或者你可以編寫自己的函數來確保值是你期望的東西。

美元的管理=內爆(”、“,美元的管理);

接下來,我們使用內爆()函數將數組變成字符串。 我們用逗號來分隔每一個值。 這將允許我們使用條款。 如果你的價值觀不是整數,你必須做些不同的事情。 我將在一分鐘內。

mysql_query(“更新用戶組管理= 0”)或trigger_error(mysql_error(),E_USER_ERROR);
mysql_query(“更新用戶組管理(管理美元)= 1,id”)或trigger_error(mysql_error(),E_USER_ERROR);
美元更新=真正的;

之前我們更新新用戶有管理員權限,我們第一次更新數據庫,所以沒有人。 爲什麼? 好吧,我們用逗號分隔的列表只包含那些我們想要管理的權利。 所以我們最好確保沒有人呢。 我們的第二個查詢使用的條款,它允許我們提供一個逗號分隔的值列表,id。

注意:更新每一行的替代品0是使用條款。

使用字符串

如果你的值是字符串,你需要更小心你的內爆和查詢。 別忘了,所有在您的SQL字符串必須在報價。 這是一個非常簡單的調整,但是它會給你一個錯誤如果你忘記。 讓你的內爆看起來像這樣:

美元的管理=內爆(“”、“”,美元的管理);

和你的查詢如下:

mysql_query(“更新用戶組管理= 1,id(“管理美元”)”)或trigger_error(mysql_error(),E_USER_ERROR);

注意額外的引用,我們我們的價值觀解體後,他們可能看起來有點像這個:

1”、“2”、“3”、“4

所以我們需要將引用添加到正面和背面。

那就是了。 現在我們有時間一個簡短的總結


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章