Foros del Web » Programando para Internet » PHP »

Modificar registros con PHP

Estas en el tema de Modificar registros con PHP en el foro de PHP en Foros del Web. Hola: Quizás esta pregunta es de lo más vieja, pero noy muy inexperto en esto... Tengo una página (php), llamemosla página 1, con un menu ...
  #1 (permalink)  
Antiguo 28/07/2004, 16:52
 
Fecha de Ingreso: noviembre-2002
Ubicación: Colombia
Mensajes: 278
Antigüedad: 21 años, 4 meses
Puntos: 0
Modificar registros con PHP

Hola:

Quizás esta pregunta es de lo más vieja, pero noy muy inexperto en esto...

Tengo una página (php), llamemosla página 1, con un menu desplegable que contiene los "id" de todos los registros de mi BD.

Al seleccionar el "id", con el botón "submit", soy dirigido a un formulario (otra página php), llamemosla página 2, en el que deberían estra ya los campos llenos con los que corresponden al "id" seleccionado en la otra página.

Esto no sucede... Por favor una colaboración!

Anexo ambos códigos (resumidos, sólo php):

La página 1
Código PHP:
<? 
//Conexion con la base
include ("config_ing.php");

echo 
'<FORM METHOD="POST" ACTION="clients_modificar2.php"><br>';

//Creamos la sentencia SQL y la ejecutamos
$sql="Select id From clients Order By id";
$result=mysql_db_query("margarit_directorio",$sql);

echo 
'<select name="id" class="mini">';

//Mostramos los registros en forma de menú desplegable
while ($row=mysql_fetch_array($result))
{echo 
'<option>'.$row["id"];}
mysql_free_result($result)
?>
</select>
<br><br><br>
<INPUT TYPE="SUBMIT" value="Modificar Registros">
</FORM>


La página 2
Código PHP:
<?
include ("config_ing.php");

if (
$_POST['id']){
  
$sql="SELECT * FROM clients WHERE id='$id'";
  
$result mysql_query($sql);
  
  
$sql="UPDATE clients SET name='$name', address='$address', phones='$phones', email='$email', url='$url', category='$category', subcategory='$subcategory', zone='$zone' WHERE id='$id'";
  
$result mysql_query($sql);

   }
?>
Imagino que el error ha de estar en el código de la segunda página.
Gracias
  #2 (permalink)  
Antiguo 28/07/2004, 18:09
 
Fecha de Ingreso: diciembre-2003
Ubicación: Córdoba, Argentina
Mensajes: 249
Antigüedad: 20 años, 4 meses
Puntos: 0
Fíjate tendrías que hacer esto en la página 2:
Código PHP:

$id 
$_POST['id'];
unset(
$_POST['id']);

include (
"config_ing.php");

if (isset(
$id)){
  
$sql="SELECT * FROM clients WHERE id='$id'";
  
$result mysql_query($sql);
  
  
$sql="UPDATE clients SET name='$name', address='$address', phones='$phones', email='$email', url='$url', category='$category', subcategory='$subcategory', zone='$zone' WHERE id='$id'";
  
$result mysql_query($sql);

   } 
  #3 (permalink)  
Antiguo 28/07/2004, 18:23
 
Fecha de Ingreso: noviembre-2002
Ubicación: Colombia
Mensajes: 278
Antigüedad: 21 años, 4 meses
Puntos: 0
Pues nada... no me funcionó.

Te paso el código como lo cambié + el del formulario que "debería" llenarse:

Código PHP:
<?
$id 
$_POST['id']; 
unset(
$_POST['id']); 

include (
"config_ing.php"); 

if (isset(
$id)){ 
  
$sql="SELECT * FROM clients WHERE id='$id'"
  
$result mysql_query($sql); 
   
  
$sql="UPDATE clients SET name='$name', address='$address', phones='$phones', email='$email', url='$url', category='$category', subcategory='$subcategory', zone='$zone' WHERE id='$id'"
  
$result mysql_query($sql); 

   }
?>

Y este sería el formulario que quiero se llene:

