PHP - Insertar nueva fila en csv mediante php

 
Vista:

Insertar nueva fila en csv mediante php

Publicado por sam (185 intervenciones) el 07/05/2019 19:16:25
Hola amigas/os a ver si me pueden ayudar con esto.

Tengo un cogido que me inserta una fila en un archivo csv mediante php.

El problema es que no se como hacer para que me siga insertando en una segunda fila

mas abajo, es decir todo el contenido me lo pone en celdas de una misma fila. segun lo que veo en excel.

Lo que necesito es que cada cuatro datos metidos en cada fila me haga un salto

y en una segunda fila meta otros 4 datos mas y asi en adelante.

Miren este es mi codigo:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
$fila = fopen("php://output","w");
 
foreach ($array_csv as $array_datos_usuarios)
{
    foreach ($array_datos_usuarios as $dato_usuario)
    {
        //fwrite($file,"\r\n");
 
        fputcsv($fila, $dato_usuario);
    }
 
}
 
fclose($fila);

Gracias de ante mano
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Kathyu
Val: 1.802
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Insertar nueva fila en csv mediante php

Publicado por Kathyu (905 intervenciones) el 07/05/2019 19:51:31
Que librería esta usando?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Insertar nueva fila en csv mediante php

Publicado por Sam (185 intervenciones) el 07/05/2019 20:25:29
Que yo sepa ninguna librería. Si debiera usar alguna dígame lo. Es más a mi me funciona el código este. Lo que no me funciona es que me cree una segunda fila cada 4 datos en cada una
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de joel
Val: 3.828
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Insertar nueva fila en csv mediante php

Publicado por joel (1269 intervenciones) el 07/05/2019 21:33:38
Hola Sam, tienes que abrir el archivo para añadir al final del mismo, por lo que en vez de utilizar la "w" tienes que utilizar la "a"
https://www.php.net/manual/en/function.fopen.php

Tienes que indicar un nombre de archivo valido para poder guardar la información... con php://output se enviara lo que se intenta guardar al navegador.

Espero que te ayude.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Insertar nueva fila en csv mediante php

Publicado por Sam (185 intervenciones) el 07/05/2019 23:26:30
Te refieres a esto:
1
2
3
4
5
6
7
8
$fila = fopen("php://output","a");
 
