Foros del Web » Programando para Internet » PHP »

Actualizar datos BD por formulario

Estas en el tema de Actualizar datos BD por formulario en el foro de PHP en Foros del Web. Hola! Tengo un formulario q me muestra la iinformación guardada en los campos de mi BD.. ahora quiero q al cambiar alguna de esa información ...
  #1 (permalink)  
Antiguo 06/02/2006, 08:31
 
Fecha de Ingreso: diciembre-2005
Ubicación: colombia
Mensajes: 24
Antigüedad: 12 años
Puntos: 0
Actualizar datos BD por formulario

Hola!
Tengo un formulario q me muestra la iinformación guardada en los campos de mi BD.. ahora quiero q al cambiar alguna de esa información y oprimir el botón actualizar, se guarde en la bD y se reescriban los datos guardados.. de esa forma sería un formulario de actualización...
El problema es q no me guarda.. y me dice q la variable de buscar y actualizar son desconocidas... no sé qué pasa..
??????????
El código es el sgte:
Código PHP:
if ($HTTP_POST_VARS) 
{     
    foreach($_POST as $varName => $value) 
    {         
        trim($value); 
    } 
    if ($buscar)  
    { 
        $consulta = "SELECT * FROM persona, ayuda_urgencia WHERE identificacion LIKE '%$buscar%'"; 
        $resultado = mysql_query($consulta, $conexion); 
        $fila = mysql_fetch_array ($resultado); 
        if ($fila) 
        {         
                         
        // SI PRESIONA ACTUALIZAR (GUARDA INFORMACIÓN ADICIONAL, ACTUALIZAR  
        if ($actualizar)  
        {                 
            $resultado1=mysql_query("SELECT * FROM persona, ayuda_urgencia WHERE identificacion='$identificacion' AND  PERSONA_identificacion='$identificacion'",$conexion); 
            if(mysql_fetch_array($resultado1)) 
                { 
                    $fechaN = explode('-', $fecha_naci); 
                    $ordenN = array_reverse($fechaN); 
                    $nueva_fechaN = implode('-', $ordenN); 

                    $fechaL = explode('-', $llegada_muni); 
                    $ordenL = array_reverse($fechaL); 
                    $nueva_fechaL = implode('-', $ordenL); 

                    $fechaT = explode('-', $taller_1vez); 
                    $ordenT = array_reverse($fechaT); 
                    $nueva_fechaT = implode('-', $ordenT); 

                    $actualizar="UPDATE persona P, ayuda_urgencia U SET P.identificacion='$identificacion', P.tipo_doc='$tipo_doc', P.nombre='$nombre', P.apellidos='$apellidos', P.fecha_naci='$fecha_naci', P.sexo='$sexo', P.no_libreta='$no_libreta', P.gestante='$gestante', P.lactante='$lactante', P.departamento='$departamento', P.municipio='$municipio', U.PERSONA_identificacion='$identificacion', U.fecha_entrega_ayudaU='$fecha_entrega_ayudaU'"; 
                    mysql_query($actualizar,$conexion);     
                    $error1=mysql_error(); 
                    if (!mysql_error())  
                    { 
                        include ("registroOK.php"); 
                        echo "Actualización OK";                 
                    }else 
                    { 
                        //include ("error_ingresar.php"); 
                        echo $error1; 
                        echo "Error en Actualización"; 
                    } 
                }                 
            }         
                         
            ?> 
            <td width='85%'align='middle'  height='90%' valign='top'> 
                <table width='100%' border='0' cellspacing='0' cellpadding='2'> 
                <font face="Tw Cen MT Condensed Extra Bold" color='#000000' size="3"> 
            <FORM name='ActPersona' METHOD='POST' action='<?$_SERVER['PHP_SELF']?>'> 
                <table border=4 BGCOLOR='#DBEAF5'> 
                <TD></TD><tr><td> <U> <B><font face="Tw Cen MT Condensed " color="#000000" size="4">DATOS GENERALES</B></U></TD></TR>   
                <tr><td> Identificacion</TD><TD><INPUT TYPE='TEXT' NAME='identificacion' SIZE=15 value= <? echo $buscar;?>
                <td>Tipo Documento<td><select NAME='tipo_doc' value=<? echo $fila['tipo_doc']?>> <option value=CC>CC</option> <option value=TI>TI</option> <option value=Registro Civil>Registro Civil</option> <option value=Libreta Militar>Libreta Militar</option><option value=Sin Documento>Sin Documento</option></tr> 
                <tr><td> Nombre</TD><TD><INPUT TYPE='TEXT' NAME='nombre' SIZE=30 value= <? echo $fila['nombre'];?>> </tr> 
                <tr><td> Apellidos</TD><TD><INPUT TYPE='TEXT' NAME='apellidos' SIZE=45 value= <? echo $fila['apellidos'];?>
                <td> Fecha de Nacimiento</TD><TD><INPUT TYPE='TEXT' NAME="fecha_naci" SIZE=8 value=<? echo $fila['fecha_naci'];?>> </TR> 
                         
                <tr><td>Sexo<td><select NAME='sexo' value=<? echo $fila['sexo'];?> > <option value=Femenino>Femenino</option> <option value=Masculino>Masculino</option> 
                <td> Libreta Militar</TD><TD><INPUT TYPE='TEXT' NAME='no_libreta' SIZE=10 value= <? echo $fila['no_libreta'];?>></TR> 
                <tr><td>Gestante<td><select NAME='gestante' value= <? echo $fila['gestante'];?>><option ></option><option value=Si>Si</option> <option value=No>No</option> 
                <td>Lactante<td><select NAME='lactante' value=<? echo $fila['lactante'];?>> <option ></option><option value=Si>Si</option> <option value=No>No</option></tr> 
                <tr><td>Dpto. Procedencia<td><select NAME='departamento' value=<? echo $fila['departamento'];?>> <option ></option> <option value=ANTIOQUIA>ANTIOQUIA</option> <option value=ATLANTICO>ATLANTICO</option> </tr> 
                <td> Municipio</TD><TD><INPUT TYPE='TEXT' NAME='municipio' SIZE=35 value=<? echo $fila['municipio'];?>></TR>                         
                                <tr><td>Fecha Entrega <TD><INPUT TYPE='TEXT' NAME='fecha_entrega_ayudaU' SIZE=8 value=<? echo $fila['fecha_entrega_ayudaU'];?>> <a href="javascript:cal4.popup();"> <img src="IMG/cal.gif" width="14" height="14" border="0" alt="Click Aquí para escoger la fecha"></a>   
                <td>Entidad Operadora</TD><td> <INPUT TYPE='TEXT' NAME="entidad_urgencia" SIZE=30 value=""> </TR>                             
</FORM>  
</TD> 
<? 
}else 
{                 
    echo 
'<script>alert("No Existe");</script>'
    } 

    echo 
"<p><a href=ActPersona.php>Volver</p> \n";  
    echo 
"</TBODY></TABLE> \n";  

}else 

    
?> 
    </TD> 
    <td width='85%'align='middle'  height='90%' valign='top'> 
        <table width='100%' border='0' cellspacing='0' cellpadding='2'> 
        <font face="Tw Cen MT Condensed Extra Bold" color='#000000' size="3"> 
        <body> 
        <form name='buscar' method= "POST" action='<?$_SERVER['PHP_SELF']?>'> 
        <strong>Ingrese Identificación:</strong> 
        <input type="text" name="buscar" size="20"> 
        <input type="submit" value="Buscar"> 
        </form> 
    <?php  

?>
Otro problema es q en los campos tipo SELECT, no me muestra el valor q está guardado en la BD.. como en los campos TEXT, a pesar de tener la misma instrucción...

ALGUIEN ME PUEDE AYUDAR??
  #2 (permalink)  
Antiguo 06/02/2006, 08:32
 
Fecha de Ingreso: diciembre-2005
Ubicación: colombia
Mensajes: 24
Antigüedad: 12 años
Puntos: 0
Es Muy Importante Su Ayuda!!!
  #3 (permalink)  
Antiguo 06/02/2006, 08:36
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Es más importante que pongas el código completo en su contexto que uses (si es ese que pusistes OK) .. y que No intentes interpretar los mensajes de error que obtengas, indica textualmente ese mensaje y si aparencen líneas que hagan referencia a cierto código .. indica a qué línea pertenence.

Yo lo único que veo a simple vista es que tienes un "cacao" (lio) de uso de variables externas de PHP .. Por un lado usas $HTTP_POST_VARS y por otro usas $_POST o peor accedes a la variable de forma global ($buscar, $actualizar por ejemplo).

Por si acaso:

foreach($_POST as $varName => $value)
{
trim($value);
}

ese código no hace nada realmente .. ni "globaliza" tus variables (sería mejor usar un extract() ) ni tan siquiera aplicar el "trim()" a todas las variables .. por qué no las vuelves a asignar de donde vienen ($_POST[$varName] = trim($value); sería lo correcto, para luego acceder a su $_POST['nombre_variable'] o bien aplicar el extract() en ese punto ..)

Un saludo,
  #4 (permalink)  
Antiguo 06/02/2006, 08:43
 
Fecha de Ingreso: diciembre-2005
Ubicación: colombia
Mensajes: 24
Antigüedad: 12 años
Puntos: 0
El código q uso si es el q puse en el mensaje... no sé si no son claros los problemas q no sé cómo solucionar:
1) en cada campo del formulario me aparece la informacion guardada en la BD, menos en los campos SELECT, pues la opción guardada en ese tipo de campo no se carga y me aparece el espacio vacío... ESE ES UN ERROR.. (EN EL CÓDIGO APARECE LA INSTRUCCION Q ESTOY USANDO)

