Error Undefined offset: 2 [PHP]

Resuelto
Thibaut -  
 Thibaut -
Hola,
Estoy haciendo un script para importar contenido CSV a una base de datos.
Cuando muestro mi variable $getData todo está perfecto, tengo:

Array
(
[0] -> 1ª dato
[1] -> 2ª dato
[2] -> 3er dato
)

Pero cuando intento ejecutar mi consulta, tengo errores Undefined offset: 1 y Undefined offset: 2.
Sin embargo, algunos datos pasan (mi 13ª fila del CSV por ejemplo pasa niquel y 2-3 más, pero el resto da error)

Aquí mi código :



$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

4 respuestas

  1. jordane45 Mensajes publicados 30427 Fecha de registro   Estado Moderador Última intervención   4 832
     
    Hola
    Ciertamente tienes saltos de línea en tu CSV (en los comentarios)
    Lo cual arruina la lectura del CSV en tu bucle.

    --
    .
    Atentamente,
    Jordane
    1
  2. Thibaut
     
    Si fuera así, ¿las saltos de línea también estropearían la lectura cuando hago un print_r de mi variable $getData? Porque en ese caso cuando la muestro todo está bien...

    He visto que se pueden escapar ciertos caracteres en fgetcsv,
    ¿Crees que es posible escapar los saltos de línea para hacer una prueba?
    0
    1. jordane45 Mensajes publicados 30427 Fecha de registro   Estado Moderador Última intervención   4 832
       
      Existen diferentes tipos de caracteres de salto de línea... \n \r\n ... que son caracteres "invisibles" y que no son interpretados por el HTML ... y por lo tanto por el print_r
      0
  3. Thibaut
     
    He añadido:


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


    9 solicitudes de 96 pasan correctamente, pero las demás siguen rechazándose....
    0
    1. jordane45 Mensajes publicados 30427 Fecha de registro   Estado Moderador Última intervención   4 832
       
      No es al leer los datos obtener (getData) lo que hay que hacer... sino ANTES de leer el CSV.

      En resumen, hay que abrir el CSV (desde tu script PHP, por supuesto)
      1- reemplazar los \r\n por otro carácter (por ejemplo µ)
      2- luego reemplazar los \n por un espacio
      3- Reemplazar µ por \r\n

      Así conservarás los saltos de línea de fin de línea.. pero suprimirás aquellos que podrían estar dentro de los campos de tu CSV..

      Y una vez que ello esté hecho, podrás entonces usar tu script actual para analizar (parse) el CSV correctamente.

      .
      0
  4. Thibaut
     
    Gracias por tu ayuda, al final logré lo que me dijiste, además de reemplazar las comillas que había olvidado y todo funcionó.
    0