選擇了電商這個行業,我們目前 最近天貓淘寶排名不斷的改變規則,但是最終萬變不離其宗。為了更簡單讓大家了解,我們可以想像成一場過關遊戲。 資料來源 關於排名的有:點擊率,跳出率,轉化率,綜合評分(描述情況,發貨速度,客服服務……)因素很大。這些名詞大家都懂吧?不懂的可以百度。 1、第一關,檢測點擊率如何。 檢測原理:新品上架:假設隨機顯示100次展示。所謂100次展示機會並不是隨便給您帶來流量的,而是判斷你商品指標如何,點擊率如何。如果點擊率不錯,例如100次展現量裡面有10次點擊,說明該商品標題和圖片合理化比較高,點擊率不錯,會給予繼續增多展現量的機會,反之展現量過低則給與原封不動或者給與降低排名處理。 (如果第一次做的不好,請不要灰心,繼續努力,還有每次快到下架是給予高排名的展現機會,以後每週循環一個機會,一定要把握好機會做好) 2、第一關過了,那麼第二關就開始繼續檢驗了,檢測您的產品描述,客戶體驗如何。 首先說明一下,淘寶不全是人工,不可能一個一個的去產品詳情頁看,他會利用程序的算法來認定你的產品描述質量如何,方法是通過客戶停留時間和跳出率。如果大部分客戶進來後,假設停留時間超過10分鐘,那麼肯定這個產品頁面描述的很好啦,淘寶會給於加分,有利於增加排名,如果看了沒幾秒鐘就跳出去了,那麼你的產品描述很危險了,淘寶會給於減分或者降低排名或者排名不動。 3、第二關過來了。那麼進行第三關,看轉化率如何。 轉化至關重要,可以體現出產品信任度問題,一般轉化率高的產品頁面,說明客戶信任度高,產品描述比較靠譜,才會購買。反之,一個轉化率低的商品,很多人看了,都沒有購買,淘寶會讓這樣的產品擁有其他人一樣的排名嗎?淘寶也不願意浪費他的流量。當然轉化率太過於高,也就是高於同行評價水平,可能進入人工審核系統,如果檢測出刷單嫌疑可能降權。 4、最終檢測產品質量如何?服務如何?好評率如何? 同樣第二關說明了,淘寶不是人工,他只會通過程序機制來檢測產品實例情況,只有過度才會步入人工審核機制。具體產品質量和服務,可以通過好評率,動態服務,發貨速度,服務態度等等做參考。綜合評分值過於低,就會給與降低排名和權重,這個大家都知道。如果綜合評分控制在合理狀態,將會良性循環,不斷有很好的排名和展現量。 提示:如果過度將仍然會被淘寶系統錄入監控系統裡等待人工監控,如果有嚴重作弊嫌疑很容易就會被查出(同理上面)。往往大家玩的流程上來就是刷單,而不是優化前幾步,所以部分用戶刷單沒有效果,沒有排名。更有甚至導致被降權,被封店。 那麼四大關都通過後,您將會獲得良好的排名,並且很穩定。您的店鋪將來會生意越來越棒。 還有一個原理:假設第一關可以獲取100個隨機展示量,那麼第一關通過了會獲得500個隨機展現量,如果再過一關還會繼續增加數值,最終過完所有關才會穩定排名,擁有固定展現量。就想像成一場考試,最終那到多少考分。 很多人喜歡作弊,跟程序玩作弊,我覺得人腦完全不夠,除非特殊厲害的人可以掌握。 記住各種數值標準要保持一個合理的度,才會有好的排名,如果過低則降低排名或者沒有排名。如果分值過高,會被系統錄入人工檢查機制,如果刷單就要注意了一定要控制好。 所謂的收藏,人氣,也可以作為排名優化的指標,但是這些並不是重點,因為這些數值可以人為偽造。所以淘寶肯定不會作為重點參考依據。 其實大部分人將排名優化認為刷單就可以提高排名,其實並不一定是。刷單只是其中一個小流程,是為了增加客戶體驗度,充實一下頁面而已,我認為刷單能夠破零就很不錯了。如果大量刷單,只是提高數據,而沒有其他各方面分值提高,也是白搭,反而增加了危險性。這也同時說明為什麼很多報活動的仍然排名不高的原因了。 其實真正排名和銷量關係並不是很大。銷量高,只是可以提高轉化率和客戶體驗方面而已。 具體如何能夠提高排名? 簡單的就是說提高四率,就是想辦法提高點擊率,跳出率,轉化率,好評率。我認為好評率一定是最後一步完成的,也是至關重要的,但是大家千萬不能顛倒順序,否則,排名很難維持住。 1、首先如何提高點擊率? 控制好點擊率的方案主要有:標題優化合理,圖片具有吸引力。我們在編輯標題的時候,不要因為優化關鍵詞而拼湊標題,這樣的標題往往是曝光度上來了,展現量有了,但是點擊率卻不一定高,這樣也不太好吧?我們在優化標題的時候一定要考慮合理性,人性化點。千萬不要為了優化標題而優化,一個標題含有過度的不同類關鍵詞,可能還會稀釋權重的。所以我們要寫一個人家能夠看懂的標題,多加一些修飾詞,裝飾詞,確實可以提高很大點擊率。同時圖片也要做的合理一些,多關注排名好的圖片。我們可以測試幾個圖片,哪幾個點擊率更高,我們就做那種。這是優化排名的第一步哦,一定要做好。 忘了告訴大家一點,真正優化好一個標題,壓根也不需要開關鍵詞競爭度。 2、頁面停留時間如何控制和跳出率? (這個描述說的很靠譜,給人看了很真實) 這個我覺得最好控制,這個跟美工設計有很大的關係,一個好的商品描述,肯定會留出用戶瀏覽很長時間。 所以盡量要描述更吸引人一下,切記不要一上來就搞一些長篇大論,很多用戶都沒有耐心看的,畢竟這是購物,不是看文章。我們可以整理一下具有吸引力的文章,大文字。或者把客戶最想要看到內容給放到最明顯的地方。 例如一個客戶搜索“大碼女裝”,客戶肯定是需要大碼衣服的,最好的方案就是第一句話就是說,我們是專業做大碼號女裝的,專門為胖女生做的衣服大號,淘寶銷量第一個的。首選當他看到這些,感覺找對了,他會繼續關注下去。 當然控制頁面停留因素也和很多固有因素有關,例如銷量,客戶評價,成交記錄等等。這些我相信大部分買家都懂吧?可以適當充實頁面。 還有跳出率我也好好強調一下啊。 頁面停留時間和跳出率關係很密切,但有時分開的。一般來說頁面停留時間越長,跳出率越低。但也有其他情況。 例如,當大部分客戶進來的時候,看了很長時間產品介紹,開始覺得挺靠譜的,後來看完後,覺得不夠靠譜,就離開了。這說明營銷文案沒有做好,導致跳出率過高,這也會直接影響排名和權重的。 跳出率越低,說明您的產品描述越好,越靠譜一些。例如,大部分客戶進來的時候,覺得產品還挺靠譜的,他會繼續瀏覽這家其他產品,所以跳出率高的產品,一定不會加分的。排名機會就小。 3、如何提高轉化率? 我相信大家對於提升轉化率最擅長不過了,但是仍然一定注意不要過度,很容易被淘寶系統監控的。 我這裡推薦大家的玩法就是通過正規方式提高轉化率,大家都懂的就是將頁面描述和美工方面提高,自然轉化率大大提高了,影響轉化率主要原因有商品描述,銷量,客戶評價,營銷文案。這些基礎的東西一定要做好,才能奠定以後的優化基礎。 其他提升轉化率玩法有報官方活動,促銷活動,淘寶u站等等,可以提高轉化率。我比較喜歡官方活動,因為相對靠譜一些,淘寶前一段時間對於站外低質量流量打擊也是挺厲害的,希望淘寶將這款改善,也是對中下賣家的一大扶持啊。 4、如何提高好評率? 我覺得最重要的部分就是取決於產品和客服服務。 首選產品質量要好(這個我不用太強調了,產品是主線,沒有好的產品是做不長久的,大家都懂),產品屬性匹配度沒有問題,盡量要和描述相符。 刷單不是長久之計,只能解決燃眉之急。卻不能長久維持。如果因為產品描述不相符,給與差評,這個靠刷單解決,永遠都是惡性循環。 如果客戶服務態度良好,產品描述相符度良好,物流發貨速度良好,足以解決最終考核大關。 刷單取決於一個範圍度最好,如果過度,很容易被系統步入人工審核機制,如果被檢測出有刷單的證據,將會被嚴重降權。這個一定要注意。 |
2015年5月6日 星期三
[分享] 天貓淘寶搜索排名的真正規則和技巧
[教學] 如何利用PHP製作並匯出PDF報表
首先可以到FPDF網站下載程式,當然FPDF的網站有教學也值得前往觀看http://www.fpdf.org/
或直接點選這邊下載fpdf16.zip
因為FPDF的網站是英文的,因此若要使用中文字,
則需要再下載chinese-unicode.rar
好啦,將上面的檔案下載之後解壓縮放入網站的資料夾就可以開始囉
test.php
- $hostname = "localhost"; //主機名稱
- $database = "test"; //資料庫名稱
- $username = "xxxx"; //資料庫使用者帳號
- $password = "****"; //資料庫使用者密碼
- $test = mysql_pconnect($hostname, $username, $password) or trigger_error(mysql_error(),E_USER_ERROR);
- mysql_select_db("test",$test);
- mysql_query("set names 'utf8'");
- ?>
reportSQL.php
- mysql_select_db($database, $test);
- //index(首頁)
- $query_index = "SELECT * FROM `flow` WHERE date = CURDATE( ) AND page = 'index'";
- $index = mysql_query($query_index, $test) or die(mysql_error());
- $totalRows_index = mysql_num_rows($index);
- $query_index2 = "SELECT * FROM `flow` WHERE page = 'index'";
- $index2 = mysql_query($query_index2, $test) or die(mysql_error());
- $totalRows_index2 = mysql_num_rows($index2);
- //introduce(品牌介紹)
- $query_introduce = "SELECT * FROM `flow` WHERE date = CURDATE( ) AND page = 'introduce'";
- $introduce = mysql_query($query_introduce, $test) or die(mysql_error());
- $totalRows_introduce = mysql_num_rows($introduce);
- $query_introduce2 = "SELECT * FROM `flow` WHERE page = 'introduce'";
- $introduce2 = mysql_query($query_introduce2, $test) or die(mysql_error());
- $totalRows_introduce2 = mysql_num_rows($introduce2);
- //......................(其餘頁面寫法同上)
- ?>
report.php
- require('chinese-unicode.php'); //匯入剛剛下載的中文化的FPDF
- require_once('../Connections/test.php'); //匯入連結資料庫的語法
- require_once('../require/reportSQL.php'); //匯入報表的SQL語法
- $pdf=new PDF_Unicode(); //建立PDF_Unicode
- $pdf->Open(); //開啟
- $pdf->AddPage(); //新的一頁
- $pdf->AddUniCNShwFont('uni'); //加入中文
- $pdf->SetFont('uni','',16); //設定字型與字體大小
- //接著將資料放入一維陣列中
- $row0=array('瀏覽頁面','今日人數流量(人)','總人數流量(人)');
- $row1=array('首頁',$totalRows_index,$totalRows_index2);
- $row2=array('品牌介紹',$totalRows_introduce,$totalRows_introduce2);
- $row3=array('經營理念',$totalRows_manage,$totalRows_manage2);
- $row4=array('代理品牌',$totalRows_agent,$totalRows_agent2);
- $row5=array('產品',$totalRows_product,$totalRows_product2);
- $row6=array('公告發佈',$totalRows_publish,$totalRows_publish2);
- $row7=array('活動新訊',$totalRows_activities,$totalRows_activities2);
- $row8=array('素材介紹',$totalRows_material,$totalRows_material2);
- $row9=array('營業據點',$totalRows_place,$totalRows_place2);
- $row10=array('聯絡我們',$totalRows_contact,$totalRows_contact2);
- //今日人數流量統計
- $today=$totalRows_index+$totalRows_introduce+$totalRows_manage+$totalRows_agent+$totalRows_product+$totalRows_publish+$totalRows_activities+$totalRows_material+$totalRows_place+$totalRows_contact;
- $total=$totalRows_index2+$totalRows_introduce2+$totalRows_manage2+$totalRows_agent2+$totalRows_product2+$totalRows_publish2+$totalRows_activities2+$totalRows_material2+$totalRows_place2+$totalRows_contact2;
- $row11=array('統計',$today,$total);
- //再將資料放入2維陣列中
- $trow=array($row0,$row1,$row2,$row3,$row4,$row5,$row6,$row7,$row8,$row9,$row10,$row11);
- //設定表格的寬度
- $w=array(60,65,60);
- //迴圈
- for($j=0;$j
- for($i=0;$i
- $pdf->Cell($w[$i],7,$trow[$j][$i],1,0,'C'); //將資料放入表格內
- } $pdf->Ln(); //下一列
- }
- $pdf->Output(); //輸出呈現
- ?>
接下來從瀏覽器觀看的結果如下圖:
真的是一個超方便的工具喔 ^ ^~~
Cell(float w [, float h [, string txt [, mixed border [, int ln [, string align [, boolean fill [, mixed link]]]]]]])
w
Cell width. If 0, the cell extends up to the right margin.
h
Cell height. Default value: 0.
txt
String to print. Default value: empty string.
border
Indicates if borders must be drawn around the cell. The value can be either a number:
0: no border
1: frame
or a string containing some or all of the following characters (in any order):
L: left
T: top
R: right
B: bottom
Default value: 0.
ln
Indicates where the current position should go after the call. Possible values are:
0: to the right
1: to the beginning of the next line
2: below
Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value: 0.
align
Allows to center or align the text. Possible values are:
L or empty string: left align (default value)
C: center
R: right align
fill
Indicates if the cell background must be painted (true) or transparent (false). Default value: false.
link
URL or identifier returned by AddLink().
Example
- // Set font
- $pdf->SetFont('Arial','B',16);
- // Move to 8 cm to the right
- $pdf->Cell(80);
- // Centered text in a framed 20*10 mm cell and line break
- $pdf->Cell(20,10,'Title',1,1,'C');
[教學] PHP如何做到多筆資料的同步
一次叫出多筆資料,然後在同一個網頁中「逐一」「分別」做不同的處理,最後「同時」對資料庫 update or insert 。每一筆資料所收到的update 、insert數據並不相同! ============================
處理要點在於 _____ loop + array
1.從資料庫叫出資料:
db_query進行looping的同時,把相關欄位需要update的資料通通納入array.
依照各人需求,這些資料可以用text、checkbox、或者hidden等各種型態呈現。當然,checkbox是最常見的type.
例如,郵件處理網頁就大量使用checkbox.
2.修改後的資料回存作業
要點在count(array) + loop + db_update:
根據count的結果進行迴旋,把db_update放進去,讓loop去完成所有資料的update回存作業。
範例如下:
================================================
####1.update.php: 以loop+array取出資料以便update........
";
echo "";
$i++;
endwhile;
複製代碼======================================================
####2.activate.php:資料更新後,透過loop+array完成回存...................
複製代碼
原文出處:http://www.jb51.net/article/1939.htm
處理要點在於 _____ loop + array
1.從資料庫叫出資料:
db_query進行looping的同時,把相關欄位需要update的資料通通納入array.
依照各人需求,這些資料可以用text、checkbox、或者hidden等各種型態呈現。當然,checkbox是最常見的type.
例如,郵件處理網頁就大量使用checkbox.
2.修改後的資料回存作業
要點在count(array) + loop + db_update:
根據count的結果進行迴旋,把db_update放進去,讓loop去完成所有資料的update回存作業。
範例如下:
================================================
####1.update.php: 以loop+array取出資料以便update........
- #在這裡呼叫資料庫
- $query="select * from $userstable where...................
- #進入loop逐一取出資料
- $i=0;
- while ($i < $num):
- ...............
- $id=mysql_result($result,$i,"id");
- ..................
- ............................
- #以適當的type取出必須更新的欄位,構成array ..........
- echo "
- echo "
####2.activate.php:資料更新後,透過loop+array完成回存...................
- .......
- for ($i = 0; $i < count($Cname); $i++) {
- $name = $Cname[$i];
- $id= $Cid[$i];
- $query = "update $userstable set name='$name' where id='$id'";
原文出處:http://www.jb51.net/article/1939.htm
【教學】 PHP多個核取方塊如何放到同一個欄位
資料來源 飛肯設計學苑
緣 起:
先說廢話,我在織夢線上發現有很多大大都在問說如何利用多個核取方塊放到同一個欄位,老實說我對這功能並不感興趣,因為我覺得這樣做並不實用,所以我原本是不打算寫教學的,直到前幾天有位織夢線上的大大寫封MAIL給我,信的內容是他現在在做學校的畢業專題,遇到了多個核取方塊如何放到同一個欄位的問題,希望我能指導他,信的內容不但把他所遇到的問題寫的很詳細,且有提出他的想法(也就是他想到的結決方法)且有抓圖說明,讓我覺得他是真的有心想學習,而非只是為了要交作業而已,所以我才決定寫這一篇"多個核取方塊如何放到同一個欄位教學",希望能對有需要的大大有所幫助,好了,不廢話進入主題了。
第1步:新增一個"delfile"資料庫。
第2步:新增一個"checkbox"資料表。
第3步:新增"id"及"checkbox"二個欄位,id為主鍵、型態為int、自動編號;checkbox為記錄興趣欄位,型態為varchar、長度為200。
第4步:新增一張表單。
第6步:核取的值輸入若使用者選取該核取方塊時,所要寫入資料庫的值。
第7步:選取form標籤。
第8步:伺服器行為 ---> 插入記錄。
第10步:插入後,請前往的部份選ok.php。
第11步:把index.php切換至'程式碼'編輯模式。
第13步:在剛剛那一段下方新增下列的程式碼。
我解釋一下這一段的意思好了,foreach()是PHP用來處理陣列的特有迴圈,詳細的用法我在我上一篇的[一次刪除複數檔案]的教學中解釋過了,在此不再贅述,有興趣的大大請自行參閱該教學。
在這一段最重要的在這一句'$box2 .= $box; ',一般PHP的要指派值給變數都是用=(等於)不過在此卻是用.=(在等於之前多一個點),在PHP中=是用來指派變數值,但同一個變數若指派給二種不同的值,新值會覆蓋舊值,用echo輸出時只會輸出新值,不會輸出舊值,在PHP中.=是用累加的方法來指派值,所以新值與舊值都會存在,因為我們須將所有陣列的值合併成同一個值,以能插入同一個欄位,所以要用.=來作。
第14步:把
改成
我解釋一下這一段的意思好了,我們要插入checkbox欄位的值,已經變成$box2了,而不是$_POST['checkbox']所以要改成我上述的樣子。
第15步:簡單吧!只改4行字就完成了,我們來測試看看!
第16步:嗯!果然成功了。
第17步:去資料庫看看,剛剛 選取的資料有無插入資料庫中,果然成功寫入資料庫,YA!成功。
第18步:在ok.php的頁面新增一個資料集,把剛剛輸入的資料庫資料取出,以確定我們真的成功了。
其實這個步驟可以不用作,我會這樣做的原因是要讓各位大大知道,如果用剛剛的方法去作,所有的輸出資料都會擠在一起,不但不美觀且不實用(因為無關鍵字,所以無法把字串拆成陣列),那要怎麼辦呢?請繼續往下看。
第19步:找到我們剛剛改的那段程式。
把它改成
這樣就可以了。我解釋一下程式碼的意思好了,我們改用for迴全圈來跑陣列(for迴圈用法請自行參閱相關資料,不在此解釋之),並在迴圈內新增3個判斷式,為什麼要新增3個判斷式呢?且聽我道來。
第一個判斷式:if(count($_POST['checkbox'])==1) ,先說count這個函式好了,它是一個統計函式,用以統計陣列中有幾筆資料,再來說說判斷式的內容,這個判斷式為真的條件是,當陣列的資料只有一筆時,不用多作處理,直接去執行$box2=$_POST['checkbox'][$i];這一段,也就是把表單變數指派給變數$box2,好讓dw把$box2的值插入checkbox欄位,也就是直接去執行步驟14,而不需要使用第三個判斷式內的方法處理。
第二個判斷式:elseif($i == (count($_POST['checkbox'])-1)) {,當第一個判斷式不成立,就會去比對第二個判斷式是否成立,而這個判斷式為真的條件是當 $i 的值等於$_POST['checkbox']陣列的資料總筆數減1的值時,就會去執行$box2.=$_POST['checkbox'][$i];,先說一下為什麼要用$_POST['checkbox']陣列的資料總筆數減1的值去和 $i 比對,因為 $i 的值代表的是陣列的索引鍵值,因為陣列若不指定索引鍵的值會自動從'0'開始,而統計函數統計出來的值卻是從'1'開始,2者差1,所以當 $i 的值等於$_POST['checkbox']陣列的資料總筆數減1的值時,表示是陣列的最後一筆資料了,直接累加資料就可以,不需使用第三個判斷式內的方法處理。
第三個判斷式:elseif($i < count($_POST['checkbox'])) {,當第一及第二個判斷式不成立,就會去比對第三個判斷式是否成立,而這個判斷式為真的條件當 $i 的值小於$_POST['checkbox']陣列的資料總筆數時(也就是不是陣列最後一資料時),去執行
$box2.=$_POST['checkbox'][$i];
$box2.='、';
這二行的意思就是說,變數$box2的值為累加的$_POST['checkbox'][$i]陣列值,因為我們是用迴圈處理陣列,所以在迴圈重覆之前我們把變數$box2的值再累加一個 '、' 的值上去,然後再去重覆迴圈,而當第一及第二個判斷式成立時不會累加 '、' 這個值上去,這麼做有什麼用處呢?繼續看下去你就知道了。
第20步:新增一筆資料。
第21步:把步驟17的資料集所輸出的資料改用重覆區域輸出,看看二者有什麼不同。
第22步:開啟ok.php的頁面並切換到程式碼編輯。
第23步:找到。
第24步:把修改如下:
我解釋一下這一段的意思好了, split()函式是用來分割字串的,而 '、' 就是要分割的條件,$row_Recordset1['checkbox']就是要被分割的字串,分格完後會自動以陣列方式儲存並指派給變數$check,然後用foreach迴圈輸出值,這一段其實可以不用作,我會這樣作的原因主要是要讓各位大大知道沒有 '、' (第一種方法)與有 '、' (第二種方法)差別在那?因為第一種方法沒 '、' 當分割關鍵值,所以無法分割字串,我們來看看成果吧!
第25步:囉!這就是結果。
PS:其實我也不贊成這種作法,因為將來要updata會很麻煩,且就如gordon大大在篇討論中的說明[url]http://www.dreamweaver.com.tw/forumD...p?main_id=5374[/url],這不符合正規化原則,其實我覺得用gordon大大說的那個方法會比較好一點。
緣 起:
先說廢話,我在織夢線上發現有很多大大都在問說如何利用多個核取方塊放到同一個欄位,老實說我對這功能並不感興趣,因為我覺得這樣做並不實用,所以我原本是不打算寫教學的,直到前幾天有位織夢線上的大大寫封MAIL給我,信的內容是他現在在做學校的畢業專題,遇到了多個核取方塊如何放到同一個欄位的問題,希望我能指導他,信的內容不但把他所遇到的問題寫的很詳細,且有提出他的想法(也就是他想到的結決方法)且有抓圖說明,讓我覺得他是真的有心想學習,而非只是為了要交作業而已,所以我才決定寫這一篇"多個核取方塊如何放到同一個欄位教學",希望能對有需要的大大有所幫助,好了,不廢話進入主題了。
第1步:新增一個"delfile"資料庫。
第2步:新增一個"checkbox"資料表。
第3步:新增"id"及"checkbox"二個欄位,id為主鍵、型態為int、自動編號;checkbox為記錄興趣欄位,型態為varchar、長度為200。
第4步:新增一張表單。
第5步:新增八個核取方塊如下圖,核取方塊名稱用checkbox[](八個核取方塊名稱都要用用checkbox[]),表示我們要用陣列處理。
第6步:核取的值輸入若使用者選取該核取方塊時,所要寫入資料庫的值。
第7步:選取form標籤。
第8步:伺服器行為 ---> 插入記錄。
第9步:把checkbox欄和隨便一個FORM.checkbox[]配對,並把送出為改為'文字'(一定要記得改喔!)。
第10步:插入後,請前往的部份選ok.php。
第11步:把index.php切換至'程式碼'編輯模式。
第12步:找到這一段 if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {。
第13步:在剛剛那一段下方新增下列的程式碼。
foreach($_POST['checkbox'] as $box) {
$box2 .= $box;
}
我解釋一下這一段的意思好了,foreach()是PHP用來處理陣列的特有迴圈,詳細的用法我在我上一篇的[一次刪除複數檔案]的教學中解釋過了,在此不再贅述,有興趣的大大請自行參閱該教學。
在這一段最重要的在這一句'$box2 .= $box; ',一般PHP的要指派值給變數都是用=(等於)不過在此卻是用.=(在等於之前多一個點),在PHP中=是用來指派變數值,但同一個變數若指派給二種不同的值,新值會覆蓋舊值,用echo輸出時只會輸出新值,不會輸出舊值,在PHP中.=是用累加的方法來指派值,所以新值與舊值都會存在,因為我們須將所有陣列的值合併成同一個值,以能插入同一個欄位,所以要用.=來作。
第14步:把
$insertSQL = sprintf("INSERT INTO checkbox (checkbox) VALUES (%s)",
GetSQLValueString($_POST['checkbox[]'], "text"));
改成
$insertSQL = sprintf("INSERT INTO checkbox (checkbox) VALUES (%s)",
GetSQLValueString($box2, "text"));
我解釋一下這一段的意思好了,我們要插入checkbox欄位的值,已經變成$box2了,而不是$_POST['checkbox']所以要改成我上述的樣子。
第15步:簡單吧!只改4行字就完成了,我們來測試看看!
第16步:嗯!果然成功了。
第17步:去資料庫看看,剛剛 選取的資料有無插入資料庫中,果然成功寫入資料庫,YA!成功。
第18步:在ok.php的頁面新增一個資料集,把剛剛輸入的資料庫資料取出,以確定我們真的成功了。
其實這個步驟可以不用作,我會這樣做的原因是要讓各位大大知道,如果用剛剛的方法去作,所有的輸出資料都會擠在一起,不但不美觀且不實用(因為無關鍵字,所以無法把字串拆成陣列),那要怎麼辦呢?請繼續往下看。
第19步:找到我們剛剛改的那段程式。
foreach($_POST['checkbox'] as $box) { $box2 .= $box;}
把它改成
for($i=0;$i < count($_POST['checkbox']);$i++) {
if(count($_POST['checkbox'])==1) {
$box2=$_POST['checkbox'][$i];
}elseif($i == (count($_POST['checkbox'])-1)) {
$box2.=$_POST['checkbox'][$i];
}elseif($i < count($_POST['checkbox'])) {
$box2.=$_POST['checkbox'][$i];
$box2.='、';
}
這樣就可以了。我解釋一下程式碼的意思好了,我們改用for迴全圈來跑陣列(for迴圈用法請自行參閱相關資料,不在此解釋之),並在迴圈內新增3個判斷式,為什麼要新增3個判斷式呢?且聽我道來。
第一個判斷式:if(count($_POST['checkbox'])==1) ,先說count這個函式好了,它是一個統計函式,用以統計陣列中有幾筆資料,再來說說判斷式的內容,這個判斷式為真的條件是,當陣列的資料只有一筆時,不用多作處理,直接去執行$box2=$_POST['checkbox'][$i];這一段,也就是把表單變數指派給變數$box2,好讓dw把$box2的值插入checkbox欄位,也就是直接去執行步驟14,而不需要使用第三個判斷式內的方法處理。
第二個判斷式:elseif($i == (count($_POST['checkbox'])-1)) {,當第一個判斷式不成立,就會去比對第二個判斷式是否成立,而這個判斷式為真的條件是當 $i 的值等於$_POST['checkbox']陣列的資料總筆數減1的值時,就會去執行$box2.=$_POST['checkbox'][$i];,先說一下為什麼要用$_POST['checkbox']陣列的資料總筆數減1的值去和 $i 比對,因為 $i 的值代表的是陣列的索引鍵值,因為陣列若不指定索引鍵的值會自動從'0'開始,而統計函數統計出來的值卻是從'1'開始,2者差1,所以當 $i 的值等於$_POST['checkbox']陣列的資料總筆數減1的值時,表示是陣列的最後一筆資料了,直接累加資料就可以,不需使用第三個判斷式內的方法處理。
第三個判斷式:elseif($i < count($_POST['checkbox'])) {,當第一及第二個判斷式不成立,就會去比對第三個判斷式是否成立,而這個判斷式為真的條件當 $i 的值小於$_POST['checkbox']陣列的資料總筆數時(也就是不是陣列最後一資料時),去執行
$box2.=$_POST['checkbox'][$i];
$box2.='、';
這二行的意思就是說,變數$box2的值為累加的$_POST['checkbox'][$i]陣列值,因為我們是用迴圈處理陣列,所以在迴圈重覆之前我們把變數$box2的值再累加一個 '、' 的值上去,然後再去重覆迴圈,而當第一及第二個判斷式成立時不會累加 '、' 這個值上去,這麼做有什麼用處呢?繼續看下去你就知道了。
第20步:新增一筆資料。
第21步:把步驟17的資料集所輸出的資料改用重覆區域輸出,看看二者有什麼不同。
第22步:開啟ok.php的頁面並切換到程式碼編輯。
第23步:找到。
第24步:把修改如下:
$check = split('、',$row_Recordset1['checkbox']);
foreach($check as $check2) {
echo $check2;
echo '
';
}
我解釋一下這一段的意思好了, split()函式是用來分割字串的,而 '、' 就是要分割的條件,$row_Recordset1['checkbox']就是要被分割的字串,分格完後會自動以陣列方式儲存並指派給變數$check,然後用foreach迴圈輸出值,這一段其實可以不用作,我會這樣作的原因主要是要讓各位大大知道沒有 '、' (第一種方法)與有 '、' (第二種方法)差別在那?因為第一種方法沒 '、' 當分割關鍵值,所以無法分割字串,我們來看看成果吧!
第25步:囉!這就是結果。
PS:其實我也不贊成這種作法,因為將來要updata會很麻煩,且就如gordon大大在篇討論中的說明[url]http://www.dreamweaver.com.tw/forumD...p?main_id=5374[/url],這不符合正規化原則,其實我覺得用gordon大大說的那個方法會比較好一點。
2015年5月1日 星期五
2015年4月29日 星期三
網頁(UTF-8) 於 瀏覽器 出現亂碼解法
一般來說,我是使用第一種解法,但是很不幸的在手機上卻還是產生亂碼
於是乎
再使用第一種方法外,在PHP網頁的第一行在加上方法二的處理
果然就排除的中文亂碼的問題
正確解法有下面幾種:
- 於 HTML head 指定此頁編碼為 UTF-8
- PHP 送 Header 告訴瀏覽器這頁是 UTF-8 編碼header("Content-Type:text/html; charset=utf-8");
?> - 設定 Apache 送出頁面預設語系 UTF-8 (比較不建議用此方法)addDefaultCharset UTF-8# 不過建議這行要包在 Directory 或 VirtualHost 內, 才不會影響到其它網頁.
addDefaultCharset UTF-8
addDefaultCharset UTF-8
2015年4月27日 星期一
訂閱:
文章 (Atom)