2016-07-30 101 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(); 
} 

感谢回答。