将csv的值存储在表数据库的不同列中

时间:2017-11-01 19:55:34

标签: php mysql csv

我需要在表数据库中创建一个存储csv值的表单,我刚刚开始工作的表单,但我需要按特定顺序存储值。 这是使用csv

的csv im

我需要将颜色值存储在表数据库的不同列中,如下所示 csv

但是当我运行表单时,值存储就像这样

example

这是我的表格

 <div class="container">
<?php
if(isset($_POST['uploadBtn'])){
    $fileName=$_FILES['myFile']['name'];
    $fileTmpName=$_FILES['myFile']['tmp_name'];

    $fileExtension=pathinfo($fileName,PATHINFO_EXTENSION);

    $allowedType = array('csv');
    if(!in_array($fileExtension,$allowedType)){?>

        <div class="alert alert-danger">
            INVALID FILE
        </div>
    <?php }else{




        $handle = fopen($fileTmpName, 'r');
$k = 0;
$energies = [];
while (($myData = fgetcsv($handle,1000,',')) !== FALSE) {
  $k++;
  if ( $k > 1 ) {
        $energies[] = $myData[3];
     }
}


list($e1, $e2, $e3) = $energies;
$query = "INSERT INTO metlab.table (energy1, energy2, energy3) VALUES ($e1, $e2, $e3)";

$run = mysql_query($query);




        if(!$run){
            die("error in uploading file".mysql_error());
        }else{ ?>
                <div class="alert alert-success">
                    SUCCESS
                </div>
    <?php   }
    }
}
    ?>

<form action="" method="post" enctype="multipart/form-data">
    <h3 class="text-center">
        RESULTS
    </h3></hr>
    <div class="row">
        <div class="col-md-6">
            <div class="form-group">
                <input type="file" name="myFile" class="form-control">
            </div>
        </div>
    </div>
    <div class="row">
        <div class="col-md-6">
            <div class="form-group">
                <input type="submit" name ="uploadBtn" class="btn btn-info">
            </div>
        </div>
    </div>
</form>
</div>
</body>

我无法弄清楚该怎么做:/ 先谢谢

2 个答案:

答案 0 :(得分:1)

解析CSV文件时,会逐行解析。因此,目前正在发生的是代码示例中的预期行为。

您遇到的问题是,您希望一次性将所有3 energy个值保留在表格的一行中。

您需要先解析CSV文件,然后保留数据。像这样;

$handle = fopen($fileTmpName, 'r');
$k = 0;
$energies = [];
while (($myData = fgetcsv($handle,1000,',')) !== FALSE) {
  $k++;
  if ( $k > 1 ) {
        // hold onto your values for later.
        $energies[] = $myData[3];
     }
}

// ... you can now persist them in a horizontal table.

我唯一的问题是:是否只有3&#34;能量&#34;? 4,5,6等怎么样?这会影响您的桌面设计。也许你桌子的设计是:

id | energy_type  | energy_value

通过这种方式,您可以更轻松地维护新版energy_types

注意:请改用MySQLi或PDO。

答案 1 :(得分:0)

    ..............

    $handle = fopen($fileTmpName, 'r');
    $k = 0;
    $energies = [];
    while (($myData = fgetcsv($handle,1000,',')) !== FALSE) {
      $k++;
      if ( $k > 1 ) {
            $energies[] = $myData[3];
         }
    }

    // 1 method
    // $values = join(',', $energies);
    // $query = "INSERT INTO metlab.table (energy1, energy2, energy3) VALUES ($values)";

    // 2 method
    list($e1, $e2, $e3) = $energies;
    $query = "INSERT INTO metlab.table (energy1, energy2, energy3) VALUES ($e1, $e2, $e3)";

    $run = mysql_query($query);

    ..............