2016-03-15 3 views
0

Я новичок в PHP, и надеюсь, что вы, ребята, поможете мне с ситуацией здесь ..PHP: Загрузить текстовый файл и сохранить содержимое в базе данных

У меня есть файл отчета, который я должен загрузить, а затем сохранить содержимое базы данных .. Мне удалось загрузить, но не удалось сохранить его в базе данных с отдельными полями. Я могу загрузить только 1 поля

Содержимое текстового файла выглядит так (с ФИКСИРОВАННЫМ ФОРМАТОМ) :

text.txt

2010000130QUEEN CONSOLIDATED   45119700005794493080171527OLIVER        800000.0029/01/1622:27:069501 
2010000130QUEEN CONSOLIDATED   45119700008408176500068670QUEEN        500000.0029/01/1622:07:30373L 

Из вышеприведенных, первых 3 столбцов для нет, и следующие 7 для кода, 30 для имени компании, 16 для userid, 10 для usernumber, 35 для имени, 10 для транс, 8 для даты, 8 для времени а последний для размещения ..

Я пробовал так много кода, но я думаю, что это ближе к моему need.The кодекса выглядит следующим образом

upload.php

<?php include "header.php"; 
 

 
?> 
 
    
 
    <form action="do_upload.php" method="post" enctype="multipart/form-data"> 
 
     \t <table width="409" height="199" border="0" align="center"> 
 
<tr> 
 
       \t <td width="161">Upload File (.txt only)</td> 
 
     <td width="14">:</td> 
 
     <td width="218"><input type="file" name="upload"></td> 
 
       </tr> 
 
       <tr> 
 
       \t <td colspan="3"><button type="submit">Upload</button></td> 
 
       </tr> 
 
       <tr> 
 
       \t <td colspan="3"> 
 
\t \t \t \t \t \t <?php if(!empty($_GET['msg'])){ 
 
\t \t \t \t \t \t \t echo $_GET['msg'];} 
 
\t \t \t \t \t \t ?> 
 
        </td> 
 
       </tr> 
 
      </table> 
 
     </form> 
 
     
 
<?php include "footer.php";?>

Это мой PHP-код, который не работает, выглядит следующим образом.

do_upload.php

<?php include "../connection.php"; 
 

 
\t $location_file=$_FILES['upload']['tmp_name']; 
 
$name_file=$_FILES['upload']['name']; 
 
$type_file=$_FILES['upload']['type']; 
 
$size_file=$_FILES['upload']['size']; 
 
$content = file_get_contents($_FILES['upload']['tmp_name']); 
 
$handle = fopen($_FILES['upload']['tmp_name'],"r"); 
 
$lines = explode("\n", $content); 
 

 
if($location_file==""){ 
 
\t header("location:upload.php?msg=Please Choose the File"); 
 
}else if ($type_file == '.txt'){ 
 
\t header("location:upload.php?msg=Upload file with .txt extension only"); 
 
}else if($size_file > 104857600){ 
 
\t header("location:upload.php?msg=Max File Size is 100MB"); 
 
} 
 
else{ 
 
\t 
 
\t $data = array(); 
 
\t while (false !== ($line = fgets($handle))) 
 
\t { 
 
\t \t $data[] = array(
 
\t \t \t 'no' => trim(substr($line, 0, 3)), 
 
\t \t \t 'code' => trim(substr($line,3,7)), 
 
\t \t \t 'companyname' => trim(substr($line, 10, 30)), 
 
\t \t \t 'userid' => trim(substr($line, 40, 16)), 
 
\t \t \t 'usernumber' => trim(substr($line, 56, 10)), 
 
\t \t \t 'name' => trim(substr($line, 66, 35)), 
 
\t \t \t 'trans' => trim(substr($line, 101, 10)), 
 
\t \t \t 'date' => trim(substr($line, 111, 8)), 
 
\t \t \t 'time' => trim(substr($line,119,8)), 
 
\t \t \t 'location' => trim(substr($line,127)) 
 
\t \t); 
 
\t } 
 
\t fclose($handle); 
 
\t 
 
\t foreach($data as $row){ 
 
\t \t $sql="INSERT INTO report (no, code, companyname, userid, usernumber, name, trans, date, time, location) VALUES ('{$row[0]}','{$row[1]}','{$row[2]}','{$row[3]}','{$row[4]}','{$row[5]}','{$row[6]}','{$row[7]}','{$row[8]}','{$row[9]}')"; 
 
\t \t if (!mysqli_query($connect,$sql)) 
 
\t \t { 
 
\t \t die('Error: ' . mysqli_error($connect)); 
 
\t \t } 
 
\t } 
 
\t mysqli_close($connect); 
 
\t header("location:upload.php?msg=Upload Success! Please View it at 'VIEW REPORT' Menu"); 
 
     } 
 
