2016-07-13 4 views
0

На данный момент я не забочусь о безопасности. Я застрял в этом коде в течение 4 дней. Пожалуйста помоги. Это код, который у меня есть на данный момент. Я загружаю текстовый файл внутри своего веб-приложения php. Загрузка выполнена успешно. Я перемещаю файл в каталог, и это тоже работает. Мне просто нужна помощь с алгоритмом синтаксического анализа во время цикла foreach. Он будет хранить два значения один раз, после чего он никогда не сделает это снова. У меня уже есть параметры базы данных, сохраненные в моем файле. Текстовый файл имеет разделитель табуляции, и все типы данных находятся в таблице базы данных.Анализ текстового файла по строкам и сохранение данных в базе данных MYSQL

 $file_name= $_FILES['file1']['name']; 
    $add= "uploads/$file_name"; 
    $move = move_uploaded_file($_FILES['file1']['tmp_name'], $add); 
    $get = file_get_contents("$add"); 
    $delimiter = "\n"; 
    $line = explode($delimiter, $get); 
    foreach ($line as $value => $data) { 
     $delimiter = "\t"; 
     $tab = explode($delimiter, $data); 
     $datetime = $tab[0]; 
     $deltatime = $tab[1]; 
     $sql = "INSERT INTO RobotData (datetime, deltatime) VALUES('$datetime', '$deltatime')"; 
     $store = mysqli_query($conn, $sql); 
    } 
+1

сделать какие-либо основные отладки, как 'var_dump ($ строка)', чтобы увидеть, если вы разобранном правильно? как насчет 'var_dump ($ tab)'? –

+1

Можете ли вы дать нам образец данных? –

+1

пример данных: (одна строка) 17.06.2013 3:35:49 PM \t 55.0031 – Drizzle53

ответ

0

попробовать что-то вроде этого, и дайте мне знать,

$file_name = $_FILES['file1']['name']; 
$add = "uploads/$file_name"; 
$move = move_uploaded_file($_FILES['file1']['tmp_name'], $add); 

$handle = fopen($add, "r"); 

if ($handle) { 

    while (($line = fgets($handle)) !== false) { 

     $arr = explode("\t", $line); 
     $datetime = mysqli_real_escape_string($arr[0]); 
     $deltatime = mysqli_real_escape_string($arr[1]); 

     $sql = "INSERT INTO RobotData (datetime, deltatime) VALUES('$datetime', '$deltatime')"; 
     $store = mysqli_query($conn, $sql); 
    } 

    fclose($handle); 
} else { 
    // error opening the file. 
} 

Редактировать

Добавлено экранирования специальных символов в строке для использования в SQL заявления

+0

спасибо. Я дам ему попытку – Drizzle53

+0

. Это будет работать. Я попытаюсь добавить третий элемент и посмотреть, не работает ли он. – Drizzle53

+0

Да. вы можете добавить это. Если вы считаете, что мой ответ помог вам решить ваш вопрос, пожалуйста, примите его. ;) –

0

Это код Я использую сейчас ...

 $file_name= $_FILES['file1']['name']; 
    $add= "uploads/$file_name"; 
    $move = move_uploaded_file($_FILES['file1']['tmp_name'], $add); 
    $handle = fopen($add, "r"); 
    if ($handle) { 
     while (($line = fgets($handle)) !== FALSE) { 
      $delimiter = "\t"; 
      $tab = explode($delimiter, $line); 
      $datetime = $tab[0]; 
      $deltatime = $tab[1]; 
      $sql = "INSERT INTO RobotData (datetime, deltatime) VALUES ('$datetime', '$deltatime')"; 
      $store = mysqli_query($conn, $sql); 
       if($store === TRUE) { 
        fclose($handle); 
       $delete= unlink($add); 
       echo "YOU DID IT!!"; 
      } 
      else { 
       fclose($handle); 
       $delete= unlink($add); 
       echo "YOU SUCK!!"; 
      } 
     } 
    } 
    else { 
     fclose($handle); 
     $delete= unlink($add); 
     echo "Something went wrong"; 
    } 
0

LOAD DATA INFILE Попробуйте - он был создан для дополнительных быстрой загрузки больших объемов данных из текстовых файлов:

LOAD DATA LOCAL INFILE '/full/path/to/text/file' 
INTO TABLE RobotData 
COLUMNS TERMINATED BY '\t' 
LINES TERMINATED BY '\n'; 

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

  • Нет связанных вопросов^_^