Я пытаюсь использовать PHP
/Ajax
загрузить XML
файл и импортировать данные в мою базу данных. Кажется, все работает без сбоев, у меня есть кнопка и функция, чтобы уведомить меня, был ли файл загружен или нет, однако, когда я просматриваю свою базу данных, информации там нет.
(Я следовал учебному пособию, пытаясь адаптировать его к моим собственным потребностям / структуре файла XML).
if(isset($_FILES['file']['name']) && $_FILES['file']['name'] != '')
{
$valid_extension = array('xml');
$file_data = explode('.', $_FILES['file']['name']);
$file_extension = end($file_data);
if(in_array($file_extension, $valid_extension))
{
$data = simplexml_load_file($_FILES['file']['tmp_name']);
$connect = new PDO('mysql:host=localhost;dbname=hpr_db','root','root');
$query = "INSERT INTO data(userid, firstname, lastname, objectid, productkey, logvolume, loglength)
VALUES(:userid, :firstname, :lastname, :objectid, :productkey, :logvolume, :loglength);";
$statement = $connect->prepare($query);
for($i = 0; $i < count($data); $i++)
$statement->execute(
array(
':userid' => $data->Machine->MachineUserID,
':firstname' => $data->Machine->OperatorDefinition->ContactInformation[$i]->FirstName,
':lastname' => $data->Machine->OperatorDefinition->ContactInformation[$i]->LastName,
':objectid' => $data->Machine->ObjectDefinition[$i]->ObjectUserID,
':productkey' => $data->Machine->SingleTreeProcessedStem->Log[$i]>ProductKey,
':logvolume' => $data->Machine->SingleTreeProcessedStem->Log[$i]->LogVolume,
':loglength' => $data->Machine->SingleTreeProcessedStem->Log->LogMeasurement[$i]->LogLength,
)
);
}
$result = $statement->fetchAll();
if(isset($result))
{
$output = '<div class="alert alert-success">Import Data Done</div>';
}
}
else
{
$output = '<div class="alert alert-warning">Invalid File</div>';
}
Я очень новичок в этом, поэтому, пожалуйста, будьте добры.
Что означает [$ i] после узла в массиве? У меня ощущение, что сложность моего XML-файла делает его непонятным, неправильно ли я это обозначаю? XML-файл учебника имеет только 2 узла, поэтому он структурирован как таковой;
':name' => $data->employee[$i]->name,
':position' => $data->employee[$i]->position,
Для более сложных XML
файлы, какова будет структура? Или я полностью упускаю суть.
У меня была такая же потребность PHPExcel:
Сначала вам нужно использовать из PHPExcel. После этого прочитайте ваш файл xls и вставьте данные в свою базу данных.
Прочитайте и преобразуйте ваш файл xls в массив PHP со следующей структурой:
function fileInitializer($file, $needCells){
$array_data = array();
require_once 'libraries/PHPExcel/PHPExcel.php';
$objPHPExcel = new PHPExcel();
$target_dir = "FILEPATH/".$file;
$objReader= new PHPExcel_Reader_Excel5();
$objReader->setReadDataOnly(true);
$objPHPExcel = $objReader->load( $target_dir);
$rowIterator = $objPHPExcel->getActiveSheet()->getRowIterator();
$rowIndex = 0;
foreach($rowIterator as $row){
$cellIterator = $row->getCellIterator();
$cellIterator->setIterateOnlyExistingCells(false);
if(1 == $row->getRowIndex ()) continue;
foreach ($cellIterator as $cell) {
foreach($needCells as $needCell){
if($needCell['cell_name'] == $cell->getColumn()){
$array_data[$rowIndex][$needCell['array_name']] = fai_convert_string_to_persian($cell->getCalculatedValue());
}
}
}
$rowIndex++;
}
return $array_data;
}
$file = 'FILENAME';
$needCells = array(
array('cell_name'=>'A', 'array_name'=>'id')
, array('cell_name'=>'B', 'array_name'=>'full_name')
);
$array_data = fileInitializer($file, $needCells);
и после вышеупомянутого процесса есть некоторое время в $ array_data и добавить данные в вашу базу данных
Других решений пока нет …