2) es q además q me muestre la información guardada, quiero q encima uno pueda modificar datos o adicionar en los campos vacíos.. y q esa nueva info sea guardada en la BD (ES DECIR, ACTUALIZAR LOS DATOS EXISTENTES).

Espero esto aclare un poco mis problemas..
Gracias, moderador!
  #5 (permalink)  
Antiguo 06/02/2006, 10:06
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
0) Deberías repasar todo el tema que te he comentado sobre el uso de variables externas de PHP .. Por favor .. lee este capítulo de la documentación oficial de PHP.

1) NO sé de donde sacas que un tag de HTML como <select .. > tenga una opción "value" .. eso lo tienen sólo los "option" no la definición del <select ..>. Esto es própio de HTML no de PHP.

La técnica para dar un valor pre-fijado a un "select" es usar la propiedad "selected" que tienen los "option" de un "select". Como ya te mencioné esto es própio de HTML no de PHP:

http://www.w3.org/TR/html4/interact/forms.html

Por ende .. lo que debes hacer es que PHP genere esa propiedad cuando "escriba" ese HTML que ahí estás componiendo, dependiendo de tus valores.

Código PHP:
<select NAME='lactante'>
<?
if ($fila['lactante'] == "Si"){
?>
<option value="Si" selected>Si</option>
<option value="No">No</option>
<?
} else {
?>
<option value="Si">Si</option>
<option value="No" selected>No</option>
<?
}
?>
</selected>
2) .. Principalmente el problema de tu "UPDATE" es que no condicionas a cierto registro . .justo al que estás editando:
Código PHP:
$actualizar="UPDATE persona P, ayuda_urgencia U SET P.identificacion='$identificacion', P.tipo_doc='$tipo_doc', P.nombre='$nombre', P.apellidos='$apellidos', P.fecha_naci='$fecha_naci', P.sexo='$sexo', P.no_libreta='$no_libreta', P.gestante='$gestante', P.lactante='$lactante', P.departamento='$departamento', P.municipio='$municipio', U.PERSONA_identificacion='$identificacion', U.fecha_entrega_ayudaU='$fecha_entrega_ayudaU'"
Te falta indicar la condicion en el SQL de ese UPDATE .. algo tipo:

