PHPSpreadsheet inserire dati da file .xlsx/.xls su database

Stato
Chiusa ad ulteriori risposte.

lucie

Nuovo Utente
3 Giu 2021
2
0
1
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)

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!
 
Risolto, c'era solo un errore nel foreach che va corretto così:

Codice:
foreach ($data as $row)

Grazie comunque!
 
@lucie
codice.JPG

Anche il titolo è troppo lungo e poco descrittivo
Qui chiudo riproponi rispettando le regole e il regolamento
 
Stato
Chiusa ad ulteriori risposte.

Discussioni simili