Foros del Web » Programando para Internet » PHP »

Problema con modificar datos????

Estas en el tema de Problema con modificar datos???? en el foro de PHP en Foros del Web. Amigos a traves de este foros y las paginas que recomienda en elaborado unos codigos para hacer una consulta a una BD mysql, el cual ...
  #1 (permalink)  
Antiguo 14/02/2006, 05:57
Avatar de 8461277  
Fecha de Ingreso: diciembre-2002
Ubicación: san juan de los morros
Mensajes: 887
Antigüedad: 21 años, 4 meses
Puntos: 1
Problema con modificar datos????

Amigos a traves de este foros y las paginas que recomienda en elaborado unos codigos para hacer una consulta a una BD mysql, el cual me trae todo y funciona bien, el mismo le coloca un enlace de actualizacion a cada registro el cual trae su (id) y lo en envia a un formulario de modificacion de datos el id se ve en la url pero al llegar al formulario de modificacion no trae nada sale en blanco e tratado de imprimir el id a parte y nada no lo recojo ni con POS ni GET.

Aqui le coloco el codigo de consulta de la BD:

Código PHP:
<?
//Conexión a la base de datos
$con mysql_connect("localhost","root","") or die (mysql_error());
mysql_select_db("bdemailautoridades",$con) or die (mysql_error());

$result=mysql_query("SELECT * FROM bdemail ORDER BY N_registro",$con);
echo
"<table width=550><tr><td><b>Nombres y Apellidos</b></td><td><b>Cargo o Dependencia</b></td></tr>";
while(
$row=mysql_fetch_row($result)){
  echo
"<tr><td>$row[2]</td><td>$row[3]</td><td><a href=\"actualizar.php?id=$row[0]\">  Actualizar</a></td></tr>";
}
echo
"</table>";
?>
Aqui el de actualizar.php que es el formulario de modificacion:

Código PHP:
<?
 
//Conexión a la base de datos
$con mysql_connect("localhost","root","") or die (mysql_error());
mysql_select_db("bdemailautoridades",$con) or die (mysql_error());

if (!isset(
$accion)){
  
$result=mysql_query("SELECT * FROM bdemail WHERE id='$id'",$con);
  
$row=mysql_fetch_row($result);
  echo
"<html><head><title>Actualizar datos de la base</title></head><body><form action=\"actualizar.php?accion=guardar\" method=\"POST\">Nombre:<br><input type=\"text\" value=\"$row[2]\" name=\"nombre\"><br>Apellido:<br><input type=\"text\" value=\"$row[3]\" name=\"Cargo\"><br>DNI:<br><input type=\"text\" value=\"$row[4]\" name=\"Login\"><br><inputtype=\"hidden\" name=\"id\" value=\"$row[0]\"><input type=\"submit\" value=\"Guardar\"></form>  </body></html>";
}elseif(
$accion==guardar){
  
$result=mysql_query("UPDATE bdemail SET Nombre=$nombre,Cargo=$Cargo,Login=$Login WHERE id='$id'",$con);
  echo
"<html><body><h3>Los registros han sido actualizados</h3></body></html>";
}

?>
Alguien me podria explicar que hice mal
__________________
Miguel Padrón :cool:
  #2 (permalink)  
Antiguo 14/02/2006, 06:09
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Yo usaría mysql_fech_array() y en lugar de acceder numéricamente al resultado (campo) lo haría por nombre .. Más claro de ver y seguir el código.

Así accederiamos a los resultados por:
$row['nombre_campo']

Para revisar el problema . .primero mira si tu código HTML que generas con el primer código ahí ves interpretado el valor de tus datos (id=$row[0]). El dato (ese ID) lo pasas en el URL .. así que deberías ver un URL de llamada para actualizar tipo: actualizar.php?id=n° .. Si no ves el n° .. entonces tienes problemas en la llamada a tus campos (por n°) .. por eso te recomiendo sólo por claridad del código acceder por indice asociativo (por nombre).

OJO también con el acceso que haces de variables externas .. usas $accion cuando deberías usar $_GET['accion'] que es el método por el cual recibe tu 2° script el dato .. Y lo mismo con ese id .. debe ser $_GET['id']