?>

Так как я новичок в PHP, я думаю, что я должен использовать функцию substr() и так будет белое пространство я буду используя trim(), поскольку это фиксированный формат.

Проблема в том, что после того, как я загрузил текст, он вставляет пустые значения в базу данных. Я действительно не знаю, что я должен делать

Пожалуйста, расскажите мне, как это сделать. я все еще новичок на php, soo любая помощь будет высоко оценена. Спасибо!

UPDATE .. Массив работает, но значения не добавлены в базу данных

$data[] = array(); 
 
\t \t $i = 0; 
 
\t \t while (false !== ($lines = fgets($handle))) 
 
\t \t { 
 
\t \t \t $data[$i] = array(
 
\t \t  'no' => trim(substr($line, 0, 3)), 
 
\t \t  'code' => trim(substr($line,3,7)), 
 
\t \t  'companyname' => trim(substr($line, 10, 30)), 
 
\t \t  'userid' => trim(substr($line, 40, 16)), 
 
\t \t  'usernumber' => trim(substr($line, 56, 10)), 
 
\t \t  'name' => trim(substr($line, 66, 35)), 
 
\t \t  'trans' => trim(substr($line, 101, 10)), 
 
\t \t  'date' => trim(substr($line, 111, 8)), 
 
\t \t  'time' => trim(substr($line,119,8)), 
 
\t \t  'location' => trim(substr($line,127)) 
 
\t  ); 
 
\t \t \t $i++; 
 
\t \t } 
 
\t \t fclose($handle); 
 
\t \t 
 
     // THIS IS THE PROBLEM,if this not commented then the loop will not work 
 
\t \t /*foreach($data as $data){ 
 
\t \t \t $sql="INSERT INTO report (no, code, companyname, userid, usernumber, name, trans, date, time, location) VALUES ('{$data[0]}','{$data[1]}','{$data[2]}','{$data[3]}','{$data[4]}','{$data[5]}','{$data[6]}','{$data[7]}','{$data[8]}','{$data[9]}')"; 
 
\t \t \t if (!mysqli_query($connect,$sql)) 
 
\t \t \t { 
 
\t \t \t die('Error: ' . mysqli_error($connect)); 
 
\t \t \t } 
 
\t \t }*/ 
 
\t \t 
 
\t \t //echo "<pre>"; 
 
\t \t //print_r($data); Checking the values 
 
\t \t //echo "</pre>"; 
 
       mysqli_close($connect); 
 
       header("location:upload.php?msg=Upload Success!");

Теперь, когда мой "зиЬзЬг() функция работает, единственная проблема, я не могу цикл когда я вставляю значение в базу данных, и я, очевидно, понятия не имею. И когда я смогу вставить значение, оно будет вставлено вот так:

Image inside of phpmyadmin Database

ответ

0

Вы проверили свой массив $ data для значений элементов. Вы можете использовать print_r ($ data), чтобы увидеть значения элементов массива &.

Спасибо,

+0

я проверил мой массив $ данных, и значение правильно есть, но данные только первая строка из текстового файла и не может войти в базу данных – Reed

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