[英]Array search in mysql database with PHP
我有一個數據庫,用於存儲產品詳細信息。 (編號,名稱,價格,類別,單位)
首先,我在名為“ input.php”的php文件中列出了可供選擇的產品。 它像一種魅力。
// SQL query
$query = "SELECT *
FROM products
ORDER BY p_name
ASC";
$result = mysql_query($query);
if($result === FALSE) {die(mysql_error());}?>
<table width="100%">
<tr>
<td></td>
<td width="800px"><h1>Product name</h1></td>
<td width="400px"><h1>Product price</h1></td>
<td>Category</td>
</tr>
</table>
<?
while ($row = mysql_fetch_assoc($result)) {?>
<table>
<tr>
<td><input type="checkbox" name="pro_name[]" value="<?=$row['p_name']?>"></td>
<td width="800px" align="left"><b><?=$row['p_name']?></b></td>
<td width="400px" align="left"><?=$row['p_price']?></td>
<td align="center"><?=$row['p_cat']?></td>
</tr>
</table>
<?}
我將數據提交到“ index.php”並在那里處理變量。
if($_SERVER['REQUEST_METHOD']== "POST"){
// Variables
$c_name = $_POST['c_name']; // ['company name']
$c_consumption = $_POST['c_consumption']; // ['company consumptions']
$f_price = $_POST['f_price']; // ['fuel price']
$o_sales = $_POST['o_sales']; // ['sales']
$pro_name = $_POST['pro_name']; // ['products names']
$pro_id = $_POST['pro_id']; // ['product id']
$pro_price = $_POST['pro_price']; // ['product price']
我陷入困境的第三步...我需要列出挑選的產品詳細信息。
我的想法是從數據庫中選擇詳細信息,並搜索我之前選擇的產品名稱。
我嘗試了IN,LIKE,內爆...等,但沒有成功。 :(
// SQL query
$query = "SELECT *
FROM products
WHERE p_name IN (".implode(',', $pro_name).")
ORDER BY p_name
ASC";
$result = mysql_query($query);
if($result === FALSE) {die(mysql_error());}
while ($row = mysql_fetch_array($result)) {?>
<table>
<tr>
<td width="800px" align="left"><b><?=$row['p_name']?></b></td>
<td width="400px" align="left"><?=$row['p_price']?></td>
<td align="center"><?=$row['p_cat']?></td>
</tr>
</table>
<?}
}
編輯:
var_dump($pro_name); result
array(3) { [0]=> string(14) "12 V szivattyú" [1]=> string(17) "120 l/p szivattyú" [2]=> string(28) "24 hónapra bővített garancia" }
$ pro_name的值是多少? 如果您使用的是爆破式,則應使用$ pro_name = array('Fruit','Chocolate','Mirror');之類的數組; 然后查詢將是:
SELECT *
FROM products
-> WHERE p_name IN ("Fruit,Chocolate,Mirror")
ORDER BY p_name
ASC
但是問題在於查詢仍然是錯誤的,因為存在“”,那么您應該刪除並更改為
WHERE p_name IN (implode(',', $pro_name))
然后查詢將像
SELECT *
FROM products
-> WHERE p_name IN (Fruit,Chocolate,Mirror)
ORDER BY p_name
ASC
如果p_name是字符串類型,我很確定您要插入的$ pro_names需要用'(單引號分隔符)定界。 看起來您腳本中的內容將由sql解析器解釋為列名。
試試這個SQL
$pr_name = ltrim(implode(',' , '".$pro_name."'), ',');
$query = "SELECT *
FROM products
WHERE p_name IN ($pr_name)
ORDER BY p_name
ASC";
感謝您的答復。 幫助我很多,以解決問題。
這是我的解決方案:
<input type="checkbox" name="pro_id[]" value="<?=$row['p_id']?>">
它創建一個數組:
string(24) "6, 7, 10, 20, 21, 49, 54"
比
$list = implode(', ', $pro_id);
的SQL
// SQL query
$query = " SELECT *
FROM products
WHERE p_id IN ($list)
ORDER BY p_name
ASC ";
我認為名稱包含查詢無法處理的字符,因此現在基於ID的查詢。 我不知道為什么我一開始就不使用id。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.