iT邦幫忙

0

php mysql 加上WHERE條件式卻無法正常顯示

我在$Submit==""的SQL"SELECT * FROM MenuData"能正常顯示出來
但把SQL加上WHERE之後"SELECT * FROM MenuData WHERE MD_Classification='$Submit' ORDER BY MD_index ASC"就無法正常顯示
在phpmyadmin 執行條件式的SQL也能正常顯示
找了很久不知道哪裡出了錯
/images/emoticon/emoticon02.gif

<div class="aaa"><h1>MENU</h1>
	 <form>
	 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
	 <input type="Submit" value="義大利麵" name="Submit" style='width:55px;height:25px;font-size:15px;'>
	 <input type="Submit" value="焗烤麵" name="Submit" style='width:55px;height:25px;font-size:15px;'>
	 <input type="Submit" value="焗烤飯" name="Submit" style='width:55px;height:25px;font-size:15px;'>
	 <input type="Submit" value="蛋包飯" name="Submit" style='width:55px;height:25px;font-size:15px;'>
	 <input type="Submit" value="燴飯" name="Submit" style='width:55px;height:25px;font-size:15px;'>
	 <input type="Submit" value="燉飯" name="Submit" style='width:55px;height:25px;font-size:15px;'><br><br>
	 </form></div>
<div class="qqq"><table border="0">
<tr><td align="right"><h2>單位:新台幣元</h2></td></tr>
</table></div>
<div id="test" class="aaa">
<?php
require_once("mysql_data.php");
mysql_query('set names `utf8`');
session_start();
$sql="SELECT * FROM ShopData WHERE SD_Account='".$_SESSION["SD_Account"]."'";
$record=mysql_query($sql);
$row=mysql_fetch_assoc($record);
$SD_Number=$row["SD_Number"];
//echo $SD_Number;
?>
<?php
	$Submit =!empty($_GET["Submit"]) ? $_GET["Submit"] : null;
	$db = 'CRM';
	mysql_connect('', '', '');
	mysql_select_db("CRM");
	mysql_query("SET CHARACTER SET utf8;");
if($Submit=="")
{
		echo '
				<table border="1" width="1000" align="center">
				<thead>
					<tr>
					<th>餐點編號</th>
					<th>餐點分類</th>
					<th>餐點名稱</th>
					<th>餐點成本</th>
					<th>餐點價格</th>
				</tr></thead>';
		$sql = "SELECT * FROM MenuData";
		$result = mysql_query($sql);
		$num = mysql_num_rows($result);
		for ( $i=1; $i<=$num; $i++ )
		{
			$row = mysql_fetch_row($result);
			$MD_index = $row[0];
			$MD_Classification = $row[2];
			$MD_MealName = $row[3];
			$MD_Cost= $row[4];
			$MD_Price = $row[5];
			echo "<tr>";
			echo "<td>$i</td>";
			echo "<td>$MD_Classification</td>";
			echo "<td>$MD_MealName</td>";
			echo "<td>$MD_Cost</td>";
			echo "<td>$MD_Price</td>";
		}
		echo   '</tr></table></div>';
}
else if($Submit!='')
{
		echo $Submit;
		echo '
				<table border="1" width="1000" align="center">
				<thead>
					<tr>
					<th>餐點編號</th>
					<th>餐點分類</th>
					<th>餐點名稱</th>
					<th>餐點成本</th>
					<th>餐點價格</th>
				</tr></thead>';
		$sql = "SELECT * FROM MenuData WHERE MD_Classification='$Submit' ORDER BY MD_index ASC";
		$result = mysql_query($sql) or die('SQL執行錯誤');
		$num = mysql_num_rows($result);
		for ( $i=1; $i<=$num; $i++ )
		{
			$row = mysql_fetch_row($result);
			$MD_Classification = $row[2];
			$MD_MealName = $row[3];
			$MD_Cost= $row[4];
			$MD_Price = $row[5];
			echo "<tr>";
			echo "<td>$i</td>";
			echo "<td>$MD_Classification</td>";
			echo "<td>$MD_MealName</td>";
			echo "<td>$MD_Cost</td>";
			echo "<td>$MD_Price</td>";
		}
		echo   '</tr></table></div>';	
}
else
{
		echo '錯誤';
}
	mysql_close();
