Page 1 sur 1

Besoin d'aide mise à jour PHP de 7 vers 8.1, script ne fonctionne plus

Posté : 20 déc. 2023, 22:12
par remy2906
Bonjour,
J'ai créé un code pour transformer des informations JSON en requête afin de remplir ma base de donnée.

Sur PHP 7.00, ça fonctionnait parfaitement, mais maintenant j'ai un beau message d'erreur ( Fatal error: Uncaught TypeError: implode(): Argument #1 ($pieces) must be of type array, string given in /home/yehdjdnu/test/import.php:54 Stack trace: #0 /home/yehdjdnu/test/import.php(54): implode() #1 {main} thrown in /home/yehdjdnu/test/import.php on line 54)

Auriez vous une idée du soucis ?

Merci d'avance,

Voici le code :

Code : Tout sélectionner

<?php error_reporting(E_ALL); ini_set('display_errors', 1); // Fonction pour échapper les données function escapeData($conn, $data) { if ($data === null) { return null; } return $conn->real_escape_string($data); } // Vérifiez si un fichier a été téléchargé if ($_FILES['jsonFile']['error'] == 0) { $jsonContent = file_get_contents($_FILES['jsonFile']['tmp_name']); $jsonData = json_decode($jsonContent, true); if ($jsonData !== null) { // Connexion à la base de données (utilisez les informations de connexion de votre base de données) $conn = new mysqli('localhost', 'XXXX', 'XXXX', 'XXXX'); // Vérifiez la connexion if ($conn->connect_error) { die('Erreur de connexion à la base de données : ' . $conn->connect_error); } // Préparez la requête SQL pour l'insertion $sql = "INSERT INTO votre_table ( positionName, salary, jobType, company, location, rating, reviewsCount, url, id, postedAt, scrapedAt, postingDateParsed, description, descriptionHTML, externalApplyLink, searchInputposition, searchInputcountry, companyInfoindeedUrl, companyInfourl, companyInfocompanyDescription, companyInforating, companyInforeviewCount, companyInfocompanyLogo, jobType1, jobType2, jobType3, jobType4, jobType5, jobType6, companyInforewordlyUrl ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; // Affichez la requête SQL echo 'Requête SQL : ' . $sql . '<br>'; // Préparez la déclaration $stmt = $conn->prepare($sql); // Vérifiez si la préparation de la requête a réussi if ($stmt === false) { die('Erreur de préparation de la requête : ' . $conn->error); } // Boucle à travers les données JSON et ajoutez-les à la base de données foreach ($jsonData as $data) { // Échappez les données avant de les utiliser dans la requête SQL $positionName = escapeData($conn, $data['positionName']); $salary = escapeData($conn, $data['salary']); $jobType = escapeData($conn, implode(',', $data['jobType'])); $company = escapeData($conn, $data['company']); $location = escapeData($conn, $data['location']); $rating = escapeData($conn, $data['rating']); $reviewsCount = escapeData($conn, $data['reviewsCount']); $url = escapeData($conn, $data['url']); $id = escapeData($conn, $data['id']); $postedAt = escapeData($conn, $data['postedAt']); $scrapedAt = escapeData($conn, $data['scrapedAt']); $postingDateParsed = escapeData($conn, $data['postingDateParsed']); $description = escapeData($conn, $data['description']); $descriptionHTML = escapeData($conn, $data['descriptionHTML']); $externalApplyLink = escapeData($conn, $data['externalApplyLink']); $searchInputposition = escapeData($conn, $data['searchInput']['position']); $searchInputcountry = escapeData($conn, $data['searchInput']['country']); $companyInfoindeedUrl = escapeData($conn, $data['companyInfo']['indeedUrl']); $companyInfourl = escapeData($conn, $data['companyInfo']['url']); $companyInfocompanyDescription = escapeData($conn, $data['companyInfo']['companyDescription']); $companyInforating = escapeData($conn, $data['companyInfo']['rating']); $companyInforeviewCount = escapeData($conn, $data['companyInfo']['reviewCount']); $companyInfocompanyLogo = escapeData($conn, $data['companyInfo']['companyLogo']); // Affichez les valeurs échappées echo 'Valeurs échappées : ' . implode(', ', [$positionName, $salary, $jobType, $company, $location, $rating, $reviewsCount, $url, $id, $postedAt, $scrapedAt, $postingDateParsed, $description, $descriptionHTML, $externalApplyLink, $searchInputposition, $searchInputcountry, $companyInfoindeedUrl, $companyInfourl, $companyInfocompanyDescription, $companyInforating, $companyInforeviewCount, $companyInfocompanyLogo]); // Définissez le paramètre jobType1 sur NULL $stmt->bind_param('ssssssssssssssssssssssssssssss', $positionName, $salary, $jobType, $company, $location, $rating, $reviewsCount, $url, $id, $postedAt, $scrapedAt, $postingDateParsed, $description, $descriptionHTML, $externalApplyLink, $searchInputposition, $searchInputcountry, $companyInfoindeedUrl, $companyInfourl, $companyInfocompanyDescription, $companyInforating, $companyInforeviewCount, $companyInfocompanyLogo, $jobType1, $jobType2, $jobType3, $jobType4, $jobType5, $jobType6, $companyInforewordlyUrl); // Exécutez la requête SQL pour ajouter les données $stmt->execute(); } // Fermez la déclaration et la connexion à la base de données $stmt->close(); $conn->close(); echo 'Données importées avec succès !'; } else { echo 'Erreur lors du décryptage du fichier JSON.'; } } else { echo 'Erreur lors du téléchargement du fichier.'; } ?>

Re: Besoin d'aide mise à jour PHP de 7 vers 8.1, script ne fonctionne plus

Posté : 20 déc. 2023, 23:54
par two3d
Salut remy2906, bienvenue sur le forum !
Auriez vous une idée du soucis ?
L'erreur par d'elle même :

Fatal error: Uncaught TypeError: implode(): Argument #1 ($pieces) must be of type array, string given in /home/yehdjdnu/test/import.php:54 Stack trace: #0 /home/yehdjdnu/test/import.php(54): implode() #1 {main} thrown in /home/yehdjdnu/test/import.php on line 54


Si cette ligne est la 54 :

$jobType = escapeData($conn, implode(',', $data['jobType']));

L'erreur indique que $data['jobType'] doit être de type array et pas de type string.

Par contre, ce qui est étrange c'est que l'erreur indique "$pieces", qui n'est pas dans le code que tu as fourni.