Foros del Web » Programando para Internet » PHP »

Actualizar datos en BD desde un form que los presenta

Estas en el tema de Actualizar datos en BD desde un form que los presenta en el foro de PHP en Foros del Web. Mi problema es que necesito que los datos mostrados en un form (que los traigo de una base de datos) se puedan modificar y al ...
  #1 (permalink)  
Antiguo 22/02/2006, 12:40
Avatar de ludovico2000  
Fecha de Ingreso: noviembre-2003
Ubicación: Bizkaia
Mensajes: 1.315
Antigüedad: 20 años, 5 meses
Puntos: 2
Pregunta Actualizar datos en BD desde un form que los presenta

Mi problema es que necesito que los datos mostrados en un form (que los traigo de una base de datos) se puedan modificar y al pulsar un botón, se actualice la base de datos.

He buscado por los foros, en las FAQ, etc, y aunque he encontrado mensajes al respecto, no he podido aclararme (mis conocimientos de php son 0,0001, lo único que he hecho ha sido modificar un código ya existente)

Ahora mismo es el código que muestra los datos:
Código:
<?
  session_start("misesion");

  include("../../cosas/direccionesBD.inc");
  include("./inc/validador.inc" );

  $db = openDB();
  $sql = "SELECT * FROM mis_comentarios WHERE mis_CD_tipo_TD = '".$_GET["tipo"]."' AND mis_usuario='".$_GET["usuario"]."' ORDER BY mis_fecha";
  $rs = $db->Execute($sql);

?>

<html>
<head>
<link rel="stylesheet" href="css/estilo.css" type="text/css">
</head>
<body bgcolor="#F5CCC8" text="#ffffff">
<form>
<table width=100%>
<?
  while ( $o = $rs->FetchNextObject() )
   {
  	print "<tr><td><input type=\"hidden\" name=\"miscd\" size=\"8\" value=\"".rtrim(ltrim($o->MIS_CD))."\"></td><td><input type=\"text\" name=\"misfecha\" size=\"8\" value=\"".rtrim(ltrim($o->MIS_FECHA))."\"></td><td><textarea name=\"mistexto\" cols=\"90\" rows=\"2\">".rtrim(ltrim($o->MIS_TEXTO))."</textarea></td></tr><tr>\n";
   }
?>
</table>
</form>
</body>
</html>
¿Alguien puede indicarme qué debo hacer o por dónde debo empezar?

P.S.: Ya sé que parto desde muy poco, pero estoy muy perdido...

Lo he puesto en un form porque supongo que es necesario para pasar los datos.

Última edición por ludovico2000; 23/02/2006 a las 07:12
  #2 (permalink)  
Antiguo 22/02/2006, 12:53
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 20 años, 6 meses
Puntos: 11
Tienes el codigo para grabar los datos? Modificandolo un poco te sirve para actualizar los datos.
  #3 (permalink)  
Antiguo 22/02/2006, 13:02
Avatar de ludovico2000  
Fecha de Ingreso: noviembre-2003
Ubicación: Bizkaia
Mensajes: 1.315
Antigüedad: 20 años, 5 meses
Puntos: 2
Lo primero, gracias por responder...

Éste es (aunque no veo cómo pueda adaptarlo):

Código:
<?
session_start("misesion");

include("../../cosas/direccionesBD.inc");
include("./inc/validador.inc");

$fecha_hoy = date("Y-m-d");

$db = openDB();

if ( $_POST["action"] == "insertar" )
 {
   if ( !empty($_POST["comentario"]) )
    {
   $sql = "INSERT INTO mis_comentarios VALUES(NULL,'".$_POST["tipo"]."','".$_POST["fecha"]."','".$_POST["comentario"]."', '".$_POST["usuario"]."' )";
   $rs = $db->Execute($sql);
   print "<script>window.opener.location.reload();window.close();</script>";
     }
   else
     {
      $action = "insertar";
     }
 }
else
 {
   $action = "insertar";
 }
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Administrador</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" href="css/estilo.css" type="text/css">
 </head>
<body>
 <form name="form1" action="<?=basename($PHP_SELF);?>" method="POST">
<input type=hidden name="action" value="<?=$action;?>">
<input type=hidden name="cliente" value="<?=$tipo;?>">
<input type=hidden name="usuario" value="<?=$usuario;?>">
<table  border="0" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF" align="center">
<tr>
<td><input class="contenido2" type='text' name='fecha' maxlength='10' size='12' onClick='this.select()' onfocus='this.select()' onKeyDown='return(keyPressed());' onBlur='checkDate(this, "dd-mm-yy")' value="<?=$fecha_hoy;?>" class="formdate">     &nbsp; <a style='cursor:hand;' onClick='PopCalendar.selectWeekendHoliday(1,1);PopCalendar.show(document.form1.fecha, "yyyy-mm-dd");'>     <img src='js/calendar/Images/calendar.gif' border='0' Style='Padding-Top:1px' align='absmiddle'></a></td>
</tr>
<tr>
<td><textarea name="comentario" style="width:300px;height:120px;font-family:Verdana;" class="contenido"></textarea></td>
</tr>
<tr>
<td><input type="submit" class="contenido" value="Añadir Comentario"></td>
</tr>
</table>
</form>
<hr class="contenido2">
</body>
</html>
(HE eliminado script del popcalendar porque es muy largo y supongo que no tiene nada que ver, ya que sólo se usa para escribir la fecha no-a-mano)

A ver si con esto me podéis ayudar, que estoy muy trabado...