foreach ($array_csv as $array_datos_usuarios)
{
    foreach ($array_datos_usuarios as $dato_usuario)
    {
        fputcsv($fila, $dato_usuario, "\r\n" );
    }


Sería eso?
Pero aún estando bien esto que acabo de poner, y que lo dudo que este bien, aun asi la nueva fila debe añadirse cada 4 caracteres y no se como hacerlo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de joel
Val: 3.828
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Insertar nueva fila en csv mediante php

Publicado por joel (1269 intervenciones) el 08/05/2019 07:40:10
Hola Sam, haber para utilizar fputcsv(), tienes que pasarle un array de valores, no una cadena!!!
https://www.php.net/manual/en/function.fputcsv.php

No se muy bien a que te refieres con 4 caracteres, ni que valor tiene $array_csv, por lo que se hace un poco difícil ayudarte.

Podrias mostrar el contenido de la variable $array_csv, y decir que resultado quieres en el archivo?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Insertar nueva fila en csv mediante php

Publicado por Sam (185 intervenciones) el 08/05/2019 08:28:42
Joel, evidentemente se que para uar fputcsv tengo que pasarle una array de valores y no una cadena.

es por ello que uso foreach para recorrer el array llamado $array_csv.

Como puedes ver hay dos foreach anidados es debido a que $array_csvy es un array que contiene arrays dentro de el.

Y una vez que estos 2 arrays anidados van mostrando resultados , deberia ponerme 4 resultados por fila en un excel y todo me sale en la misma fila.

Un ejemplo de lo que me deberia salir y no me sale (que se vean 4 resultados por fila):

platano, pera, melon, sandia

piña, ciruela, manzana, melogoton,


Un ejemplo de lo que me sale y esta mal (me salen todos los resultados en una sola fila):

platano, pera, melon, sandia, piña, ciruela, manzana, melogoton,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Joan
Val: 180
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Insertar nueva fila en csv mediante php

Publicado por Joan (21 intervenciones) el 08/05/2019 10:11:40
Entiendo sam... si, si, he visto los bucles foreach... pero como no sabemos que es $array_csv por eso lo comento.

entonces, si $dato_usuario es un array, no puedes concatenarle un salto de linea ("\r\n") a un array y pasarlo a la función fputcsv() como si fuera una cadena!!!
fputcsv() ya genera un salto de linea al final de cada insert!!!

Creo que tu problema esta en que estas utilizando php://output, que al mostrarlo en un navegador, nunca veras el salto de linea.... ya te lo comente en un mensaje anterior.

Repito: Podrías mostrar el contenido de la variable $array_csv?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Insertar nueva fila en csv mediante php

Publicado por Sam (185 intervenciones) el 08/05/2019 10:59:14
Atendiendo a lo que me dices de poner todo el codigo, lo que tengo es lo siguiente:

archivo A:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$array_todos_usuarios = array();
 
while($fila = mysqli_fetch_assoc($todos_usuarios))
{
    $nombre_usuario = $fila['nombre_usuario'];
 
    $apellidos_usuario = $fila['apellidos_usuario'];
 
    $dni_usuario = $fila['dni_usuario'];
 
    $movil_usuario = $fila['movil_usuario'];
 
    array_push($array_todos_usuarios, $nombre_usuario, $apellidos_usuario, $dni_usuario, $movil_usuario);
}
 
 
<form class="formulario_todos_los_usuarios_listados" action="secciones/buscador_clientes_ajax/descargar_usuarios_listados_csv.php" method="post">
 
    <input type="hidden" name="array_todos_usuarios" value='<?php echo serialize($array_todos_usuarios); ?>'>
 
</form>


Archivo B:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
if($_POST['array_todos_usuarios'])
{
    $array_datos_usuarios = unserialize($_POST['array_todos_usuarios']);
}
 
 
$array_contenedor_arrays = array ();
array_push($array_contenedor_arrays, $array_datos_usuarios);
 
 
$array_csv = array ();
array_push($array_csv, $array_contenedor_arrays);
 
 
$fila = fopen("php://output","w");
 
 
foreach ($array_csv as $array_datos_usuarios)
{
    foreach ($array_datos_usuarios as $dato_usuario)
    {
        //fwrite($fila,"\r\n");
 
        fputcsv($fila, $dato_usuario);
    }
}
 
 
fclose($fila);



Aclaración lo de $fila = fopen("php://output","w"); es debido a que tengo que exportar en csv e importar el resultado en excel. y

ahí es donde veo que sale todo en una sola linea en vez de 4 valores en cada linea
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Mauro
Val: 2.761
Oro
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Insertar nueva fila en csv mediante php

Publicado por Mauro (1036 intervenciones) el 08/05/2019 16:25:25
Si lo que tienes que hacer es exportar hacia Excel, te recomiendo que uses la librería PhpSpreadsheet.

El comenario de Joan es importante:

"Creo que tu problema esta en que estas utilizando php://output, que al mostrarlo en un navegador, nunca veras el salto de linea...."

¿Por qué usas php://output en lugar de un nombre de archivo específico?

Si lo que quieres es que el archivo resultante sea descargable lo que debes hacer es usar un header tipo:

1
2
3
4
header('Content-Type: application/csv');
header('Content-Disposition: attachment; filename=example.csv');
header('Pragma: no-cache');
readfile("/path/to/yourfile.csv");
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Insertar nueva fila en csv mediante php

Publicado por Sam (185 intervenciones) el 09/05/2019 12:27:32
Comunidad, ante todo muchas gracias por vuestra ayuda y orientaciones para resolver esto.

Aqui comparto la solucion al problema que finalmente yo he encontrado:

(Si alguien puede mejorarlo adelante y que lo aporte tambien :-))

Un saludo

Archivo 1:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
$array_todos_usuarios_titulo = array();
 
$array_todos_usuarios = array();
 
 
while($fila = mysqli_fetch_assoc($todos_usuarios))
{
    $nombre_usuario = $fila['nombre_usuario'];
 
    $apellidos_usuario = $fila['apellidos_usuario'];
 
    $dni_usuario = $fila['dni_usuario'];
 
    $movil_usuario = $fila['movil_usuario'];
 
    array_push($array_todos_usuarios, array($nombre_usuario, $apellidos_usuario, $dni_usuario, $movil_usuario));
}
 
array_push($array_todos_usuarios_titulo, array('Nombre','apellidos','DNI','Móvil'));
 
 
<form class="formulario_todos_los_usuarios_listados" action="secciones/buscador_clientes_ajax/descargar_usuarios_listados_csv.php" method="post">
 
    <input type="hidden" name="Datos_usuarios_segun_rol" value='Descargar_todos_los_usuarios_listados'>
 
    <input type="hidden" name="array_todos_usuarios_titulo" value='<?php echo serialize($array_todos_usuarios_titulo); ?>'>
 
    <input type="hidden" name="array_todos_usuarios" value='<?php echo serialize($array_todos_usuarios); ?>'>
 
</form>


Archivo 2:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
header('Content-type: text/csv');
header('Content-Disposition: attachment; filename="'.$_POST["Datos_usuarios_segun_rol"].'.csv"');
 
 
// do not cache the file
header('Pragma: no-cache');
header('Expires: 0');
 
$array_datos_usuarios_titulo = unserialize($_POST['array_todos_usuarios_titulo']);
 
if($_POST['array_todos_usuarios'])
{
    $array_datos_usuarios = unserialize($_POST['array_todos_usuarios']);
}
 
 
$fila = fopen("php://output","w");
 
foreach ($array_datos_usuarios_titulo as $titulo)
{
    fputcsv($fila, $titulo);
}
 
foreach ($array_datos_usuarios as $dato_usuario)
{
    fputcsv($fila, $dato_usuario);
}
 
fclose($fila);
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar