Erreur Undefined offset: 2 [PHP]

Résolu/Fermé
Thibaut - 21 janv. 2022 à 10:09
 Thibaut - 21 janv. 2022 à 15:52
Bonjour,
Je fais un script pour importer du contenu csv dans une base de donnée.
Lorsque j'affiche ma varible $getData tout est parfait j'ai bien :

Array
(
[0] -> 1ère donnée
[1] -> 2 ème donnée
[2] -> 3 ème donnée
)

Mais lorsque je veux lancer ma requête, j'ai des erreurs Undefined offset: 1 et Undefined offset: 2.
Pourtant, certaines données passent (ma 13ᵉ ligne dans le csv par exemple passe niquel et 2-3 autres, mais le reste ce met en erreur)

Voici mon code :



$file = fopen('test2.csv', "r");
while (($getData = fgetcsv($file, 0 , ";")) !== FALSE)
{

$sql = "INSERT into matable (colone1,colone2,colone3,colone4,colone5)
values ('".$i."','".$y."','".$getData[0]."','".$getData[1]."','".$getData[2]."')";
$result = mysqli_query($con, $sql);
}
fclose($file);



Pour précision dans ma requête :
$i=1 et $y=2
$getData[0] est un titre
$getData[1] est une description (très longue pour la plupart des lignes)
$getData[2] un autre titre

La base de donnée dans laquelle je souhaite insérer ma requête est celle d'un prestashop gérée par phpmyadmin.

Quelqu'un pourrait m'aiguiller sur l'origine du problème ?

Merci d'avance.

Configuration: Windows / Chrome 97.0.4692.99
A voir également:

4 réponses

jordane45 Messages postés 38347 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 décembre 2024 4 719
21 janv. 2022 à 11:18
Bonjour
Tu as certainement des retours à la ligne dans ton csv (dans les commentaires)
Ce qui fausse la lecture du csv dans ta boucle.

1
Si c'était le cas les retours à la ligne fausserait la lecture aussi quand je fais un print_r de ma variable $getData ? Parce que en l'occurrence quand je l'affiche tout est bon...

J'ai vu qu'on pouvait échapper certains caractères dans le fgetcsv,
Tu penses que c'est possible d'échapper les retours à la ligne pour faire un test ?
0
jordane45 Messages postés 38347 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 décembre 2024 4 719
21 janv. 2022 à 13:14
Il existe différents types de caractères de retours à la ligne... \n \r\n ... qui sont des caractères "invisibles" et qui ne sont pas interprétés par le html ... et donc par le print_r
0
J'ai rajouté :


$order = array("\r\n", "\n", "\r");
$replace = '<br />';
$newstr = str_replace($order, $replace, $getData[1]);


9 requêtes sur 96 sont bien passée, mais les autres refusent toujours....
0
jordane45 Messages postés 38347 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 décembre 2024 4 719
21 janv. 2022 à 15:35
Ce n'est pas au moment de lire les $getData qu'il faut le faire ... mais AVANT de lire le csv.

En gros, il faut ouvrir le csv (depuis ton script php bien sûr)
1- remplacer les \r\n par un autre caractère ( par exemple µ )
2- remplacer ensuite les \n par un espace
3- Remplacer le µ par des \r\n

Ainsi tu conserves les retours à la ligne de fin de ligne .. mais tu supprimes ceux qui se trouveraient dans les champs de ton csv..

Et une fois que ça sera fait, tu pourras alors utiliser ton script actuel pour parser le csv correctement.

.
0
Merci pour ton aide j'ai finalement réussi ce que tu m'as dit plus remplacer les cotes que j'avais oublié et tout à marché
0