Otro detalle es que en $_GET del 2° código .. en ese formulario envias "accion" .. pero el formulario (el resto de datos) los envias en POST .. (por ende accesibles por $_POST['variable']). Yo usaría en un campo hidden de HTML el "accion" para definirlo y todo tomarlo por POST o GET según quieras definir tu "method" del formulario. Pero no mezclar (aunque reconozco que también lo he hecho .. ahora prefiero unificar criterios y no liarme).

Por lo demás tienes otros detalles sobre como usas PHP .. El proceso "guardar" de ese 2° script no requiere de nada de HTML ni generar salida par dar ese mensaje "los datos han sido actualizados" .. Deberías hacer el proceso y redireccionar a otro script/Página o si misma pero con otro estado de "acción" para mostrar el mensaje en cuestión. Por ejemplo .. este "problema" es más notorio cuando hay haces un "INSERT" creando un registro y en ese mismo proceso muestras un mensaje "datos insertados" .. si recargas la página originas registros duplicados, tantos como el usuario se aburra de recargar la página. Ten cuidado con eso, piensa en que PHP procesa la página que será entregada al "cliente" y no en incrustrar PHP por médio de HTML.

Un saludo,
  #3 (permalink)  
Antiguo 14/02/2006, 06:35
Avatar de 8461277  
Fecha de Ingreso: diciembre-2002
Ubicación: san juan de los morros
Mensajes: 887
Antigüedad: 21 años, 4 meses
Puntos: 1
amigo cluster, ya yo el revisado en el 1er codigo se recoje y envia el id por la url, el cual se ve perfectamente en la dirección, lo que pasa es que no lo recoge en el 2do codigo que es el que deberia enseñarme los datos de ese id (registro completo) ni imprime nada, con respeto a la segundo sugerencia e cambiado de $_POST a $_GET para recogerlo tanto a parte como en el $id=id
y nada

Me podrias explicar mejor como resolverlo, no soy experto en php

Ayuda
__________________
Miguel Padrón :cool:
  #4 (permalink)  
Antiguo 14/02/2006, 07:20
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Haz una prueba:

En tu 2° script (al principio . .antes de entrar a tus "if()"):

Código PHP:
<?
echo "<pre>";
echo 
"Valores en GET:\n";
print_r($_GET);
echo 
"Valores en POST:\n";
print_r($_POST);
echo 
"</pre>";
?>
Observa que variables contienen en los arrays respectivos y en cual .. tal vez tu los esperas en "POST" y los recibes en "GET" .. o no los accedes por el nombre -exacto- que tienen.

Y revisa esta FAQ:
http://www.forosdelweb.com/showthrea...989#post238989
(por lo del estado de register_globals de tu php.ini)

Si pruebas a usar $_GET .. o $_POST . .indica el código que usas y como te quedó .. podría ser que no lo estés usando correctamente.


Un saludo,
  #5 (permalink)  
Antiguo 14/02/2006, 07:27
Avatar de 8461277  
Fecha de Ingreso: diciembre-2002
Ubicación: san juan de los morros
Mensajes: 887
Antigüedad: 21 años, 4 meses
Puntos: 1
Me arroja lo siguiente:

Valores en GET:
Array
(
[id] => 2
)
Valores en POST:
Array
(
)


Explicame por favor
__________________
Miguel Padrón :cool:
  #6 (permalink)  
Antiguo 14/02/2006, 07:32
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Pues entonces usalo:
Código PHP:
<?
$result
=mysql_query("SELECT * FROM bdemail WHERE id='".$_GET['id']."'",$con);
?>
Deja el código que te expuse para el resto de pruebas .. sobre todo para que veas que $accion debes recogerlo en $_GET['accion'] o que todas esas variables de tu formulario HTML: $nombre, $cargo que usas así debes usarlas por su array superglobal asociativo: $_POST['nombre'] .. etc.

Un saludo,
  #7 (permalink)  
Antiguo 14/02/2006, 08:01
Avatar de 8461277  
Fecha de Ingreso: diciembre-2002
Ubicación: san juan de los morros
Mensajes: 887
Antigüedad: 21 años, 4 meses
Puntos: 1
eso era cluster, gracias, espro contra siempre contigo, y mil gracias a todo el foro
__________________
Miguel Padrón :cool:
  #8 (permalink)  
