Buongiorno a tutti!
Sto cercando di creare un sistema di passaggio dati che mi vengono forniti tramite file .xlsx/.xls in un database sql. Il sistema era già stato creato in quanto prima le colonne erano fisse e funzionava tutto ma ora le colonne dei file non sono fisse e quindi ho necessità di metterci mano. Ora ho necessità di leggere la prima riga del file .xlsx e usare i valori come intestazione delle colonne. Vi posto il codice che sto usando ("import_file_btn" fa riferimento ad una semplice pagina index.php con un form per il caricamento del file)
Quando arrivo a dichiarare $flipped, se faccio il var_dump è corretto, l'array è flippato però poi quando vado a fare l'import nel database mi importa solo una riga vuota con gli 0 nelle colonne INT. Qualche idea su come proseguire? Precedentemente, quando leggevo i valori per colonne, era tutto ok e funzionante (qui il codice "vecchio")
Grazie mille a chiunque per l'aiuto, consiglio o qualsiasi cosa!
Sto cercando di creare un sistema di passaggio dati che mi vengono forniti tramite file .xlsx/.xls in un database sql. Il sistema era già stato creato in quanto prima le colonne erano fisse e funzionava tutto ma ora le colonne dei file non sono fisse e quindi ho necessità di metterci mano. Ora ho necessità di leggere la prima riga del file .xlsx e usare i valori come intestazione delle colonne. Vi posto il codice che sto usando ("import_file_btn" fa riferimento ad una semplice pagina index.php con un form per il caricamento del file)
session_start();
$link = mysqli_connect("localhost", "root", "123456", "myDB");
require 'vendor/autoload.php';
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
if(isset($_POST['import_file_btn']))
{
$allowed_ext = ['xls', 'xlsx'];
$fileName = $_FILES['import_file']['name'];
$checking = explode(".", $fileName);
$file_ext = end($checking);
if (in_array($file_ext, $allowed_ext))
{
$targetPath = $_FILES['import_file']['tmp_name'];
$spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($targetPath);
$data = $spreadsheet-> getActiveSheet()->toArray();
$firstR = array_values($data[0]);
$flipped = array_flip($firstR);
foreach ($flipped as $row) {
$sku = $row[ $flipped['sku'] ];
$p_name = $row[ $flipped['p_name'] ];
$id_category = $row[ $flipped['id_category'] ];
$id_brand = $row[ $flipped['id_brand'] ];
$checkProduct = "SELECT sku FROM ita WHERE sku='$sku'";
$checkProduct_result = mysqli_query ($link, $checkProduct);
if (mysqli_num_rows($checkProduct_result) > 0)
{
$up_query ="UPDATE ita SET p_name='$p_name', id_category='$id_category', id_brand='$id_brand' WHERE sku='$sku' ";
$up_result = mysqli_query($link, $up_query);
$msg = 1;
}
else
{
$in_query = "INSERT INTO ita (sku, p_name, id_category, id_brand) VALUES ('$sku','$p_name', '$idcategory', '$id_brand')";
$in_result = mysqli_query ($link, $in_query);
$msg = 1;
}
}
if(isset($msg))
{
$_SESSION['status'] = "I dati sono stati importati correttamente";
header("Location: index.php");
}
else
{
$_SESSION['status'] = "Errore durante l'importazione";
header("Location: index.php");
}
}
} else {
$_SESSION['status'] = "Il formato del file non è supportato";
header("Location: index.php");
exit(0);
}
Quando arrivo a dichiarare $flipped, se faccio il var_dump è corretto, l'array è flippato però poi quando vado a fare l'import nel database mi importa solo una riga vuota con gli 0 nelle colonne INT. Qualche idea su come proseguire? Precedentemente, quando leggevo i valori per colonne, era tutto ok e funzionante (qui il codice "vecchio")
$data = $spreadsheet-> getActiveSheet()->toArray();
foreach ($data as $row) {
$sku = $row['0'];
$p_name = $row['1'];
$id_category = $row['2'];
$id_brand = $row['3'];
Grazie mille a chiunque per l'aiuto, consiglio o qualsiasi cosa!