<form action="clients_modificar2.php" method="post" enctype="multipart/form-data" name="clients" id="clients">
<table width="255">
<tr>
<td width="91"><div align="left">Nombre:</div></td>
<td width="152"><input name="name" type="text" id="name" align="left"></td>
</tr>
<tr>
<td><div align="left">Direcci&oacute;n:</div></td>
<td><input name="address" type="text" id="address" align="left"></td>
</tr>
<tr>
<td><div align="left">Tel&eacute;fonos:</div></td>
<td><input name="phones" type="text" id="phones" align="left"></td>
</tr>
<tr>
<td><div align="left">E-mail:</div></td>
<td><input name="email" type="text" id="email" align="left"></td>
</tr>
<tr>
<td><div align="left">URL:</div></td>
<td><input name="url" type="text" id="url" align="left"></td>
</tr>
<tr>
<td><div align="left">Categor&iacute;a</div></td>
<td><input name="category" type="text" id="category" align="left"></td>
</tr>
<tr>
<td><div align="left">Subcategor&iacute;a</div></td>
<td><input name="subcategory" type="text" id="subcategory" align="left"></td>
</tr>
<tr>
<td><div align="left">Zona:</div></td>
<td><input name="zone" type="text" id="zone" align="left"></td>
</tr>
<tr>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td colspan="2"><div align="center">
<input type="submit" name="submit" value="Modificar Registros">
<input type="hidden" name="redirect" value="clients_modificar.php">


Se me ocurre que en cada campo text del formulario debería colocar algo que "llamara" el "row" correspondiente, pero he probado y solo me sale lo que coloco,por ejemplo: value="$row('name)'
  #4 (permalink)  
Antiguo 29/07/2004, 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
Pero .. que deseas hacer exactamente?

Editar un registro de tu BD? .. es decir; hacer la consulta SQL para obtener sus campos del registro seleccionado (ID=X) y mostrarlo en tu formulario como valores pre-establecidos de cada input?

Para luego, actualizar (UPDATE) ese registro (por ese ID=X) con los datos que modificastes en ese formulario?

Un saludo,
  #5 (permalink)  
Antiguo 29/07/2004, 09:00
 
Fecha de Ingreso: noviembre-2002
Ubicación: Colombia
Mensajes: 278
Antigüedad: 21 años, 4 meses
Puntos: 0
!!!!!!!!!!!!!!!!EXACTO!!!!!!!!!!!!!!!!!!!!!!!!!!!

Es precisamente lo que necesito...

Gracias por entender!!!
  #6 (permalink)  
Antiguo 29/07/2004, 09:02
 
Fecha de Ingreso: noviembre-2002
Ubicación: Colombia
Mensajes: 278
Antigüedad: 21 años, 4 meses
Puntos: 0
Es la misma forma en la que trabaja PHPMyAdmin.

Al seleccionar el "id" en el menu desplegable de la página 1, se abre la página 2 con los datos de ese registro ya puestos en cada campo de texto del formulario.

Solo edito entonces lo que necesito de ese registro, le doy click al botón y listo... actualizado el registro.
  #7 (permalink)  
Antiguo 29/07/2004, 10:19
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Ok, pues entonces debes hacer la consulta SQL a tu BD por el ID concreto en tu "formulario" para poner en sus "value" de cada input su valor pre-establecido que es el que vas a consultar a tu BD.

clientes_modificar2.php (de donde envias tu ID a "editar")
Código PHP:
<?
// conectas a tu BD .. etc ..

$resultado=mysql_query("SELECT * FROM tabla WHERE id='".$_POST['id']."'");
if (
mysql_num_rows($resultado) == 1){
$row=mysql_fetch_array($resultado);
?>
// Tu formulario ..
<form action="procesar_actualizacion_registro.php" method="post">
<input name="nombre" value="<? echo $row['nombre'?>">
<?
} else {
   echo 
"No se encontró ID: ".$_POST['id'];
}
?>
El procesar_actualizacion_registro.php .. será donde hagas el UPDATE:

Código PHP:
<? 
include ("config_ing.php"); 

if (isset(
$_POST['id'])){     
  
$sql="UPDATE clients SET name='".$_POST['name']."', address='$address', phones='$phones', email='$email', url='$url', category='$category', subcategory='$subcategory', zone='$zone' WHERE id='".$_POST['id']."'"
 if (
mysql_query($sql)){ 
   
header ("Location: pagina1.php");
   exit;
 } else {
   echo 
"Error Mysql: ".msyql_error();
 }
} else {
   
header ("Location: error.php");
   exit;
}  
?>
Así seria el procedimiento .. Si se actualiza el registro .. redireccionas hacia otra página .. si hay un error .. lo mando a la página de error.php ..o como gustes.

Acuerdate de usar los arrays superglobales SIEMPRE $_POST .. etc ..

Un saludo,
  #8 (permalink)  
Antiguo 29/07/2004, 10:33
 
Fecha de Ingreso: noviembre-2002
Ubicación: Colombia
Mensajes: 278
Antigüedad: 21 años, 4 meses
Puntos: 0
Muchas gracias... voy a probar.
Antes de que respondieras coloque un nuevo post llamado "vaciar datos en formulario" o algo similar, diciendo que ya logre que el id se mostrara pero no asi los demas campos.
  #9 (permalink)  
Antiguo 29/07/2004, 10:50
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Ok .. pues voy a cerrar el otro mensaje .. por qué creo que cuando pruebes este ya te quedará claro el tema (y cualquier aporte lo haces aquí en este mensaje).

Un saludo,
  #10 (permalink)  
Antiguo 29/07/2004, 11:44
 
Fecha de Ingreso: noviembre-2002
Ubicación: Colombia
Mensajes: 278
Antigüedad: 21 años, 4 meses
Puntos: 0
Ufffffff... esto si que esta dificil!

No me funciono, me genera un error tras otro error.

Será posible modificar el que ya tengo y que funciona a medias?
El me muestra el campo "id" del formulario lleno correctamente.
Como hacemos para que tambien me muestre los demás campos?

Código PHP:
<?
$id 
$_POST['id']; 
unset(
$_POST['id']);
 
include (
"config_ing.php");
 
if (isset(
$_POST['id'])){
$sql("SELECT * FROM clients WHERE id='".$_POST['id']."'");
$result mysql_query($sql); 

}
?>
A cada campo del formulario, le coloque lo siguiente:

<input name="id" type="text" id="id" size="5" align="left" value="<? echo $id; ?>">

Ahora, sigo teniendo una página llamada clients_modificar.php que es la del menu desplegable que me envía el "id" a esta, llamada clients_modificar2.php

Incorporando un poco tu codigo, ahora este formulario, en su action, llama a una tercera clients_modificar3.php que dice:

Código PHP:
<? 
include ("config_ing.php"); 

if (isset(
$_POST['id'])){      
  
$sql="UPDATE clients SET name='".$_POST['name']."', address='$address', phones='$phones', email='$email', url='$url', category='$category', subcategory='$subcategory', zone='$zone' WHERE id='".$_POST['id']."'"
 
}   
?>

RESUMIENDO:::::
clients_modificar.php tiene un menu que despliega todos los "id" de mi tabla clients. Al seleccionar alguno y hacer submit, se abre la pagina...

clients_modificar2.php, que es la que tiene el formulario hecho en dreamweaver con campos de texto y que, actualmente, recibe correcatmente el "id" en su campo correspondiente. Cuando logre que todos los campos correspondientes a ese "id" se llenen en el formulario, entonces modificaré lo que dese y haré submit, actualizando asi los registros...

ese submit llama a clients_modificar3.php, que tiene el codigo final para el UPDATE
  #11 (permalink)  
Antiguo 29/07/2004, 17:27
Avatar de xavivars  
Fecha de Ingreso: enero-2002
Ubicación: Benissa - la Marina Alta
Mensajes: 212
Antigüedad: 22 años, 3 meses
Puntos: 1
Cita:
Iniciado por iarrieta
Código PHP:
<?
$id 
$_POST['id']; 
unset(
$_POST['id']);
 
include (
"config_ing.php");
 
if (isset(
$_POST['id'])){
$sql("SELECT * FROM clients WHERE id='".$_POST['id']."'");
$result mysql_query($sql); 

}
?>
A cada campo del formulario, le coloque lo siguiente:

