2015-10-07 48 views
0

我正在使用文本區域,以便一次搜索多個項目並將結果輸出到表格。只有一個項目放入文本區域並進行搜索時,一切正常,但如果搜索到多個項目,則不會返回第一行/搜索項目的查詢結果。我的代碼:PHP文本區域到MySQL查詢變量不會返回所有行結果

<textarea name="search_items" rows="2" cols="30"></textarea> 

$input = $_POST['search_items']; 
list($pc1, $pc2) = explode("\n", $input); 

$desc = mysqli_query($my_connection,"SELECT PART_DESC FROM inventory WHERE PARTCODE = '$pc1' OR PARTCODE = '$pc2';"); 

$i=1; 
while($row_desc = mysqli_fetch_assoc($desc)) { 
    ${'pc_desc'.$i} = $row_desc['PART_DESC']; 
    $i++; 
} 

<table> 
    <tr> 
     <td><?php echo "$pc1"; ?></td> 
     <td><?php echo $pc_desc1; ?></td> 
    </tr> 
    <tr> 
     <td><?php echo "$pc2"; ?></td> 
     <td><?php echo $pc_desc2; ?></td> 
    </tr> 
</table> 

$ PC1回聲出來的文字區域的1號線和$pc2回聲出來的文字區的2號線。我得到了正確的結果,呼應了$pc_desc2,但$pc_desc1是空白。如果我手動分配$pc1$pc2這樣的:

$pc1 = "ABC"; 
$pc1 = "XYZ"; 

兩個$pc_desc1$pc_desc2迴歸正常。請幫忙!

+0

容易受到[sql注入攻擊](http://bobby-tables.com)的影響,並且確實應該使用數組,而不是動態變量名稱。 –

回答

0

無固定你的SQL注入的問題,你會使用這樣的事情會更好:

... 
$parts = explode("\n", $input); 
$sql = "SELECT ... PARTCODE IN (" . implode(',', $parts) . ");"; 
... 
while($row_desc = mysqli_fetch_assoc($desc)) { 
    $data[$row['PART_CODE']] = $row['PART_DESC']; 
} 

<table> 

foreach($data as $code => $desc) { 
    echo "<tr><td>$code</td><td>$desc</td></tr> 
} 

與您的代碼,你不能保證其訂購的描述回來,並最終可能「穿越「的東西,所以你有第一部分的描述#2,第二部分的描述#1。上面的代碼保證代碼/描述總是正確地關聯在一起。並且還省卻了動態變量名稱,這使得難以/不可能調試的代碼。同樣,上面的代碼可以處理任意數量的代碼,而你的代碼被限制爲2.

+0

*很好的免責聲明* ;-)我想我可能會在某個時間使用該行。 –