Вставка данных CSV в SQL - PullRequest
       8

Вставка данных CSV в SQL

0 голосов
/ 11 декабря 2018

Я хочу вставить данные из CSV-файла, в мою таблицу SQL excel, код работает, но не работает должным образом.

ПРИМЕР:

Данные в файле Excel

kier

kier @ Noemail @ gmail.com

вывод в таблицу excel

excel_name: kier; kier @ Noemail @ gmail.com

excel_email: blank

 <?php
 $connect = mysqli_connect('localhost','root','P@ssw0rd@sql','voters');

if (isset($_POST['submit'])) {
  if ($_FILES['file']['name']) {
    $filename = explode(".",$_FILES['file']['name']);
    if ($filename[1] == 'csv') {
      $handle = fopen($_FILES['file']['tmp_name'], "r");
      while ($data= fgetcsv($handle)) {
        $item1 = mysqli_real_escape_string($connect, $data[0]);
        $item2 = mysqli_real_escape_string($connect, $data[1]);
        $sql = "INSERT INTO excel (excel_name, excel_email) VALUES ('$item1','$item2')";
        mysqli_query($connect, $sql);
      }
      fclose($handle);

      print "Rois x Dave!";
    }
  }
}

?>
<!DOCTYPE html>
<html>
<head>
  <title></title>
</head>
<body>
  <form method="POST" enctype="multipart/form-data">
    <div align="center">
      <p>upload<input type="file" name="file"></p>
      <p><input type="submit" name="submit" value="import"></p>
    </div>
  </form>
</body>
</html>

Проблема заключается в именах excel_ и excel_emailконкатенация в одном столбце, который является excel_name, пожалуйста, помогите мне решить эту проблему.Tyia!

Ответы [ 3 ]

0 голосов
/ 11 декабря 2018

прочитайте документ: http://php.net/manual/en/function.fgetcsv.php

array fgetcsv ( resource $handle [, int $length = 0 [, string $delimiter = "," [, string $enclosure = '"' [, string $escape = "\\" ]]]] )

измените

$data= fgetcsv($handle)

на

$data = fgetcsv($handle, $length = 0, $delimiter = ';')

удаленный вами загруженный вами CSV-файл;нет,

0 голосов
/ 11 декабря 2018

В соответствии со значением kier;kier@Noemail@gmail.com ваш разделитель равен ;.Разделитель по умолчанию для fgetcsv равен ,.Таким образом, вы должны передать ; в качестве аргумента разделителя:

while ($data = fgetcsv($handle, 4096, ';')) {

Кроме того, всегда полезно отладить ваши переменные, чтобы увидеть, какое значение они имеют:

var_dump($item1, $item2);
0 голосов
/ 11 декабря 2018

Похоже, что $data[0] содержит вашу информацию, которая вам нужна.Я бы просто использовал разнесение и разделил данные, прежде чем переместить их в вашу БД.

Попробуйте изменить цикл while на:

while ($data= fgetcsv($handle)) {

  $items = explode(';', $data[0]);
  $sql = "INSERT INTO excel (excel_name, excel_email) VALUES ('$items[0]','$items[1]')";
  mysqli_query($connect, $sql);

}
...