Foros del Web » Programando para Internet » PHP »

Cómo obtengo el ' ID ' de un registro insertado en una tabla ?

Estas en el tema de Cómo obtengo el ' ID ' de un registro insertado en una tabla ? en el foro de PHP en Foros del Web. Hola, tengo el siguiente problema, quizás puedan ayudarme: El código siguiente está en la página "grabar.php" que recibe los resultados de un formulario, el registro ...
  #1 (permalink)  
Antiguo 19/02/2006, 13:28
 
Fecha de Ingreso: noviembre-2005
Mensajes: 55
Antigüedad: 12 años
Puntos: 0
Cómo obtengo el ' ID ' de un registro insertado en una tabla ?

Hola, tengo el siguiente problema, quizás puedan ayudarme:

El código siguiente está en la página "grabar.php" que recibe los resultados de un formulario, el registro se graba sin problemas en la tabla " demo ", y queda asignado con un ID_CODIGO que es la clave única autonumérica de la tabla :


grabar.php :

?>

mysql_db_query("base1","insert into demo (nombre,edad) values ('$nombre','$edad')");

?>

<h1><div align="center">Registro Insertado</div></h1>

<div align="center"><a href="ver_registro.php">Verificar datos</a></div>

---------------------------------------------------------------------------

Y la página ver_registro.php :

<?
mysql_connect("localhost","root","");

$result=mysql_db_query("base1","select * from demo");
?>

<table align="center">
<tr>
<th>Código</th>
<th>Nombre</th>
<th>Edad</th>
</tr>

<?
//Muestro los registros ( es aquí donde quiero mostrar sólo el que se grabó antes )
while ($row=mysql_fetch_array($result))
{
echo '<tr>
<td>'.$row["ID_CODIGO"].'</td>';
echo '<td>'.$row["nombre"].'</td>';
echo '<td>'.$row["edad"].'</td>';
</tr>';
}
mysql_free_result($result)
?>
</table>


La tabla tiene más campos pero dejé sólo nombre y edad para este ejemplo.

Aquí me muestra todos los registros que hay en la tabla, pero yo necesito que me muestre solamente el registro que se cargó en "grabar.php" .

He pensado en hacer un select que coincida con el nombre y la edad pasando las variables por URL, pero esto no es correcto porque me puede traer un registro que tenga los mismos datos pero con un ID_CODIGO distinto al que se grabó en "grabar.php".

Pues no sé cómo traer el ID_CODIGO que se graba en grabar.php para mostrar el registro correcto.

Tampoco está bien que me muestre el último registro insertado porque puede haber más usuarios llenando el formulario y me traería quizás un registro equivocado.

En síntesis : en la página "ver_registro.php" necesito mostrar el registro grabado pero tendría que saber realmente cuál era su "ID_CODIGO" cuando se grabó en la tabla.

Por favor me pueden indicar cómo se hace ? muchas gracias.
  #2 (permalink)  
Antiguo 19/02/2006, 15:27
 
Fecha de Ingreso: diciembre-2005
Ubicación: Madrid, España
Mensajes: 154
Antigüedad: 12 años
Puntos: 2
Se me ocurre que puedes hacer el autoincrement con PHP en vez de directamente en MySQL, así no tienes el problema de traerte un registro equivocado.

$ID_CODIGO = mysql_query("SELECT MAX(ID_CODIGO) from tabla") + 1;

y luego insertas y pasas ID_CODIGO.

En el caso extremo de que dos usuarios intenten insertar el mismo ID_CODIGO, uno recibirá una excepción debido a la clave primaria, que puedes capturar, obligando a que se recalcule dicho ID_CODIGO.

Saludos
  #3 (permalink)  
Antiguo 19/02/2006, 15:34
 
Fecha de Ingreso: noviembre-2005
Mensajes: 55
Antigüedad: 12 años
Puntos: 0
Gracias Radian.

Hay alguna forma mas directa, he leído las faqs, pero no parecen seguras las instrucciones que alli se mencionan.

Gracias.
  #4 (permalink)  
Antiguo 19/02/2006, 16:10
 
Fecha de Ingreso: abril-2005
Mensajes: 139
Antigüedad: 12 años, 7 meses
Puntos: 1
Hola,

Podrias crear un campo con un codigo que solo valiera para una llamada, es decir solo valdria para llamar una vez a "ver registro", inmediatamente despues de haberlo creado.

Si sales del script la llamada ya no valdria.
TODO lo que te estoy diciendo es mera teoria porque nunca lo he probado.

La tabla ademas de "ID_CODIGO" que usarias para las operaciones normales deberiar llevar otro campo por ejemplo "UG_CODIGO".

Primero teoria:
uniqid() devuelve un identificador único con prefijo, basado en la hora actual en microsegundos.

GRABAR PHP
Código PHP:
//creamos el identificador unico que vamos a llamar "identificador"
$identificadormd5(uniqid(rand(), true));

mysql_db_query("base1","insert into demo (ug_codigo,nombre,edad) values ('ug_codigo','$nombre','$edad')");

echo
"<h1><div align='center'>Registro Insertado</div></h1>";

//aqui pasamos la variable por la url
echo"<div align='center'><a href=\"ver_registro.php?identificador=$identificador\">Verificar datos</a></div>"
ver registro

Código PHP:
//recibimos la variable identificador
$identificador=$_GET['identificador']

//hacemos la peticion a la base de datos

$result=mysql_db_query("base1","select * from demo WHERE identificador=$identificador");

//aqui sigues con lo demas 
Como te hedicho es teoria, pero espero que te sirva.
__________________
Ciao y suerte.
  #5 (permalink)  
Antiguo 19/02/2006, 22:59
 
Fecha de Ingreso: noviembre-2005
Mensajes: 55
Antigüedad: 12 años
Puntos: 0
Pleniluni0 : Me gusta tu ejemplo, voy a probarlo.

Un abrazo y muchísimas gracias.
  #6 (permalink)  
Antiguo 20/02/2006, 02:36
Avatar de oskarL  
Fecha de Ingreso: mayo-2005
Ubicación: Madrid
Mensajes: 499
Antigüedad: 12 años, 7 meses
Puntos: 2
mysql_insert_id

Os complicais demasiado. Yo utilizo mysql_insert_id(), pero eso si, solo funciona con identificadores autoincrementables.

Si lo pones justo despues del insert, hay muy pocas probabilidades de que te devuelva un identificador de otra persona que este rellenando el formulario al mismo tiempo.
__________________
Solo hay 10 clases de personas, las que saben binario y las que no.
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:27.