我在$Submit==""的SQL"SELECT * FROM MenuData"能正常顯示出來
但把SQL加上WHERE之後"SELECT * FROM MenuData WHERE MD_Classification='$Submit' ORDER BY MD_index ASC"就無法正常顯示
在phpmyadmin 執行條件式的SQL也能正常顯示
找了很久不知道哪裡出了錯
<div class="aaa"><h1>MENU</h1>
<form>
<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();
?>
其實你以下的寫法
$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貼過去。
有助查看問題。
程式生出來的複製到phpmyadmin可以正常可以正常執行顯示
我剛注意到你程式有
mysql_connect('', '', '');
為何還需要做一次連線??
你該不會是根本沒連好資料庫吧?
沒任何錯誤訊息嘛??
我剛在你的發文中發現你的條件是中文字。
那有可能性是編碼的問題。
檢查的方式很簡單,你先故意輸入只有英文字的值到資料表上。
然後用程式跑那段英文字看是否可以正常。
如果是的話,你要注意的就只有一件事。
那就是你的程式檔案(也就是你的php文件檔)的編碼是否也是utf8的編碼。
好像是中文字的原因
但我重新儲存了一次PHP檔用UTF8存
但如果是用中文還是無法顯示
那第二個要注意的是,html的編碼。是否也是宣告為utf8。
其實這裏也是需要知道你的表編碼是否也是正常。
不過看起來你有設定了set name。理論上來說因該不會有問題。
要不然你就另外再試一件事。同一支程式去做新增資料的動作。
然後再去phpmyadmin看看中文字是否正常。
交互比對查看就可以了解。編碼的問題要維持4點注意
1.表編碼
2.sql語法宣告
3.html編碼
4.程式檔案編碼
確保4項都在正確的編碼上。
"SELECT * FROM MenuData WHERE MD_Classification='$Submit' ORDER BY MD_index ASC"
ㄜ...你確定這串送進sql裡會把$Submit的值帶出來嗎?
"SELECT * FROM MenuData WHERE MD_Classification='義大利麵' ORDER BY MD_index ASC"
執行出來結果也是沒有顯示東西
php的雙引號有針對$變數有魔術作用。理論上是會自動帶值。
雖然我個人也是不建議這樣做就是了。
因為魔術作用也只是一種字串解析。但很容易因為一些問題而發生解析錯誤。然後產生錯誤的字串出來。
$sql = "SELECT * FROM MenuData WHERE MD_Classification='".$Submit."' ORDER BY MD_index ASC";
猜想你的資料庫是使用mysql對吧,也許是編碼的問題~
同時也可以試試看再當初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
根本的解決方法是紀錄Log,
把SQL語法抓出來,
再貼到phpmyadmin上執行看看.
也許當你看到Log的時候就會發現問題了...