UDAPTE tabla SET campo='$valor',etc campos ... WHERE id_registro='$id_registro'

No sé si gestionas un "ID" (identificador de tus registros) .. pero lo necesitas. Por otro lado, el procedimiento real de lo que pretendes hacer tiene 3 casos: Listar, editar, actualizar tus tablas de tus BBDD.

No veo donde haces tu listado de esos registros y generas justamente el "link" para el caso "editar" .. para mostar los datos del registro que vas a editar (o pretendes editar todos a la vez? de los que pueda contener esa tabla? como así lo haces ahora?)... y en consecuencia de la propagación de ese "ID" que ha de pasar a tu proceso de "actualizar (UPDATE)" de esos datos en tu BBDD).

El "Update" se puede hacer UNO a UNO (cuando los datos son diferentes) ..

Te recomiendo ver algún sistema sencillo ya hecho al respecto para ver como trabajar con tus registros de tus tablas a modo de "ABM" (Altas, bajas y modificaciones):

http://mmmd.unisistemas.com.ar/ABM%20de%20FAQ

En las FAQ's del foro PHP creo que también tienes ejemplos sencillos.


Un saludo,
  #6 (permalink)  
Antiguo 06/02/2006, 17:32
 
Fecha de Ingreso: diciembre-2005
Ubicación: colombia
Mensajes: 24
Antigüedad: 12 años
Puntos: 0
Código completo PROBLEMA

