使用php更新CSV文件

时间:2015-10-13 02:01:38

标签: php html arrays function fopen

这些是我的数据库:

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'内,它会将其添加到Scarety为1的'stocktakemain.csv'。请参阅下面代码中的第2节。
  4. ELSE扫描stocktakemain.csv中的现有条形码时,将“stocktakemain.csv”附加到该特定行的ScQty,加上+1(加1)。
  5. 上面的粗体无效

    代码:

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

1 个答案:

答案 0 :(得分:1)

以下是我通过阅读您的代码得出的一些结论:

  • 如果扫描了已存在于stocktakemain.csv文件中的项目
  • ,则执行else块
  • $searchs包含已扫描项目的行的索引
  • $stArray包含stocktakemain.csv内容的二维数组 - 第一个索引是行号,从0开始,下一个索引是列号

基于此,我认为您需要将您的else块重写为:

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

你可以尝试一下,看看它是否有效?