PHP - Eliminar campos vacíos de un array en formulario.

 
Vista:
sin imagen de perfil

Eliminar campos vacíos de un array en formulario.

Publicado por pirate666 (7 intervenciones) el 30/03/2017 10:20:33
Buenos días!

antes de nada, soy Jose, soy nuevo en el foro y la verdad es que espero aprender mucho aquí. Estoy empezando con php y aún hay cosas que no tengo muy claras para lo que estoy haciendo ahora mismo, por lo que disculpad mi ignorancia si veis algún fallo garrafal:

Con php y html estoy haciendo una página que contiene un formulario, a través del cual se hace consultas a una base de datos en Firebird.

Tengo dos modelos:

- El primero, funciona correctamente, ya que sólo hace consultas de búsqueda y actualización de UN SÓLO registro cada vez:

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
<!--Por un lado tengo el formulario en html (pongo sólo el botón y la cabecera)-->:
<form name="formulario" id="formulario" method="post">
<tr><td>....</td></tr>
<input type="submit" name="btn1" value="Actualizar" /></form>
 
<!-- Y por otro lado (en la misma página) tengo el .php -->:
 
if (isset($_POST["btn1"])){
     $btn=$_POST["btn1"];
 
        if ($btn=="Actualizar"){
        $sqlStr= ' ';
 
         //Saco un nuevo array que omita los campos que se han quedado vacíos en el formulario.
          if (!empty($POST_){
          unset ($_POST['btn1']);
          for each ($_POST as $key => $value) {
                       if (trim($value) != '') {
                         $sqlArr[]="$key='$value'";
}}}
 
         //convierto array a string
        $sqlStr=implode(", ", $sqlArr);
 
       $sql = "update tabla set $sqlStr";

En definitiva, haciendo esto actualizo el registro sin problemas, ya que aunque los campos estén vacios, el string último elimina estos campos y así no los tendré en la consulta, quedándome el string del tipo ID='1', NOMBRE='2'....

- El segundo método es para hacer una búsqueda y que imprima más de un registro. Cada fila resultante tendrá al lado un botón "actualizar", el cual va a hacer un update de esa fila. El código que tengo es el siguiente:

listar.php:

//en php:
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
31
32
33
if (isset($_POST["btn1"])){
     $btn=$_POST["btn1"];
 
        if ($btn=="Buscar"){
 
   $sql="consulta sql"
 
<form name='ejecuta' action='ejecuta2.php' method='post'>
 
<tr>
<td>ID_AGENTE</td>
<td>ID_COLABORADOR</td>
<td>ID_PERSONA</td>
</tr>
 
$i=0;
 
    while ($resul=ibase_fetch_row($cs)){
   $var=$resul[0];
   $var1=$resul[1];
   $var2=$resul[2];
 
echo "<tr>
<td>
<input name='ID_AGENTE[$i]' value='".$var."' /></td>
<input name='ID_ COLABORADOR[$i]' value='".$var1."' /></td>
<input name='ID_PERSONA[$i]' value='".$var2."' /></td>
<td><input type="submit" name='seleccion[$i]' value='Actualizar'></td>
</tr>";
$i++;
}
echo "</table></form>;

Esto me funciona relativamente bien, ya que muestra bien el formulario y a la hora de hacer la búsqueda me muestra por pantalla todos los registros.

El problema viene al usar el submit con el nombre seleccion[$i] y value Actualizar.

He intentado basarme en el codigo php del primer modelo, haciendo esto:

ejecuta2.php:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
 
foreach ($_POST['seleccion'] as $indice => $valor){
//verificamos que se ha dado al boton actualizar.
$opcion=substr ($_POST['seleccion'][$indice],0,-1); //extraemos la parte de la cadena que será "Actualizar".
 
switch ($opcion) {
 
     case: "Actualizar":
 
          if (!empty($_POST)){
 
               if (trim($valor) != ''){
              $sqlArr[]="$indice='$valor'";}}
 
print_r $sqlArr;
 
     sql="$sql = "update tabla set $sqlStr";
    break;

?>


Seguramente haya algo mal al pasar mi código a este, pero en conclusión, lo que no sé es de qué forma eliminar campos vacíos en el array según el formulario que tengo en el segundo modelo para que al final tenga un string del tipo: ID='1', NOMBRE='JOSE'.

He intentado ponerlo de varias formas y siempre siempre siempre, al hacer el procedimiento de borrado con el array, siempre obtengo: 0='Actualizar'.

No salgo de ahí. Os agradecería enormemente una ayuda.

Gracias de antemano! Un saludo.
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 kip
Val: 2.325
Plata
Ha disminuido 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Eliminar campos vacíos de un array en formulario.

Publicado por kip (877 intervenciones) el 31/03/2017 03:25:29
Hola, lo que veo es que quieres actualizar basado es el registro localizado en una celda de la tabla no? Creo que para eso cada celda debera ser un formulario para que asi puedas hacerlo, intentalo asi:

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
31
if (isset($_POST["btn1"])){
     $btn=$_POST["btn1"];
 
        if ($btn=="Buscar"){
 
   $sql="consulta sql"
 
 
<tr>
<td>ID_AGENTE</td>
<td>ID_COLABORADOR</td>
<td>ID_PERSONA</td>
</tr>
 
$i=0;
 
    while ($resul=ibase_fetch_row($cs)){
   $var=$resul[0];
   $var1=$resul[1];
   $var2=$resul[2];
 
echo "<tr><form name='ejecuta' action='ejecuta2.php' method='post'>
<td>
<input name='ID_AGENTE' value='".$var."' /></td>
<input name='ID_ COLABORADOR' value='".$var1."' /></td>
<input name='ID_PERSONA' value='".$var2."' /></td>
<td><input type='submit' name='seleccion' value='Actualizar'></td>
</form></tr>";
$i++;
}
echo "</table>;

De esa forma editaras un registro y con el boton Actualizar localizado en la misma fila, aqui en el archivo PHP destino del formulario no es necesario hacer un for o foreach a la variable $_POST.

Ahora bien si lo que deseas es poder enviar todos los valores de la tabla para actualizarlos, no creo que sea necesario un boton en cada fila si no mas bien uno solo que sea el submit del formulario que tengas.

Dime entonces que necesitas ?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil

Eliminar campos vacíos de un array en formulario.

Publicado por pirate666 (7 intervenciones) el 31/03/2017 09:34:42
Buenos días @kip,

antes de nada, te agradezco enormemente tu ayuda.

He probado como me dices (si es que lo he entendido bien), he dejado el formulario así (quitando los [$i] de cada input), y luego he probado a quitar el foreach.

Te paso un pantallazo de lo que tengo para entenderlo mejor.

1

Lo que quiero es que al darle a actualizar, se actualicen los datos de esa fila y además, que si un campo de la fila se queda vacío, no se incluya en la consulta para no dar errores.

Con el cambio de ahora, cuando doy a actualizar a cualquier fila, siempre me recoge los datos de la misma. Haciendo un print_r ($_POST), todos los botones de actualizar me imprimen esto:

Array ( [ID_CONTRATO] => 2508 [ID_AGENTE] => 194 [ID_COLABORADOR] => [ID_TRADUCCION] => 1 [ID_ZONA] => 3 [FECHA] => 2017-02-24 [IMPORTE] => 200.00 [ORIGEN] => O [ANUO] => 2017 [COMENTARIO_AP_MAN] => [seleccion] => Actualizar )

Como digo, lo que quiero es sacar un array así, pero con los datos de la fila correspondiente a cada botón, y que si por ejemplo (en el array anterior), el campo de ID_COLABORADOR se queda vacío, que no lo recoja el array:

Array ( [ID_CONTRATO] => 2508 [ID_AGENTE] => 194 [ID_TRADUCCION] => 1 [ID_ZONA] => 3 [FECHA] => 2017-02-24 [IMPORTE] => 200.00 [ORIGEN] => O [ANUO] => 2017 [COMENTARIO_AP_MAN] => [seleccion] => Actualizar )

La verdad es que como estoy empezando con php y algunos conceptos no los tengo claros, estoy un poco estancado con esto.

De nuevo, muchísimas gracias!
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
sin imagen de perfil

Eliminar campos vacíos de un array en formulario.

Publicado por pirate666 (7 intervenciones) el 04/04/2017 11:08:00
Hola de nuevo,

dejo el código tal y como lo tengo ahora mismo. Como decía en el comentario anterior, la tabla gráfica que tengo es esa, y la intención es que al pulsar el botón Actualizar:

1. Actualice todos los campos de la base de datos modificados en esa fila de la tabla.
2. Si el campo está vacío, que no se actualice (para ello, lo que estoy intentando hacer -ya que es la única solución que ha llegado a funcionarme- es eliminar los campos vacíos del array final).

El código de mi fichero.php es el siguiente:

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
<?php
 
// Declaro variables (10 campos de la tabla).
 
$var="";
$var1="";
$var2="";
$var3="";
$var4="";
$var5="";
$var6="";
$var7="";
$var8="";
$var9="";
 
 
if(isset($_POST["btn1"])){
	$btn=$_POST["btn1"];
 
 
if($btn=="Buscar"){
 
		$sql="consulta sql";
		$cs = ibase_query($conexion, $sql);
 
 
		echo "<center>
		<table width='1300'>
		<form name='formulario' id='formulario' action='' method='post' autocomplete='off'>
		
		<tr>
		<td>BUSCAR ID_CONTRATO:</b>
		<input name='txtbus' size='5' maxlength='7' type='text' /><input type='submit' name='btn1'  value='Buscar'  />
		</tr>
		</form>
		
<tr>
<td id='uno'  align='center'><b>ID CONTRATO</b></td>

<td  id='uno' align='center'><b>ID AGENTE</b></td>

<td  id='uno' bgcolor='#ffffff' align='center'><b>ID COLABORADOR</b></td>

<td  id='uno' bgcolor='#ffffff' align='center'><b>ID TRADUCCIÓN</b></td>

<td id='uno' bgcolor='#ffffff' align='center'><b>ID ZONA</b></td>

<td  id='uno' bgcolor='#ffffff' align='center'><b>FECHA</b></td>

<td  id='uno' bgcolor='#ffffff' align='center'><b>IMPORTE</b></td>

<td  id='uno' bgcolor='#ffffff' align='center'><b>ORIGEN</b></td>

<td  id='uno' bgcolor='#ffffff' align='center'><b>AÑO</b></td>

<td  id='uno' bgcolor='#ffffff' align='center'><b>COMENTARIO</b></td>

<td  id='uno' bgcolor='#ffffff' align='center'><b>ACCIÓN</b></td>
<tr>";
 
$i=0;
		while($resul=ibase_fetch_row($cs)){
			$var=$resul[0];
			$var1=$resul[1];
			$var2=$resul[2];
			$var3=$resul[3];
			$var4=$resul[4];
			$var5=$resul[5];
			$var6=$resul[6];
			$var7=$resul[7];
			$var8=$resul[8];
 
			$var9=$resul[9];
			echo "<tr><form name='ejecuta' action='ejecuta2.php' method='post' autocomplete='off'>
			<td><input type='hidden' size='8' name='ID_CONTRATO' value='".$var."' />".$var."</td>
			<td><input type='text' size='6' name='ID_AGENTE' value='".$var1."' /></td>
			<td><input type='text' size='13' name='ID_COLABORADOR' value='".$var2."' /></td>
			<td><input type='text' size ='10' name='ID_TRADUCCION' value='".$var3."' /></td>
			<td><input type='text' size='3' name='ID_ZONA' value='".$var4."' /></td>
			<td><input type='text' size='8' name='FECHA' value='".$var5."' /></td>
			<td><input type='text' size ='5' name='IMPORTE' value='".$var6."' /></td>
			<td><input type='text' size='1' name='ORIGEN' value='".$var7."' /></td>
			<td><input type='text' size='2' name='ANUO' value='".$var8."' /></td>
			<td><input type='text' size='15' name='COMENTARIO_AP_MAN' value='".$var9."' /></td>
			<td><input type='submit' name='seleccion' value='Actualizar'></td>
			</tr>";$i++;
 
 
	}
	echo "</table></center></form>";
 
	}
 
?>

Por otro lado, el archivo ejecuta2.php lo tengo así ahora mismo:

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
 
if(isset($_POST["seleccion"])){
	$btn=$_POST["seleccion"];
 
if($btn=="Actualizar"){
 
print_r ($_POST);
 
 
}}
 
?>

Tengo tal lío, que no sé por dónde tirar con el archivo ejecuta2.php. Con el print_r compruebo el array que me tira siempre al darle a actualizar en CUALQUIER fila, que es este:

Array ( [ID_CONTRATO] => 2508 [ID_AGENTE] => 194 [ID_COLABORADOR] => [ID_TRADUCCION] => 1 [ID_ZONA] => 3 [FECHA] => 2017-02-24 [IMPORTE] => 200.00 [ORIGEN] => O [ANUO] => 2017 [COMENTARIO_AP_MAN] => [seleccion] => Actualizar )

Por lo tanto:

1. Quiero que me imprima sólo los datos de la fila del bóton "Actualizar" al que le de.
2. Quiero que, si el campo está vacio, en el array se omita, de manera que si el campo ID_AGENTE, ID_COLABORADOR y COMENTARIO_AP_MAN están en blanco, el array sea:

Array ( [ID_CONTRATO] => 2508 [ID_TRADUCCION] => 1 [ID_ZONA] => 3 [FECHA] => 2017-02-24 [IMPORTE] => 200.00 [ORIGEN] => O [ANUO] => 2017 [seleccion] => Actualizar )

-------------

He de decir, que googleando encontré un código para el ejecuta2.php, pero he probado tantas cosas que ya no sé por qué dejé de tirar por ahí.

Antes de descartarlo, el código era este:

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
31
<?php
 
foreach ($_POST['seleccion'] as $indice => $valor){
//Vamos a verificar que trae la opción de actualizar
$opcion = substr ($_POST['seleccion'][$indice],0,-1); //extraemos la parte de la cadena que actualiza
//echo $opcion;
switch($opcion){
//generamos la sentencia para la modificación filtrando por el id para que solo cambie ese registro
	case 'Actualizar':
	$sql="UPDATE ventas_2 SET
						  ID_AGENTE='".$_POST['ID_AGENTE'][$indice]."',
						  ID_COLABORADOR='".$_POST['ID_COLABORADOR'][$indice]."',
						  ID_TRADUCCION='".$_POST['ID_TRADUCCION'][$indice]."',
						  ID_ZONA='".$_POST['ID_ZONA'][$indice]."',
						  FECHA='".$_POST['FECHA'][$indice]."',
						  IMPORTE='".$_POST['IMPORTE'][$indice]."',
						  ORIGEN='".$_POST['ORIGEN'][$indice]."',
						  ANUO='".$_POST['ANUO'][$indice]."',
						  COMENTARIO_AP_MAN='".$_POST['COMENTARIO_AP_MAN'][$indice]."'
						  WHERE ID_CONTRATO=".$_POST['ID_CONTRATO'][$indice]
						  ;break;
						  default: echo "<center>NO HAY NADA SELECCIONADO</center>";break;
 
 
}
 
$resultado = ibase_query($conexion, $sql);
 
}
}
?>

Perdonad mi ignorancia pero creo que me he metido en algo demasiado complejo para mis conocimientos de php >.<.

MUCHISIMAS gracias de antemano, Un saludo.
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
sin imagen de perfil

Eliminar campos vacíos de un array en formulario.

Publicado por pirate666 (7 intervenciones) el 06/04/2017 10:43:41
Hola de nuevo,

he seguido dando vueltas a tu solución, kip, y tras hacerlo tranquilamente he conseguido hacerlo de la forma en la que me decías.

De nuevo, muchas gracias. Podéis dar el tema por solucionado.

Un saludo.
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