Antiguo 14/02/2006, 08:04
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por 8461277
eso era cluster, gracias, espro contra siempre contigo, y mil gracias a todo el foro
Y leistes la FAQ?:

http://www.forosdelweb.com/showthrea...989#post238989

Eso es para que sepas por qué sucede .. por qué debes usar los arrays superglobales y por qué tal vez en otros servidores tu código funcionase ..

Un saludo,
  #9 (permalink)  
Antiguo 14/02/2006, 08:12
Avatar de 8461277  
Fecha de Ingreso: diciembre-2002
Ubicación: san juan de los morros
Mensajes: 887
Antigüedad: 21 años, 4 meses
Puntos: 1
A hora una vez que cluster me resolvio el problema no quiere, actualizar el registro que trae el id, el codigo es el siguiente:

Código PHP:
//Conexión a la base de datos
$con mysql_connect("localhost","root","") or die (mysql_error());
mysql_select_db("bdemailautoridades",$con) or die (mysql_error());



if (!isset(
$accion)){
  
$result=mysql_query("SELECT * FROM bdemail WHERE id='".$_GET['id']."'",$con);
  
$row=mysql_fetch_row($result);
  echo
"<html><head><title>Actualizar datos de la base</title></head><body><form action=\"actualizar.php?accion=guardar\" method=\"POST\">Nombres y Apellidos:<br><input type=\"text\" value=\"$row[2]\" name=\"Nombre\"><br>Cargo:<br><input type=\"text\" value=\"$row[3]\" name=\"Cargo\"><br>Login:<br><input type=\"text\" value=\"$row[4]\" name=\"Login\"><br><inputtype=\"hidden\" name=\"id\" value=\"$row[0]\"><input type=\"submit\" value=\"guardar\"></form>  </body></html>";
}elseif(
$accion==guardar){
  
$result=mysql_query("UPDATE bdemail SET Nombre=$Nombre,Cargo=$Cargo,Login=$Login WHERE id='".$_GET['id']."'",$con);
  echo
"<html><body><h3>Los registros han sido actualizados</h3></body></html>";
}

?> 
Hice el cambio respectivo del id por la solucion de cluster, la cual me trae el registro pero una vez que corrijo el campo y lo mando desaparece todo el registro y no lo modifica y ni sale el aviso de registro modificado

Que sera lo que pasa?
__________________
Miguel Padrón :cool:
  #10 (permalink)  
Antiguo 14/02/2006, 08:29
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
buffff!!!..

Ya te dije que debes usar las variables que vengan de forma externa a tu script (esas que llegan por el URL . .las que llegan de tu formulario .. etc) por sus arrays asociativos superglobales: $_POST o $_GET .. o donde estén.

Un saludo,
  #11 (permalink)  
