Я новичок в 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
я проверил мой массив $ данных, и значение правильно есть, но данные только первая строка из текстового файла и не может войти в базу данных – Reed