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:
Código :
<!--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 con los campos vacíos del formulario eliminados. 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 se me queda tal y como quiero (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:
if (isset($_POST["btn1"])){
$btn=$_POST["btn1"];
if ($btn=="Buscar"){
$sql="consulta sql"
Código :
<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:
Código :
<?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.