PHP - PHP Pasar datos $_POST vacios como nulos en un array

 
Vista:

PHP Pasar datos $_POST vacios como nulos en un array

Publicado por Enrique (2 intervenciones) el 17/10/2018 13:19:49
Hola chicos, tengo un problema: Tengo una Base de Datos que se actualiza a través de un formulario, los datos son pasados por el método POST a un controlador que los almacena en un array y los pasa a un modelo que actualiza la base de Datos.

El problema radica en que si el usuario no llena algunos de los campos (y muchas veces no necesita llenarlos todos) , los campos vacíos sobrescriben sobre el contenido y me los deja en blanco, lo que quisiera es que los campos que vengan en blanco desde POST pasen como nulos para que no borren la información existente y sólo se actualicen los campos que tengan contenido.

He realizado una prueba con la condicionante "if" y me funcionó pero sólo con un campo, no sé como plantearlo para que evalúe todos los datos POST y convierta en nulos todos los que vengan vacíos y a su vez actualice los que vengan con información.

Lo que planteé en principio fue lo siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public function ctrActualizarContenido(){
 
if ($_POST["titular_cabecera"] == "") {
    $_POST["titular_cabecera"] = null;
}else{
 
$datos = array("titular_cabecera"=>$_POST["titular_cabecera"],
    "texto_cabecera"=>$_POST["texto_cabecera"],
    "fecha_video"=>$_POST["fecha_video"],
    "titular_del_video"=>$_POST["titular_del_video"],
    "texto_del_video"=>$_POST["texto_del_video"],
    "titular_banner"=>$_POST["titular_banner"],
    "texto_banner"=>$_POST["texto_banner"],
    "titular_empresa"=>$_POST["titular_empresa"],
    "texto_empresa"=>$_POST["texto_empresa"]
);

Pero en este planteamiento sólo está incluida la primera entrada del POST y yo necesito que evalúe cada una y las vacías las pase como nulas.

¡¡Espero puedan ayudarme!!

¡Gracias de Antemano! : )
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 Mauro
Val: 2.761
Oro
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

PHP Pasar datos $_POST vacios como nulos en un array

Publicado por Mauro (1034 intervenciones) el 18/10/2018 01:11:36
¿Estás seguro de que asignando null vas a evitar que se sobre-escriba? Habría que ver el código del controlador, porque podría ser que en lugar de string vacíos deje nulos... dudo que sea lo que quieras...

En todo caso, podrías usar algo como:

1
2
3
4
5
foreach ( $_POST as $k => $v ) {
   if ( $v == "" ) {
      $_POST[$k] = null;
   }
}

O, si quieres algo más cool:

1
2
3
4
5
array_walk( $_POST, function( $v, $k ) {
   if ( $v == "" ) {
      $v = null;
   }
} );
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

PHP Pasar datos $_POST vacios como nulos en un array

Publicado por Enrique (2 intervenciones) el 19/10/2018 13:04:27
Muchísimas gracias por tu respuesta, en realidad los había puesto como nulos pensando que así no sobre escribiría los campos de la base de datos lo cual es en realidad mi objetivo (que los campos que vienen vacíos desde el formulario no afecten lo ya contenido en la tabla). los campos que tiene el formulario y que pasan a través del controlador son 9, éste es el código del controlador:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class ControladorContenido{
 
	public function ctrActualizarContenido(){
 
		$tabla = "micrositio_01";
 
		$datos = array("titular_cabecera"=>$_POST["titular_cabecera"],
            "texto_cabecera"=>$_POST["texto_cabecera"],
            "fecha_video"=>$_POST["fecha_video"],
            "titular_del_video"=>$_POST["titular_del_video"],
            "texto_del_video"=>$_POST["texto_del_video"],
            "titular_banner"=>$_POST["titular_banner"],
            "texto_banner"=>$_POST["texto_banner"],
            "titular_empresa"=>$_POST["titular_empresa"],
            "texto_empresa"=>$_POST["texto_empresa"]
            );
 
        $respuesta = ModeloContenido::mdlActualizarContenido($tabla, $datos);
    }
}

Me parece excelente usar el array_walk para recorrer los valores, sólo que respecto a lo que comentas líneas arriba ya no sé si el null sea la mejor opción (¿qué me recomendarías usar en su lugar? :D ), y para aplicar el array_walk ¿qué tendía que especificar como clave e índice?

Perdón por tanta pregunta, no tengo demasiado tiempo usando PHP pero es un lenguaje que me encanta. Te agradezco de antemano tu ayuda. : )
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

PHP Pasar datos $_POST vacios como nulos en un array

Publicado por Mauro (1034 intervenciones) el 19/10/2018 17:37:52
Ante todo, te dejo este video:
que te puede servir para entender mejor el tema de PHP Funcional.

Respecto de tu pregunta sobre el uso del null, todo depende de lo que haga ModeloContenido::mdlActualizarContenido (básicamente de cómo arme el SQL).

Yo haría que el SQL se forme con los contenidos del array (en caso de no querer que un campo sea afectado bastaría con sacarlo del array), de otro modo veo difícil que puedas asignar null a la base de datos en caso de ser realmente necesario...

Igual, mi mejor consejo es que aprendas a manejarte con algún framework (Si es symfony mejor :)
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