?>
看更多先前的討論...收起先前的討論...
Ks iT邦新手 4 級 ‧ 2019-06-04 15:52:16 檢舉
MD_Classification='$Submit'的'$Submit'是一個參數還是一個固定值?
有出現錯誤訊息?還是資料讀不出來而已
dragonH iT邦大師 1 級 ‧ 2019-06-04 15:55:23 檢舉
把你最後串完的 sql 印出來看長怎樣
scjh8214 iT邦新手 5 級 ‧ 2019-06-04 16:08:21 檢舉
$Submit'是一個參數
按下按鈕長SELECT * FROM MenuData WHERE MD_Classification='義大利麵' ORDER BY MD_index ASC
ccutmis iT邦高手 9 級 ‧ 2019-06-04 16:12:18 檢舉
你的發問跟文章內容會讓我想起一位問php貼一大串源碼的兄弟... =o=||||
ccutmis iT邦高手 9 級 ‧ 2019-06-04 16:18:41 檢舉
其實網友們沒有你完整的PHP源碼 也不知道你的MySQL長怎樣
用這種瞎子摸象式的問法 大概要通靈王才有辦法知道答案了

我的感覺是你先不要想這裡的PHP出什麼錯
你先進到MySQL管理介面(例如phpmyadmin)
然後在裡面下SQL指令
直到你得到你要的那段SQL字串"SELECT ... FROM... WHERE....."
這段在MySQL執行沒有問題,
那剩下的就是在PHP裡怎麼把中間塞進變數,understand?

要抓這類問題我建議您採用類似的流程去跑,
不要動不動就想找PHP麻煩^^"

很多時候是你的SQL語法本身問題。
MD_Classification <- 餐點分類
MD_MealName <- 餐點名稱
會不會用錯欄位來過濾啊...
dragonH iT邦大師 1 級 ‧ 2019-06-04 16:27:21 檢舉
先定位問題

如果認為是sql語句有問題的話

1. SELECT * FROM MenuData

2. SELECT * FROM MenuData WHERE MD_Classification='$Submit'

3. SELECT * FROM MenuData ORDER BY MD_index ASC

在 php 用 hardcode 一個一個試
scjh8214 iT邦新手 5 級 ‧ 2019-06-04 16:29:04 檢舉
痾...我有用在程式產生出來的語法再拿去資料庫執行SQL是可以正常執行的唷~
scjh8214 iT邦新手 5 級 ‧ 2019-06-04 16:30:47 檢舉
欄位我確定是沒錯的因為我是要用分類來過濾
scjh8214 iT邦新手 5 級 ‧ 2019-06-04 16:31:21 檢舉
在PHP執行 SELECT * FROM MenuData是可以的
但加上WHERE就無法了
dragonH iT邦大師 1 級 ‧ 2019-06-04 16:33:48 檢舉
SELECT * FROM MenuData ORDER BY MD_index ASC 也可以嗎?

如果也可以

set value 也沒問題的話

就把資料庫的 義大利麵改成英文

在執行搜尋

如果可以

那可能就像其他大大說的

編碼之類的問題吧

(又被禁言了:|
scjh8214 iT邦新手 5 級 ‧ 2019-06-04 16:35:50 檢舉
可以的
小魚 iT邦高手 1 級 ‧ 2019-06-04 22:24:21 檢舉
話說, 同樣的內容應該不用寫兩次吧,
把不同的部分放在if裡面就好了...
0
浩瀚星空
iT邦大師 1 級 ‧ 2019-06-04 16:00:55
最佳解答

其實你以下的寫法

$num = mysql_num_rows($result);
		for ( $i=1; $i<=$num; $i++ )
		{
           $row = mysql_fetch_row($result);

可以改成

while($row = mysql_fetch_row($result))
{

這樣就可以了,不需要再輸出數量處理。

回來正題:
無法得知你是出現了sql錯誤還是沒資料。
但至少從你的sql碼中查看。就算 $Submit 值是空的。
因該也不至於發生錯誤。

或許你該先直接輸出你的$sql後。再拿去phpmyadmin跑看看有沒有資料。
不要自已在phpmyadmin打。拿你程式生成的$sql貼過去。
有助查看問題。

看更多先前的回應...收起先前的回應...
scjh8214 iT邦新手 5 級 ‧ 2019-06-04 16:07:29 檢舉

程式生出來的複製到phpmyadmin可以正常可以正常執行顯示

我剛注意到你程式有

mysql_connect('', '', '');

為何還需要做一次連線??
你該不會是根本沒連好資料庫吧?

沒任何錯誤訊息嘛??

我剛在你的發文中發現你的條件是中文字。
那有可能性是編碼的問題。

檢查的方式很簡單,你先故意輸入只有英文字的值到資料表上。
然後用程式跑那段英文字看是否可以正常。

如果是的話,你要注意的就只有一件事。
那就是你的程式檔案(也就是你的php文件檔)的編碼是否也是utf8的編碼。

scjh8214 iT邦新手 5 級 ‧ 2019-06-04 16:35:20 檢舉

好像是中文字的原因
但我重新儲存了一次PHP檔用UTF8存
但如果是用中文還是無法顯示

那第二個要注意的是,html的編碼。是否也是宣告為utf8。
其實這裏也是需要知道你的表編碼是否也是正常。
不過看起來你有設定了set name。理論上來說因該不會有問題。

要不然你就另外再試一件事。同一支程式去做新增資料的動作。
然後再去phpmyadmin看看中文字是否正常。

交互比對查看就可以了解。編碼的問題要維持4點注意
1.表編碼
2.sql語法宣告
3.html編碼
4.程式檔案編碼
確保4項都在正確的編碼上。

0
froce
iT邦大師 4 級 ‧ 2019-06-04 15:55:48
"SELECT * FROM MenuData WHERE MD_Classification='$Submit' ORDER BY MD_index ASC"

ㄜ...你確定這串送進sql裡會把$Submit的值帶出來嗎?

看更多先前的回應...收起先前的回應...
scjh8214 iT邦新手 5 級 ‧ 2019-06-04 16:02:58 檢舉
"SELECT * FROM MenuData WHERE MD_Classification='義大利麵' ORDER BY MD_index ASC"

執行出來結果也是沒有顯示東西

php的雙引號有針對$變數有魔術作用。理論上是會自動帶值。
雖然我個人也是不建議這樣做就是了。

因為魔術作用也只是一種字串解析。但很容易因為一些問題而發生解析錯誤。然後產生錯誤的字串出來。

ccutmis iT邦高手 9 級 ‧ 2019-06-04 16:09:26 檢舉

恩 就這部份應該是可以 因為php的""字串可以帶php變數進去,例如:

<?php
$Submit='aaa';
echo "SELECT * FROM MenuData WHERE MD_Classification='$Submit' ORDER BY MD_index ASC";
?>

輸出結果:
SELECT * FROM MenuData WHERE MD_Classification='aaa' ORDER BY MD_index ASC

scjh8214 iT邦新手 5 級 ‧ 2019-06-04 16:10:22 檢舉

是可以的

froce iT邦大師 4 級 ‧ 2019-06-04 16:20:11 檢舉

那你可能要去sql那邊看看查詢的log,確認跳了什麼錯誤,查詢有沒有送到。

0
rogeryao
iT邦高手 7 級 ‧ 2019-06-04 16:11:22
$sql = "SELECT * FROM MenuData WHERE MD_Classification='".$Submit."' ORDER BY MD_index ASC";
scjh8214 iT邦新手 5 級 ‧ 2019-06-04 16:13:07 檢舉

改成這樣還是無法正常顯示

rogeryao iT邦高手 7 級 ‧ 2019-06-04 16:21:13 檢舉
echo "<td>"; echo $MD_Price; echo "</td>";            
rogeryao iT邦高手 7 級 ‧ 2019-06-04 16:31:17 檢舉
0
Ks
iT邦新手 4 級 ‧ 2019-06-04 16:27:52

猜想你的資料庫是使用mysql對吧,也許是編碼的問題~
/images/emoticon/emoticon06.gif

同時也可以試試看再當初insert進去db的時候,在中文字之前加上N'義大利麵'
然後再進行搜尋MD_Classification = '$Submit'是否有效

可以試試以下方式來測試,應該會出來,但是只是找出問題所在,而不是解法.
範例
select * from Test where ASCII(title)= ASCII('義大利面')

你的代碼
SELECT * FROM MenuData WHERE ASCII(MD_Classification)=ASCII('$Submit') ORDER BY MD_index ASC

1
小魚
iT邦高手 1 級 ‧ 2019-06-04 17:24:04

根本的解決方法是紀錄Log,
把SQL語法抓出來,
再貼到phpmyadmin上執行看看.
也許當你看到Log的時候就會發現問題了...

我要發表回答

立即登入回答