Erreur Undefined offset: 2 [PHP]
Résolu
Thibaut
-
Thibaut -
Thibaut -
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 :
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.
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:
- Undefined offset: 2
- Supercopier 2 - Télécharger - Gestion de fichiers
- 2 ecran pc - Guide
- Faire 2 colonnes sur word - Guide
- Whatsapp 2 - Guide
- Gta 6 trailer 2 - Guide
4 réponses
Bonjour
Tu as certainement des retours à la ligne dans ton csv (dans les commentaires)
Ce qui fausse la lecture du csv dans ta boucle.
Tu as certainement des retours à la ligne dans ton csv (dans les commentaires)
Ce qui fausse la lecture du csv dans ta boucle.
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 ?
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 ?
J'ai rajouté :
9 requêtes sur 96 sont bien passée, mais les autres refusent toujours....
$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....
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.
.
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.
.