Antiguo 14/02/2006, 12:03
Avatar de 8461277  
Fecha de Ingreso: diciembre-2002
Ubicación: san juan de los morros
Mensajes: 887
Antigüedad: 21 años, 4 meses
Puntos: 1
Código PHP:
}elseif($accion==guardar){ 
  
$result=mysql_query("UPDATE bdemail SET Nombre=$Nombre,Cargo=$Cargo,Login=$Login WHERE id='".$_GET['id']."'",$con); 
  echo
"<html><body><h3>Los registros han sido actualizados</h3></body></html>"


?> 
E cambiado todo tomando tu referncia, pero no entiendo porque no funciona, cuando le doy al boton guardar, en la dirección url sale:
...........................?accion=guardar
lo que implica que deberia haer el modificado al comparar que la accion es guradar como sale en el if
elseif(accion==guardar){.........

Ayuda plis
__________________
Miguel Padrón :cool:
  #12 (permalink)  
Antiguo 14/02/2006, 12:39
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
No funciona por qué tu configuración de PHP no acepta variables externas que vengan definidas como globales .. es necesario que se accedan por el array superglobal en el que llegan:
Código PHP:
<?
elseif($_GET['accion']=="guardar"){
Y los valores a comparar han de ir entre comillas (son strings/cadenas . .no "constantes").

Por si acaso .. luego me preguntaras que el registro se crea pero no tiene nada en el: ni nombre, ni cargo . .etc. Esto es más de lo miso .. debes acceder a tus variables externas por sus arrays correpondientes!!!!!!!!!.

Un saludo,
  #13 (permalink)  
Antiguo 14/02/2006, 12:51
Avatar de 8461277  
Fecha de Ingreso: diciembre-2002
Ubicación: san juan de los morros
Mensajes: 887
Antigüedad: 21 años, 4 meses
Puntos: 1
Mira lo que arroja, al cambiar lo que me dijiste:

Valores en GET:
Array
(
[accion] => guardar
)
Valores en POST:
Array
(
[Nombre] => Dr. Odan Belisario
[Cargo] => Decano del Área Ciencias Política y Jurídica
[Login] => o_belisario
)

Código PHP:
}elseif($_GET['accion']=="guardar"){
  
$result=mysql_query("UPDATE bdemail SET Nombre=$row[2],Cargo=$row[3],Login=$row[4] WHERE id='".$_GET['id']."'",$con);
  echo
"<html><body><h3>Los registros han sido actualizados</h3></body></html>";

una la recohe por GET que es guardar y la otra por POST que son los valores del registro en este caso el 15
__________________
Miguel Padrón :cool:
  #14 (permalink)  
Antiguo 14/02/2006, 13:08
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cuando hablo de array no me refiero a tus $row[] .. sino al $_POST en ese caso:

Nombre=$row[2],Cargo=$row[3],Login=$row[4]

sería:

Nombre='".$_POST['Nombre'].",Cargo='".$_POST['Cargo']."'

Y así con todas .. OJO con el nombre real que tienen las variables. PHP es sensible a mayusculas, debe corresponder con lo que recibas (lo que tengas como "name" de tus input del formulario).

Un saludo,
  #15 (permalink)  
Antiguo 14/02/2006, 13:10
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Otro detalle .. ese "login"? .. No sé muy bien para que lo usas (supongo que para identificar al usuario que hace tal operación?) .. Pero, NO deberías propagar ese dato desde el formulario hasta tu script de PHP de actualización .. Imagina si meto mano intencionalmente a los datos que transitan por el formulario .. alteraría ese valor (que seguro que no deseas que se altere así por qué si).

Un saludo,
  #16 (permalink)  
Antiguo 14/02/2006, 13:22
Avatar de 8461277  
Fecha de Ingreso: diciembre-2002
Ubicación: san juan de los morros
Mensajes: 887
Antigüedad: 21 años, 4 meses
Puntos: 1
me sigue dando igual, no me lo modifica:
Código PHP:
}elseif($_GET['accion']=="guardar"){
  
$result=mysql_query("UPDATE bdemail SET Nombre='".$_POST['Nombre'].",Cargo='".$_POST['Cargo']." WHERE id='".$_GET['id']."'",$con);
  echo
"<html><body><h3>Los registros han sido actualizados</h3></body></html>";

Y gracais por el segundo consejo, de todo modos es una prueba local

Recoje todas la variables pero la accion UPDATE (modificar) no hace nada
queda en blanco
__________________
Miguel Padrón :cool:
  #17 (permalink)  
Antiguo 14/02/2006, 13:55
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Ahora te dejastes una ' de cierre en "Cago='....'" y en Nombre (en mi primer ejemplo me lo dejé .. pero ya he usado esa misma técnica en este mismo mensaje . .intenta observar tambien tu por tu parte) ... Si usas mysql_error() como te describo el ejemplo (corregido) deberías ver un error sobre sintax SQL en ese punto.
Código PHP:
<?
$result
=mysql_query("UPDATE bdemail SET Nombre='".$_POST['Nombre']."',Cargo='".$_POST['Cargo']."' WHERE id='".$_GET['id']."'",$con) or die(mysql_error());
Cita:
Recoje todas la variables pero la accion UPDATE (modificar) no hace nada
queda en blanco
Siempre que describas un problema debes intentar dar más detalles. El termino "queda en blanco" no me queda claro a que te refieres. Cuando haces un "Update" pueden pasar dos cosas:

1) Los datos que tenía originalmente "desaparecen" (los sobre-escibes con nada .. caso por ejemplo de que alguna de tus variables no tome el valor esperado).
2) Se actualiza toda la tabla con los mismos datos para todos los registros (suele pasar cuando se deja uno el "WHERE id=talregistro" ...

Un saludo,

Última edición por Cluster; 14/02/2006 a las 14:00
  #18 (permalink)  
Antiguo 14/02/2006, 13:58
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Otro consejo .. Si usas variables para definir una sentencia SQL te será más facil ver que valores toma tu sentencia SQL a ejecutar y así comprobar si el SQL que ahí resulta es el que esperas:

Código PHP:
<?
$sql
="UPDATE bdemail SET Nombre='".$_POST['Nombre']."',Cargo='".$_POST['Cargo']."' WHERE id='".$_GET['id']."'"

echo 
"Ejecutando sentencia SQL: ".$sql."<br>";

$result=mysql_query($sql) or die(mysql_error());
Usa echo "algo" en tus "if()" por donde el flujo del código pasa o debería pasar para observar que hasta ahí por lo menos llega correctamente o entra a tus IF() pasando tus condiciones.

Un saludo,
  #19 (permalink)  
Antiguo 14/02/2006, 14:04
Avatar de 8461277  
Fecha de Ingreso: diciembre-2002
Ubicación: san juan de los morros
Mensajes: 887
Antigüedad: 21 años, 4 meses
Puntos: 1
No lanza ningu error, y cuando me refiero que queda en blanco es que cuando modifico uno de los campos que quisiera corregir y le doy al boton guardadr el mismo se recarga dejando los campos de los INPUT vacio, y no actualiza nada ni ese registro ni ninguno de los demas datos dentro de la BD
__________________
Miguel Padrón :cool:
  #20 (permalink)  
Antiguo 14/02/2006, 14:08
Avatar de 8461277  
Fecha de Ingreso: diciembre-2002
Ubicación: san juan de los morros
Mensajes: 887
Antigüedad: 21 años, 4 meses
Puntos: 1
Cita:
Iniciado por Cluster
Otro consejo .. Si usas variables para definir una sentencia SQL te será más facil ver que valores toma tu sentencia SQL a ejecutar y así comprobar si el SQL que ahí resulta es el que esperas:

Código PHP:
<?
$sql
="UPDATE bdemail SET Nombre='".$_POST['Nombre']."',Cargo='".$_POST['Cargo']."' WHERE id='".$_GET['id']."'"

echo 
"Ejecutando sentencia SQL: ".$sql."<br>";

$result=mysql_query($sql) or die(mysql_error());
Usa echo "algo" en tus "if()" por donde el flujo del código pasa o debería pasar para observar que hasta ahí por lo menos llega correctamente o entra a tus IF() pasando tus condiciones.

Un saludo,

Hice esta misma operacion y da igual que el aNTERIOR codigo, no modifica ninguno y queda en blanco el formulario despues de dar a guardar
__________________
Miguel Padrón :cool:
  #21 (permalink)  
Antiguo 14/02/2006, 14:11
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Y ya has probado a ver por donde está llegando tu código (si pasa a tus "if()" donde corresponda)? .. o a usar la variable $sql como te propongo para ver que SQL estás generando (y el mysql_error()) por si hay error de SQL o conexión que no estás viendo ahora?..

otra cosa que me acabo de dar cuenta ..

La instrucción if() .. tiene su "else" .. y luego su "elseif" .. pero en ese orden. Por otro lado para tu caso con tus "acciones" te viene mejor usar un switch()

Usalo .. te irá mejor.

Un saludo,
  #22 (permalink)  
Antiguo 14/02/2006, 14:12
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por 8461277
Hice esta misma operacion y da igual que el aNTERIOR codigo, no modifica ninguno y queda en blanco el formulario despues de dar a guardar
echo "Ejecutando sentencia SQL: ".$sql."<br>";

Pero dice eso . .o no muestra ese mensaje? .. Por qué si no muestra ese mensaje significa que tu condición no se cumple como tu esperas ..

Insisto: usa el Switch()

Un saludo,
  #23 (permalink)  
Antiguo 15/02/2006, 06:23
Avatar de 8461277  
Fecha de Ingreso: diciembre-2002
Ubicación: san juan de los morros
Mensajes: 887
Antigüedad: 21 años, 4 meses
Puntos: 1
Gracias cluster, ya lo resolvie, realice otro codigo y me funciona al pelo, muchas gracias papa

Saludos
__________________
Miguel Padrón :cool:
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 12:04.