Cluster, gracias por sus comentarios.
Efectivamente estaba cometiendo un error crazo con los select... pero bueno, ese ya lo corregí, gracias a su ayuda.
Respecto al caso (2) (ACTUALIZAR).. voy a pegarle exactamente mi código, pues efectivamente hay cosas q faltaban en el anterior sobre las cuales ud. hizo comentarios y ese no es el problema.
El código es:
Código PHP:
<html>
    
<?php    
//CONEXION BD
include ("conex.php");     

if (
$HTTP_POST_VARS)
{    
    foreach(
$_POST as $varName => $value)
    {        
        
trim($value);
    }
    if (
$buscar
    {
        
$consulta "SELECT * FROM persona WHERE identificacion =='%$buscar%'";
        
$resultado mysql_query($consulta$conexion);
        
$fila mysql_fetch_array ($resultado);
        if (
$fila)
        {        
                        
            
// SI PRESIONA ACTUALIZAR 
            
if ($actualizar
            {                
                
$resultado1=mysql_query("SELECT * FROM persona             

    WHERE identificacion='$buscar',$conexion);
                if(mysql_fetch_array($resultado1))
                {
                                                

            $actualizar="
UPDATE persona P SET                 

P
.nombre='$nombre'P.edad='$edad',                                

P.apellidos='$apellidos'P.fecha_naci='$fecha_naci',                          

P.no_libreta='$no_libreta',P.municipio='$municipio'
                
WHERE P.identificacion ='$identificacion'";
                    
                    mysql_query($actualizar,$conexion);    
                    $error1=mysql_error();
                    if (!mysql_error()) 
                    {
                        include ("
registroOK.php");
                        echo "
Actualizaci&#243;n OK";            

    
                    
}else
                    {
                        
//include ("error_ingresar.php");
                        
echo $error1;
                        echo 
"Error en Actualización";
                    }
                }                
            }        
                        
            
?>
            <td width='85%'align='middle'height='90%'valign='top'>
            <table width='100%' border='0' cellspacing='0' cellpadding='2'>
            <font face="Tahoma" color='#000000' size="3">
            <FORM name='ActPersona' METHOD='POST'                 

action='<?$_SERVER['PHP_SELF']?>'>
                
                <table border=4 BGCOLOR='#DBEAF5'>
                <TD></TD><tr><td> <U> <B><font face="Tahoma" size="4">
                    DATOS GENERALES</B></U></TD></TR>  
                <tr><td> Identificacion</TD><TD>
                    <INPUT TYPE='TEXT' NAME='identificacion' SIZE=15     

                value= <? echo $buscar;?>>                
                <tr><td> Nombre</TD><TD><INPUT TYPE='TEXT' NAME='nombre'    

                SIZE=30 value= <? echo $fila['nombre'];?>> </tr>
                <tr><td> Apellidos</TD><TD><INPUT TYPE='TEXT' NAME='apellidos' 

                     SIZE=45 value= <? echo $fila['apellidos'];?>>
                <td> Fecha de Nacimiento</TD><TD><INPUT TYPE='TEXT'         

        NAME="fecha_naci" SIZE=8 value=<? echo $fila['fecha_naci'];?>>             

    </TR>                        
                
                <td> Edad</TD><TD><INPUT TYPE='TEXT'                 

    NAME='edad' SIZE=3 value=<? echo $fila['edad'];?>>    
                <td> Libreta Militar</TD><TD><INPUT TYPE='TEXT'         

            NAME='no_libreta' SIZE=10 value= <? echo                 

    
$fila['no_libreta'];?>></TR>                
                <td> Municipio</TD><TD><INPUT TYPE='TEXT'             

        NAME='municipio' SIZE=35 value=<? echo                         

        
$fila['municipio'];?>></TR>                            

    
                </font>
                </table>
                <table><TR>    
                <TD> <INPUT TYPE='submit'NAME='actualizar'             

                    VALUE='Actualizar'></TD>
                <TD> <INPUT TYPE='reset'  NAME='borrar' VALUE='Borrar'>
                </center></TD></TR></table></FONT>
                </TABLE>
                <TR><BR></tr>
                
        </FORM> 
        </TD>
            <?
        
}else
        {                
            echo 
'<script>alert("No Existe");</script>';
        }
    }

}else
{
    
?>
    </TD>
    <td width='85%'align='middle'  height='90%' valign='top'>
        <table width='100%' border='0' cellspacing='0' cellpadding='2'>
        <font face="Tahoma" color='#000000' size="3">
        <body>
        <form name='buscar' method= "POST" action='<?$_SERVER['PHP_SELF']?>'>
        <strong>Ingrese Identificación:</strong>
        <input type="text" name="buscar" size="20">
        <input type="submit" value="Buscar">
        </form>
    <?php 
}
?>    
    
</body>
</html>
Todo está funcionando como quiero, es decir,
Ingreso en un cuadro d texto el ID(cedula), me busca en la tabla persona y si existe se muestran todos los datos de la persona con ese ID en modo formulario.
Adicionalmente quiero q si se cambia algún dato o se agrega nueva información a campos vacíos, al presionar el botón ACTUALIZAR, me actualice la info de la BD..
Es eso lo q no está sucediendo...
Cuando se carga el formulario lleno con los datos del ID q he ingresado, adicional aparece un mensaje:
Código:
Notice: Undefined variable: actualizar in c:\archivos de programa\easyphp1-8\www\suao1\actpersona.php on line 89 
ESE ES MI PROBLEMA.. ESPERO HABERLO ACLARADO UN POCO.
AGRADEZCO SU AYUDA, CLUSTER!!

Última edición por Cluster; 07/02/2006 a las 05:31
  #7 (permalink)  
Antiguo 07/02/2006, 05:43
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Ya te dije que tenías que aclarar el uso de tus acceso a veriables externas ..

No puedes hacer mezclar el uso indiscrimado de $HTTP_xxxx_VARS, $variable (cuando es externa: que viene de un URL o formulario .. ) y $_POST ..

www.php.net/variables

Revisa ese capítulo del manual de referencia de PHP, ajusta/rectifica tu código.

Por lo demás los "notice" como el que ves te avisan que hay una variable que NO está definida .. concretamente ese "actualizar" .. la envias en $_POST['actualizar'] .. no en $actualizar (que funcione o no depende del estado de tu directiva de PHP: register_globals)

Por otro lado no es recomendable intentar acceder a una variable externa que no exista (en general cualquier variable).

Código PHP:
if (isset($_POST['actualizar'])){

// usas $_POST['actualizar'] o realizas el proceso que tengas que hacer. 
// isset() verifica la existencia de la variable ..



Esto tampoco es correto. Fijate en tu código fuente HTML generado por la ejecución de ese código .. revisa tus "<form .." y mira que pone en el "action="

<?$_SERVER['PHP_SELF']?>

Pondrá action="" .. te faltó el "echo" para presentar el valor de esa variable de servidor .. Por "suerte" para ti (y según el navegador que usas) .. si el navegador no se le indica un action (script) de proceso .. "asume" que es si mismo donde vas a enviar el proceso (justo, por casualidad lo que requieres).

<? echo $_SERVER['PHP_SELF']?>

También tienes errores en:
$resultado1=mysql_query("SELECT * FROM persona

WHERE identificacion='$buscar',$conexion);
if(mysql_fetch_array($resultado1))
{

a nivel de sintax .. le falta una comilla de cierre del SQL que indicas en:

Código PHP:
 $resultado1=mysql_query("SELECT * FROM persona              

    WHERE identificacion='$buscar'"
,$conexion); 
En general tienes un buen montón de "detallitos" que revisar .. Esos son los que he visto por el momento ..

Un saludo,
  #8 (permalink)  
Antiguo 09/02/2006, 10:48
 
Fecha de Ingreso: diciembre-2005
Ubicación: colombia
Mensajes: 24
Antigüedad: 12 años
Puntos: 0
Inquietudes al respecto

Hola!
He leido respecto a paso de variables, y variables externas q es lo q estoy aplicando en mi caso, y tengo varias dudas.
Hablando del mismo codigo q puse inicialmente, la idea de lo q necesito e intento plasmar en el código, es lo sgte: si se recibe un ID de un form mediante la variable $buscar, se consulta la BD y se recupera ese registro, el cual se muestra mediante un formulario con los campos llenos con la info diligenciada.. Luego de eso, el usuario puede llenar otros campos o cambiar alguna de la mostrada y si se presiona actualizar (variable $actualizar), se genera una consulta a la BD en la cual se UPDATE ese registro de la BD.

En general esa es la idea, y según lo q he probado del code hasta ahora, funciona bien hasta q muestra el formulario con el registro deseado... cuando entra al segundo ciclo en el q se pregunta por la existencia de $actualizar, ya no corre.
Estoy aprendiendo al respecto, pero pienso el problema es q estoy usando una variable externa, dentro de una variable externa o algo así.. es decir..
Hay un ciclo grande y dentro de éste luego de mostrar el form, hay otro ciclo donde pregunto si se recibe $actualizar, entonces consulte BD, actualice, y muestre mensaje de éxito. Gráficamente podría verse como:
if($buscar)
{query+formulario con registro
if($actualizar){
mysql_query (select
&& UPDATE
echo "Update OK";}
},
else{muestre form de ingreso de ID(buscar).
Estoy usando dos variables externas y las utilizo una dentro de la otra..
Esto se puede hacer??? pues en lo q he leido, no he encontrado ejemplos o casos al respecto. Si se puede hacer.. debo utilizar alguna sintaxis especial???
Nuevamente perdonarán pues estoy aprendiendo y gracias!
  #9 (permalink)  
Antiguo 09/02/2006, 11:01
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Es que no debes usar $buscar o $actualizar .. accede a esas variables por:

$_POST['nombre_variable']

(por qué las envias desde tu formulario en modo POST)

Además . .

<input type="submit" value="Buscar">

defines "value" pero no indicas NOMBRE! de la variable: name="buscar" .. (Esto es própio de HTML no de PHP). Por ende PHP no recibe ninguna variable de nombre "buscar" ni en $buscar ni en $_POST['buscar'] que es donde debes accederla.

A todo esto no deberías usar:
if ($_POST['buscar'])

sino la función isset() que define "existe la variable":

if (isset($_POST['buscar']))

Ya te dije también que esto no es correcto:
FORM name='ActPersona' METHOD='POST' action='<?$_SERVER['PHP_SELF']?>'>

te falta el echo o si quieres usar la versión resumida usa:
FORM name='ActPersona' METHOD='POST' action='<?=$_SERVER['PHP_SELF']?>'>

Solventases esos problemas . .como te quedó el código despues de estos cambios?

Por cierto .. una manera de revisar que variabels estás propagando a tus scritps .. (externas) como para ver si algo anda mal (una variable con un error al escribir su nombre, .. o que esté en mayusculas y tu la accedes por "minusculas" .. etc) es el uso de:

Código PHP:
<?
echo "<pre>";
print_r ($_POST);
echo 
"</pre>";
?>
Usalo al principio de tu código y observa. Haz lo mismo con $_GET.

Un saludo,
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:36.