2016-07-30 16 views
1

Es ist ein Tracking-System wie DHL. Verfolgen der Sendungsnummer aus der MySQL-Datenbank mit dem PHP-Formular. aber ich brauche es Suche mehrere Zeilen getrennt durch Komma von MySQL mit PHP. enter image description hereSuche mehrere Zeilen getrennt durch Komma von MySQL mit PHP

<?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 
    ?> 

Also muss ich meine Suche mit Trennung durch Komma arbeiten (,). Danke, dass du mir geholfen hast.

Antwort

2

In diesem Fall können Sie den Operator IN verwenden.

<?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); 
?> 

Ich hoffe, es wird Ihnen helfen.

+0

danke aber wie werde ich meine sendung nicht mit komma trennen? –

+0

Sie müssen nicht durch Komma trennen, weil Sie die Sendungsnummer mit Komma im IN-Operator –

+0

übergeben müssen. Vielen Dank für Ihre Ideen. –

0

Bitte verwenden IN SET Finden

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

Aktualisiert

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

Hinweis: - $ Schiff Comma Separated Value kein Array

+0

'FIND_IN_SET' wird die Position der Zeichenfolge innerhalb einer Liste zurückgeben. Das ist nicht das, was das OP braucht – RomanPerekhrest

+0

ja, aber es wird auch richtige Ergebnis geben –

+0

Schauen Sie, es wird von PHP-Form Wert der Eingabe kommen, wie kann ich 1,2,3,4,5 verwenden? –

1

Änderung Ihrer SQL-Abfrage, die Sie geschrieben haben ‚$ cons [ ] 'in Select-Abfrage, die falsch ist. Nach der Explosion erhalten Sie Daten als 1,2,3, so dass Sie nur Variable in Abfrage nicht Array und Benutzer IN Operator wie folgt schreiben müssen.

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

Sie sollten immer vorbereiten/sanieren die POST Daten, bevor sie in MySql Abfrage (in Bezug auf Sicherheit) mit:

<?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

danke Idee fast nah aber nicht für mich. –

0

ich die Antwort gefunden:

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(); 
} 

Dank Antworten.

Verwandte Themen