<input name="id" type="text" id="id" size="5" align="left" value="<? echo $id; ?>">

Código PHP:
<? 
include ("config_ing.php"); 

if (isset(
$_POST['id'])){      
  
$sql="UPDATE clients SET name='".$_POST['name']."', address='$address', phones='$phones', email='$email', url='$url', category='$category', subcategory='$subcategory', zone='$zone' WHERE id='".$_POST['id']."'"
 
}   
?>
Ten en cuenta que el $id se muestra porque al principio del script donde aparece el segundo formulario haces $id=$_POST['id']. El resto de los valores estan almacenados en la consulta, y no puedes acceder a ellos con $adress,... etc

En el segundo script tendras que hacer una cosa así despues del mysql_query

Código PHP:
<?php
     $resultado
=mysql_fetch_array($result); // Te quedas con la fila del resultado

?>

<input name="address" type="text" id="adress" size="5" align="left" value="<? echo $resultado['address']; ?>">
Despues, en el UPDATE, ten en cuenta que todos los valores los recibes por POST, no sólo "id" y "name"
  #12 (permalink)  
Antiguo 29/07/2004, 20:15
 
Fecha de Ingreso: noviembre-2002
Ubicación: Colombia
Mensajes: 278
Antigüedad: 21 años, 4 meses
Puntos: 0
Nada... hice lo que me indicaste:

Código PHP:
<?
$id 
$_POST['id']; 
unset(
$_POST['id']);
 
include (
"config_ing.php");
 
if (isset(
$_POST['id'])){
$sql("SELECT * FROM clients WHERE id='".$_POST['id']."'");
$resultado=mysql_fetch_array($result); 

}
?>
Y a cada campo del formulario le coloque:

Código PHP:
value="<? echo $resultado['name']; ?>"
  #13 (permalink)  
Antiguo 29/07/2004, 20:59
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Si mostrases los errores sería lo ideal .. pero .. en principio .. te has dejado (y luego cambiado sin sentido) lo básico para obtener los registros de una consulta dada ("record-set")

En el ejemplo que dejé completo lo tenías listo!.

Ese $sql(... ) que haces .. eso NO tiene sentido .. és una variable .. no una "función".
Para obtener un "resultado" antes debes haber ejecutado tu consulta SQL con mysql_query() ...

Código PHP:
if (isset($_POST['id'])){ 
$sql="SELECT * FROM clients WHERE id='".$_POST['id']."'"
$result mysql_query($sql) or die (mysql_error()); 
$resultado=mysql_fetch_array($result);

// a partir de aquí ya puedes usar $resultado['name'] (siendo "name" un nombre de un campo de tu tabla "clients").



En las FAQ's de este foro hay tutoriales de PHP con capítulo sobre Mysql .. deberías hecharles un vistazo o bien ver la multitud de ejemplos que hay en las FAQ's ..

Un saludo,
  #14 (permalink)  
Antiguo 29/07/2004, 21:05
 
Fecha de Ingreso: noviembre-2002
Ubicación: Colombia
Mensajes: 278
Antigüedad: 21 años, 4 meses
Puntos: 0
he revisado toda las faq y nada, no me entra...

es que soy tapado para esto del php

voy de nuevo con tu sugerencia y vere si me sale

gracias
  #15 (permalink)  
Antiguo 29/07/2004, 21:18
 
Fecha de Ingreso: noviembre-2002
Ubicación: Colombia
Mensajes: 278
Antigüedad: 21 años, 4 meses
Puntos: 0
!!!!!!!!!!!!!!!!!!por Finnnnnnnnnnnnnnnnnnn!!!!!!!!!!!!!!!!!!!!!!!

Gracias Cluster....
Ya Hicimos Que Funcionara!!!

Muchas Gracias.
  #16 (permalink)  
Antiguo 29/07/2004, 21:28
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cuando decia las "FAQ's" me refiero a una de las primeras donde tienes un buen montón de links hacia tutoriales de PHP .. leelos, por qué todo esto "no se nace sabiendo" .. pero se aprende leyendo (jeje .. me salió un pareado sin haberlo deseado o algo así era el refran xD).

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 08:12.