2015-10-13 4 views
0

Это мои базы данных:Обновление CSV-файл с PHP

database.csv:

barcode,  Name  , Qty ,Code 
123456 ,Rothmans Blue , 40 ,RB44 
234567 ,Rothmans Red , 40 ,RB30 
345678 ,Rothmans Green , 40 ,RB20 
456789 ,Rothmans Purple, 40 ,RB10 
567890 ,Rothmans Orange, 40 ,RB55 

stocktakemain.csv:

barcode,  Name  , Qty ,Code,ScQty 
123456 ,Rothmans Blue , 40 ,RB44, 1 
234567 ,Rothmans Red , 40 ,RB30, 1 

процесса:

  1. Сайт имеет входное сканирование, которое отправляется на «штрих-код».
  2. Он проверит, что существует штрихкод в «database.csv»
  3. Если штрих-код существует и не в «stocktakemain.csv», это добавит его к «stocktakemain.csv» с ScQty 1. См. Раздел 2 в приведенном ниже кодексе.
  4. ELSE, когда проверяется существующий штрих-код в файле stocktakemain.csv, добавьте «sharetakemain.csv» с +1 (добавление 1) в ScQty для этой конкретной строки.

Bolded выше не работает

Код:

function searchForBarcode($id, $array) 
{ 
    foreach ($array as $key => $val) 
    { 
     if (in_array($id, $val)) 
     { 
      return $key; 
     } 
    } 
    return null; 
} 

$post = $_POST["barcode"]; 
$dbcsv = fopen('databases/database.csv', 'r'); 
$csvArray = array(); 
while(! feof($dbcsv)) 
    { 
     $csvArray[] = fgetcsv($dbcsv); 
    } 
fclose($dbcsv); 
$searchf = searchForBarcode($post, $csvArray); 
$result = $csvArray[$searchf]; 
$final = $result[+3]; 

if ($searchf !== NULL){ 
$stcsv = fopen('databases/stocktakemain.csv', 'r+'); 
$stArray = array(); 
while(! feof($stcsv)) 
    { 
     $stArray[] = fgetcsv($stcsv); 
    } 
fclose($stcsv); 

$searchs = searchForBarcode($post, $stArray); 

if ($searchs === NULL) { 
    $filew = 'databases/stocktakemain.csv'; 
    $write = file_get_contents($filew); 
    $write .= print_r(implode(",",$result), true).",1\n"; 
    file_put_contents($filew, $write); 
} 
else { 
    $filew = 'databases/stocktakemain.csv'; 
    $resultexisting = $stArray[$searchs]; 
    print_r($resultexisting); 
    echo "<br/>"; 
    $getfilecont = file_get_contents($filew); 
    $getfilecont = trim($getfilecont); 
    $existing = explode(",", $getfilecont); 
    $existing[4] = trim($existing[4]); 
    ++$existing[4]; 
    print_r($existing); 
    echo "<br/>"; 
    $writeto = print_r(implode(",",$existing), true); 
    print_r($writeto); 
    file_put_contents($filew, $writeto); 
} 
} 
+0

Когда вы запускаете его в настоящее время и сканируете что-то, что уже существует в файле stocktakemain.csv, оно увеличивает любой ScQty в файле stocktakemain.csv? Или ничего не делать? Или ошибка? – alexanderbird

+0

да, но если есть несколько значений, они не будут включать их при повторной записи. – atomapps

+0

он собирается внутри другой части, что является значением $ searchs @atomapps –

ответ

1

Вот некоторые выводы, которые я сделал из чтения кода:

  • блок еще выполняется если предмет сканируется, который уже находится в файле stocktakemain.csv
  • $searchs содержит индекс строки элемента, который был сканированного
  • $stArray содержит 2D массив содержимого stocktakemain.csv - первый индекс это номер строки, начиная с 0, а следующий индекс номер столбца

Исходя из этого, я думаю, вам нужно переписать еще блок, чтобы быть что-то вроде:

$scQtyColumn = 4; 

// what is the current quantity? 
$scQty = intval($stArray[$searchs][$scQtyColumn]); 

// update the quantity in the stocktakemain.csv contents array 
$stArray[$searchs][$scQtyColumn] = $scQty + 1; 

// write each line to file 
$output = fopen('databases/stocktakemain.csv', 'w'); 
foreach($stArray, $line) { 
    fputcsv($output, $line); 
} 

Не могли бы вы попробовать, что и посмотреть, если это делает трюк?

+0

Привет, Алекс, спасибо за ваш ответ. $ stArray не является 2D, см. обновленный вопрос, который включает полный код :) – atomapps

+0

Вы уверены в этом? Я считаю, что '$ stArray [] = fgetcsv ($ stcsv);' добавляет возвращаемое значение fgetcsv к новому элементу массива $ stArray. Поскольку [fgetcsv возвращает массив] (http://php.net/manual/en/function.fgetcsv.php), вы добавляете один массив для каждой строки в файле CSV. Затем вы можете использовать '$ stArray [$ lineNumber] [$ columnNumber]'. См. Принятый ответ для http: // stackoverflow.com/questions/6892148/add-arrays-to-multi-dimension-array-in-loop – alexanderbird

+0

Невероятно ... вы на месте. Большое вам спасибо ... Настолько проще, что я ожидал ... – atomapps

Смежные вопросы