2017-01-30 2 views
1

Mein Lieferant sendet jeden Tag eine Aktualisierung des Bestellstatus mit einem variablen statischen Dateinamen in meine SQL-DB zu importieren. Mein cronjob hat den folgenden Code:Importieren Sie eine CSV-Datei mit variabler Dateiname

<?php 
require('cron_config.php'); 

// Open and parse the sales.csv file 
$fh = fopen("../files/out/orderstatus.csv", "r"); 

while ($line = fgetcsv($fh, 1000, ",")) 
{ 
    $order_id = $line[0]; 
    $order_status_id = $line[1]; 
    $date_modified = $line[2]; 

    // Insert the data into the sales table 
    $query = "UPDATE oc_order o SET order_status_id='$order_status_id', 
     date_modified='$date_modified' WHERE order_id = '$order_id'"; 

    $result = $mysqli->query($query); 
} 

fclose($fh); 
$mysqli->close(); 
?> 

In meinem Code sehen Sie den statischen Dateinamen "orderstatus.csv". Zukünftig erhalte ich einen dynamischen Dateinamen (Beispiel: orderstatus_ "order_id" .csv. Wie ist es möglich, diese Datei mit meinem Code zu erkennen? Die named order_id ist bereits ein Teil der sql_query.

Danke für die Hilfe

+0

Was ist mit der Methode, die Sie gerade verwenden, falsch? Wenn Sie jeden Tag dieselbe Datei erhalten, überschreiben Sie dann die alte Datei? –

+0

Schade, ich bin nicht php guy. Sie müssen die Auftrags-ID aus 'orderstatus_order_id.csv' analysieren, vielleicht mit' regex'. dann speichern Sie es in Variable und verwenden Sie später diese Variable in Verkettungen/Parametrisierungen von SQL: 'WHERE order_id = '". $ order_id. "'" ' –

+0

' WHERE order_id = '". $ order_id. "'" '- Punkte, nicht' + '' s @ T.S. in php –

Antwort

0

Warum es nicht suchen:

$result = array_filter(array_map(
     function($a){ 
      return strpos($a,'orderstatus_')===0?$a:null;   
     } 
     ,scandir('../files/out/'))); 

Das Ergebnis Array wird nur alle Dateien aus dem Ordner halten, die mit orderstatus_ beginnen, sind

+0

sicher zu überarbeiten, aber das würde der Ordner benötigt nur die eine Datei, nicht wahr? –

+0

@Fred -ii- Denken Sie die OP zeigen nicht die volle Logik dahinter. Werden die Dateien nach dem Import/Update gelöscht? Sind mehrere CSV-Dateien gleichzeitig im Ordner vorhanden? Sollte dann die gesamte Datei importiert werden? Und so weiter ... – JustOnUnderMillions

+0

Lordie, es ist schwer zu sagen und IMHO, dachte die Frage war unklar/zu weit, wo/wie diese (dynamische) Datei herkommen wird. –

1

Nun Jungs getan mit glob() und unlink() es.. hat den Job gemacht, hier der Code:

<?php 
require('cron_config.php'); 

foreach (glob("../files/out/orderstatus_*.csv") as $filename) { 
echo "$filename \n"; 
} 

// Open and parse the sales.csv file 
$fh = fopen("$filename", "r"); 

while ($line = fgetcsv($fh, 1000, ",")) 
{ 
    $order_id = $line[0]; 
    $order_status_id = $line[1]; 
    $date_modified = $line[2]; 

    // Insert the data into the sales table 
    $query = "UPDATE oc_order o SET order_status_id='$order_status_id', 
     date_modified='$date_modified' WHERE order_id = '$order_id'"; 

    $result = $mysqli->query($query); 
} 

fclose($fh); 
unlink("$filename"); 
$mysqli->close(); 
?>