No soy partidario de pedir las cosas mascadas, pero en este caso, no me queda otra opción porque yo de php..., lo siento.
  #4 (permalink)  
Antiguo 22/02/2006, 13:07
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 20 años, 6 meses
Puntos: 11
Se cambia sólo el sql y el if:

if ( $_POST["action"] == "actualizar" )

$sql = "Update mis_comentarios set tipo='".$_POST["tipo"]."',fecha='".$_POST["fecha"]."',comentario='".$_POST["comentario"]."', usuario='".$_POST["usuario"]."'";
  #5 (permalink)  
Antiguo 22/02/2006, 13:21
Avatar de ludovico2000  
Fecha de Ingreso: noviembre-2003
Ubicación: Bizkaia
Mensajes: 1.315
Antigüedad: 20 años, 5 meses
Puntos: 2
vale, entiendo que eso es para actualizar datos utilizando la estructura de la página que los inserta, pero necesito actualizarlos desde la que los muestra. La cosa es que para insertar se hace "de uno en uno" mientras que para actualizar, necesito que se muestren varios a la vez (todos los que responden a tipo y usuario) y modificarlos.

Es decir, lo que necesito es, sobre el primer código que he puesto, ponerle un botón que al pulsarlo ejecute $sql = "update ..." (evidentemente no es que yo sea así de exigente, sino que es lo que me exigen a mí)

He probado poniendo ese if y esa sentencia que mencionas arriba y un botón de submit, pero lo único que hace es "refrescar" la página, es decir, vuelve a ejecutar la primera sentencia (SELECT * FROM mis_comentarios WHERE ...) tomando los datos que ya hay en el form y pasa de la de update.

¿cómo le puedo decir al form "cuando te haga submit ejecuta [sql update...] en vez de [sql select...]?
  #6 (permalink)  
Antiguo 22/02/2006, 13:31
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 20 años, 6 meses
Puntos: 11
Muestra como dejaste el codigo.
  #7 (permalink)  
Antiguo 23/02/2006, 07:11
Avatar de ludovico2000  
Fecha de Ingreso: noviembre-2003
Ubicación: Bizkaia
Mensajes: 1.315
Antigüedad: 20 años, 5 meses
Puntos: 2
Pregunta

He logrado que actualice datos, pero sólo me actualiza el último dato recuperado. ¿cómo puedo hacer que actualice todos los datos que ha presentado? -he indagado por google y he visto algo de foreach, pero no sé cómo hacerlo ni de qué va-

Pongo lo que tengo hasta ahora:

página muestra.php
Código:
<? 
 session_start("misesion");

  include("../../cosas/direccionesBD.inc");
  include("./inc/validador.inc" );

     $db = openDB();
  $sql = "SELECT * FROM mis_comentarios WHERE com_FK_cli_PK = '".$_GET["comfkclipk"]."' AND com_user='".$_GET["comuser"]."' ORDER BY com_fecha";
  $rs = $db->Execute($sql);
?>
<html>
<head>
<title>Modificar datos</title>
<link rel="stylesheet" href="css/estilo.css" type="text/css">
</head>
<body bgcolor="#F5CCC8" text="#ffffff">
 <form name='modificar' method='post' action='actuar.php'>
<?
  while ( $o = $rs->FetchNextObject() )
   {
  	print "<tr><td><input type=\"text\" readonly class=\"contenido2\" size=\"4\" name=\"compk\" value=\"".rtrim(ltrim($o->COM_PK))."\"><input type=\"hidden\" name=\"comfkclipk\" value=\"".rtrim(ltrim($o->COM_FK_CLI_PK))."\"><input type=\"hidden\" name=\"comuser\" value=\"".rtrim(ltrim($o->COM_USER))."\"></td><td><input type=\"text\" name=\"comfecha\" size=\"11\" class=\"contenido2\" value=\"".rtrim(ltrim($o->COM_FECHA))."\"></td><td><textarea name=\"comtexto\" cols=\"120\" rows=\"2\" class=\"contenido2\">".rtrim(ltrim($o->COM_TEXTO))."</textarea><br /><br /></td></tr><tr>\n";
   }
?>
</table>
<input class='contenido' type='submit' value='Pulse este botón y luego F5 para ver los datos modificados'>
</form>
</body>
</html>
Y esta es actuar.php:

Código:
<? 
session_start("misesion");

  include("../../cosas/direccionesBD.inc");
  include("./inc/validador.inc" );

    $db = openDB();

print "<script>alert('estoy en la acción modificar')</script>";
	$sql = "UPDATE mis_comentarios set com_PK = '".$_POST["compk"]."', com_FK_cli_PK = '".$_POST["comfkclipk"]."' , com_fecha = '".$_POST["comfecha"]."' , com_texto = '".$_POST["comtexto"]."' , com_user = '".$_POST["comuser"]."' WHERE com_PK = '".$_POST["compk"]."' ";
print "<script>alert('he definido sql')</script>";
	$rs = $db->Execute($sql);
	print "<script>alert('he ejecutado el sql');</script>";


?>

<script language="JavaScript">
alert('estoy en la acción de recargar la pág');
window.self.location="modificar.php";

</script>
  #8 (permalink)  
Antiguo 23/02/2006, 10:31
Avatar de ludovico2000  
Fecha de Ingreso: noviembre-2003
Ubicación: Bizkaia
Mensajes: 1.315
Antigüedad: 20 años, 5 meses
Puntos: 2
¿Nadie puede ayudarme, por favor?
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 18:24.