2016-07-30 98 views
1

這是一個像DHL這樣的跟蹤系統。使用php表格跟蹤MySQL數據庫中的貨件號碼。 但我需要它搜索多個行分開逗號從MySQL使用PHP。 enter image description here使用php搜索多行,用逗號分隔mysql使用

<?php 
     $ship=$_POST['Consignment']; 
     $cons = explode(',',$ship); 
?> 

<?php 
    $sql = "SELECT * FROM tbl_courier WHERE cons_no = '$cons[]'"; 
    $result = dbQuery($sql); 
    $no = dbNumRows($result); 
    if($no == 1){ 
    while($data = dbFetchAssoc($result)) {  
    extract($data); 
?> 

Shipment Name: <?php echo $ship_name; ?> 
Shipment Phone: <?php echo $phone; ?> 

<?php }//while 
     }//if 
     else { 
     echo 'In else....'; 
?> 
    Consignment Number not found.Search Again. 

    <?php 
       }//else 
    ?> 

所以我需要我的搜索將通過逗號分隔工作(,)。 感謝您的幫助。

回答

2

在這種情況下,您可以使用IN運算符。

<?php 
     $ship=$_POST['Consignment']; 

?> 

<?php 
    $sql = "SELECT * FROM tbl_courier WHERE cons_no IN(".$ship.")"; 
    $result = dbQuery($sql); 
    $no = dbNumRows($result); 
    if($no == 1){ 
    while($data = dbFetchAssoc($result)) {  
    extract($data); 
?> 

希望它對你有幫助。

+0

謝謝,但我將如何使用逗號分隔託運貨物? –

+0

您不需要用逗號分隔,因爲您必須在IN運算符中使用逗號來傳遞託運號碼 –

+0

感謝分享您的想法。 –

0

請使用查找SET

SELECT * FROM tbl_courier WHERE FIND_IN_SET(cons_no,'1,2,3,4,5') 

更新

SELECT * FROM tbl_courier WHERE FIND_IN_SET(cons_no,'$ship') 

注: - $船逗號分隔值不是一個數組

+0

'FIND_IN_SET'將返回列表中字符串的位置。這不是什麼OP需要 – RomanPerekhrest

+0

是的,但它也會給出正確的結果 –

+0

看來它會來自php的輸入值,我怎樣才能使用1,2,3,4,5? –

1

改變你的SQL查詢你寫「$利弊[ ]'在選擇查詢中是錯誤的。爆炸後,你會得到數據爲1,2,3,所以你只需要在查詢而不是數組和用戶IN運算符這樣寫變量。

`$sql = "SELECT * FROM tbl_courier WHERE cons_no IN(".$ship.")";` 
1

你應該總是準備/在MySql查詢中使用它(在安全方面)前消毒POST數據:

<?php 

if (isset[$_POST['Consignment']] && !empty($_POST['Consignment'])) { 
    $ship = $_POST['Consignment']; 
    $cons = explode(',', $ship); 
    $cons = array_filter($cons, function($v){ 
     return trim(strip_tags($v)); 
    }); 
    $cons = '"' . implode('","', $cons) . '"'; 


    $sql = "SELECT * FROM tbl_courier WHERE cons_no IN ($cons)"; 
    $result = dbQuery($sql); 
    $no = dbNumRows($result); 
    if ($no == 1) { 
     while ($data = dbFetchAssoc($result)) {  
      extract($data); 
     .... 
    } 
    .... 
} 

?> 
+0

謝謝想法幾乎接近但不適合我。 –

0

我找到了答案:

if(isset($_POST['Consignment'])){ 

    $ship=$_POST['Consignment']; 
    $shipment= explode(',',$_POST['Consignment']); 

$ship = implode("', '",$shipment) ; 
$query = "SELECT * FROM `tbl_courier` WHERE `cons_no` IN('$ship')"; 

$results = $mysqli->query($query); 

if($results){ 
print '<table border="1">'; 
while($row = $results->fetch_assoc()) { 
    print '<tr>'; 
    print '<td>'.$row["cons_no"].'</td>'; 
    print '<td>'.$row["customerName"].'</td>'; 
    print '<td>'.$row["customerPhone"].'</td>'; 
    print '</tr>'; 
} 
print '</table>'; 

// Frees the memory associated with a result 
$results->free(); 
} 
else { 
    echo "Query Not Match"; 
} 
$mysqli->close(); 
} 

感謝回答。