台灣最大程式設計社群網站
線上人數
893
 
會員總數:244870
討論主題:188880
歡迎您免費加入會員
討論區列表 >> PHP >> SELECT 主題分類
[]  
[我要回覆]
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
SELECT 主題分類
價值 : 200 QP  點閱數:1251 回應數:19

樓主

風暴兵
門外漢
0 2
86 10
發送站內信

各位好

[code]
function list_goods($keyword = "")
{
global $mysqli, $smarty;
include_once "class/PageBar.php";
$search = !empty($keyword) ? "where `goods_title` like '%{$keyword}%' or `goods_content` like '%{$keyword}%' or `goods_firm` like '%{$keyword}%' or `goods_theme` like '%{$keyword}%'" : "";
$sql = "SELECT * FROM `goods` $search ORDER BY `goods_firm` desc";
if ($_GET['samphone']!='') {
$samphone=$_GET['samphone'];
$sql = "SELECT * FROM `goods` WHERE `goods_firm`='GARMIN' AND `goods_theme`='穿戴'";
}
[/code]

我的問題

" $sql = "SELECT * FROM `goods` $search ORDER BY `goods_firm` desc"; "


這段我是寫來從資料庫撈資料出來 放到網頁上面

但是 網站 上面有 廠商A A系列 B系列 C系列
廠商B A系列 C系列 D系列

類似這樣的下拉是選單

我ㄧ開始是讓它全部呈現,但寫到後面開始要分類呈現,我就完全卡住了,我這個網站也是自己翻書慢慢摸

但是我找了很多資料實在找不到有關這方面的問題

於是我自己就加了這段
[code]
if ($_GET['samphone']!='') {
$samphone=$_GET['samphone'];
$sql = "SELECT * FROM `goods` WHERE `goods_firm`='GARMIN' AND `goods_theme`='穿戴'";
}
[/code]
我給它ㄧ個name 想說看能不能用 if 來執行這個動作 , 但是似乎都是失敗了

懇請各位幫忙


搜尋相關Tags的文章: [ SELECT ] ,
本篇文章發表於2016-12-19 16:30
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
不錯的參考

Daimom
捐贈 VP 給 Daimom 檢舉此回應
你的分類欄位是哪一個?
你如果要呈現分類的列表

另外,失敗指的是什麼?出現錯誤還是沒有資料??


p.s. 這邊程式標籤的用法不是[CODE]
本篇文章回覆於2016-12-20 10:20
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

風暴兵
檢舉此回應
就是我呈現商品的寫法




主要是這段 $sql = "SELECT * FROM `goods` $search ORDER BY `goods_firm` desc";
這段是拉出 所有商品到我所引入的網頁裡面
它的路徑 是 index.php
問題來了
我自己有作ㄧ個下拉選單
廠商A ---> A系列、B系列、C系列
廠商B ---> A系列、B系列、C系列

我想要說 廠商A -->A系列 (只跑出這些商品)
但我對網頁來說 還是ㄧ位初學者
我找了很多資料
依然是弄不出來
我自己測試了
這串



就出現了 Undefined index $samphone
就我知道 這段 是在只說 無法定義$samphone
但我是ㄧ位 初學者 我怎麼想 怎麼都用不出來
懇請各位 能教ㄧ下嗎
本篇文章回覆於2016-12-20 15:09
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
回應

Daimom
捐贈 VP 給 Daimom 檢舉此回應
你要先確認你的 $_GET['samphone'] 是否有值, 解法
另外,我沒看到你的sql裡面有$samphone?
本篇文章回覆於2016-12-20 15:35
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
作者回應

風暴兵
檢舉此回應
我用了很笨的方法
我複製了很多 index.php 出來修改了 sql = "SELECT * FROM `goods` WHERE `goods_firm`='SAMSUNG' AND `goods_theme`='手機'";
在一一分配位置給他們
這樣是可行但非常笨....

所以我嘗試去修改 用if 來試試看


這是我下拉選單的程式碼

這串是我拿來測試的
<li><a href="index_all.php?samphone" name="samphone" action="index_all.php" method="get"><font color="rgb(0, 0, 0)">手機系列</font></a>



這串是我的php


執行上來說是ok
不會跑出說 找不到定義
但是 出來什麼事也沒有發生....
本篇文章回覆於2016-12-20 17:30
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
作者回應

風暴兵
檢舉此回應
它完全沒有照我的想法去執行
...
是我哪邊沒有設定好嗎..

懇請各位指教..
本篇文章回覆於2016-12-20 18:09
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
最有價值解答

迷路
捐贈 VP 給 迷路 檢舉此回應
第一個問題,a標籤中是沒有method欄位可以用的
第二個問題,超連結中欄位沒有給值,正確的寫法應為
index_all.php?samphone=SAMSUNG
這樣$_GET["samphone"]才會等於SAMSUNG
第三個問題,既然是將欄位串在網址上,取值就要用$_GET
在第八行的條件式中是用$_GET沒錯,但是到第九行怎麼就突然變成$_POST??
第四個問題,請將$samphone這個變數加入第十行的SQL式中

從上面的問題來看,我建議樓主還是先將基礎學一下
表單傳遞、SQL、條件式等等
本篇文章回覆於2016-12-21 10:07
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
作者回應

風暴兵
檢舉此回應
感謝回答

我是拿書自己學著作網站的

很多還是不董

感謝指教

我會繼續努力
本篇文章回覆於2016-12-21 11:45
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
作者回應

風暴兵
檢舉此回應
這是我後來的改法

網頁可以正常執行了

雖然很粗糙不過

讓我開心的是...至少少了很多複製的php



至於 我會加上 @ 是因為我測試過似乎沒有影響

所以我先暫時隱藏

這是我的主題分類 連結的原始碼


感謝幫忙我的 " 2 " 位

順到ㄧ問

這樣寫會不會以後要修改很麻煩或是很容易出問題?


本篇文章回覆於2016-12-23 11:10
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
9樓
回應

Daimom
捐贈 VP 給 Daimom 檢舉此回應
先想個問題,當你以後要新增資料的時候,打算怎麼新增?
會加多少行code?
本篇文章回覆於2016-12-23 11:37
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
10樓
回應

迷路
捐贈 VP 給 迷路 檢舉此回應
第一,我不建議新手用縮寫的方式來寫程式
if (@$_GET['samphone']) {
我會建議老實的寫
if (@$_GET['samphone'] == 1) {
確實,樓主的寫法可以正確運行
但那是因為在PHP中,默認非零的整數為true
第二,有無@都沒影響,那是因為@的意思是無視錯誤繼續執行
第三,就如Daimom大說的一樣,這樣之後新增分類會改到沒完沒了
你的搜尋條件就是兩個欄位`goods_firm`和`goods_theme`
直接在網址上給值就好了,例如:index_all.php?a=SAMSUNG&b=手機
然後

試試看吧

當然以上的寫法只是讓程式的執行
實務上我們通常不會這麼直白的使用
會有各種安全性上的考量
本篇文章回覆於2016-12-26 10:03
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
11樓
回應

可樂快跑
檢舉此回應
我看到後面改的code實在是眼花就不能不跳出來說幾句話了。

給原po的建議是:了解一下什麼叫做「重覆的程式碼提取」。
我這邊還沒有提到「函式提取」這件事。
你先看看你的code有多少重覆的string吧。(記住:大同小異基本上也算是重覆的一種)
你先練習一下對重覆程式碼的感受敏銳度吧!
如果你對重覆的code感到異常敏感時,恭喜你,你會知道怎麼樣寫出良好結構而又少的程式碼。

不然我還是說清楚一件事:程式碼越少雖然越好,但最短的程式碼並非最好的。

程式碼除了能夠經過提取重構而精簡之外。
最重要的一件事:他好不好維護,易不易擴充。

寫出來的程式碼如果很精簡卻無法維護及擴充,那比寫得多但容易維護的code還糟。
這件事也要記清楚。

另外還有二點我就順便說了:
1.除非你的global是基於物件導向必要的參考內容………請不要任意使用global全域變數。
因為一但在什麼地方改變了…你會難以查到問題。請乖乖的將變數以參數的方式傳入函式處理。
2.@ 沒事也別用。尤其不要使用在條件、迴圈之中。
@是能忽略錯誤,但最好的手段應該是不要讓你的程式產生錯誤。
如果你有不可預期的錯誤可能發生但你要處理他,請使用try…catch…
本篇文章回覆於2016-12-26 11:51
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
12樓
作者回應

風暴兵
檢舉此回應
" 回迷路 "
你好我是看到你所提給我的意見後去尋找可解決,後來我也改出來了,非常謝謝你給我的意見。
我完全是自己看書,我以前所學到的網頁課程完全都是單純html,因為其實我是繪畫美編方面的工作者,我對於php 和 sql 這種東西 其實我根本沒有碰過。
但由於工作的關西,所以我開始摸這塊陌生的地方,你說的縮寫,其實我根本不知道說他是否是縮寫,我只是翻書和找網路上的教法,自己去嘗試寫。
我自己也努力的讓自己更懂,所以我才會跑來這地方來詢問各種前輩的意見,或是說有推薦的書籍可以讓我參考。
我現在都是看 " 挑戰php7/MySQL 程式設計與超強專題特訓班 " 還有 實戰 PHP7 + MySQL

" 回快樂路跑 "
其實你ㄧ開始所說的,我自己在寫的時候就有發覺了,都是同樣code卻是這樣去呈現,但礙於基礎真的有夠爛..很多東西都還是看不懂,所以我只好先這樣放著。
我自己也有在思考說如何去把他們統合在一起,非常謝謝點出我的問題所在。
至於global 說實話的話其實我根本不瞭解他的用法,這段我是完全照著書上走的,這段我會在去了解他。

謝謝各位點出我的問題
本篇文章回覆於2016-12-26 12:35
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
13樓
回應

可樂快跑
檢舉此回應
@風暴兵
我能給你的建議只有一個,php的書不是歐萊禮出的幾乎全是廢物書。
互相抄了那麼多年都抄不出新意……

不過歐萊禮的書也有一個系列我不推,就是深入淺出系列。

我告訴你,雖然我不喜歡簡體字……但有時大陸人寫的書比台灣寫的還好上太多。

簡單來說,你真的想看想學php
要不就是找國外的譯本(歐萊禮專出這種的)
一種就是大陸人寫但是有幫你繁體中文化的。
最後就是簡體字的。

然後php的書台灣人寫的有參考價值的趨進於0……因為他們只會賣書,不會好好寫一本書。
本篇文章回覆於2016-12-26 13:53
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
14樓
回應

Daimom
捐贈 VP 給 Daimom 檢舉此回應
我會建議您,先把基本的語法弄清楚後。
再來想其他的東西。
因為這些東西,只要是程式語言都有。
array
if...else..
for...
函數

宣告(php該說有還是沒有這個我好難解釋,我是認為有)
本篇文章回覆於2016-12-27 16:49
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
15樓
作者回應

風暴兵
檢舉此回應

這是我後來的修改
完全簡化了
我把要呈現的商品把他 包起來統一給數值,根據收到的值來拉資料庫資料
本篇文章回覆於2017-02-02 12:11
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   

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