Foros del Web » Programando para Internet » PHP »

Como verificar si existe registro antes de hacer INSERT

Estas en el tema de Como verificar si existe registro antes de hacer INSERT en el foro de PHP en Foros del Web. Hola que tal, Bueno tengo un código el cual a través de $id = mt_rand(100000, 999999); genere un $ID aleatorio de 6 digitos. Una vez ...
  #1 (permalink)  
Antiguo 15/11/2005, 21:49
Avatar de CHILENOCES  
Fecha de Ingreso: octubre-2001
Ubicación: Mmm paseando por la vida
Mensajes: 491
Antigüedad: 22 años, 6 meses
Puntos: 0
Pregunta Como verificar si existe registro antes de hacer INSERT

Hola que tal,
Bueno tengo un código el cual a través de $id = mt_rand(100000, 999999);
genere un $ID aleatorio de 6 digitos.

Una vez ingresado queda archivado y todo perfectamente, me gustaría saber como antes del INSERT hago una verificacion si existe el campo y si no que recargue el envio para que genere un nuevo ID que no exista en la BD.

El codigo del INSERT es:

Código PHP:
//Determinamos la fecha del Ticket
$fecha getDate();
$mesesillos[1] = "Enero";
$mesesillos[2] = "Febrero";
$mesesillos[3] = "Marzo";
$mesesillos[4] = "Abril";
$mesesillos[5] = "Mayo";
$mesesillos[6] = "Junio";
$mesesillos[7] = "Julio";
$mesesillos[8] = "Agosto";
$mesesillos[9] = "Septiembre";
$mesesillos[10] = "Octubre";
$mesesillos[11] = "Noviembre";
$mesesillos[12] = "Diciembre";
$mes=$fecha["mon"];
$fec $fecha["mday"]." de ".$mesesillos["$mes"]." de ".$fecha["year"];

//Creamos el ID del Ticket
$id =  mt_rand(100000999999);

//Insertamos el Ticket
$sql "INSERT INTO tickets (nombre,
email,
telefono,
sitioweb,
departamento,
titulo,
mensaje,
estatus,
ID,
prioridad,
fecha) VALUES ('$_POST[nombre]',
'$_POST[email]',
'$_POST[telefono]',
'$_POST[sitioweb]',
'$_POST[departamento]',
'$_POST[titulo]',
'$_POST[mensaje]',
'Abierto',
'$id',
'$_POST[prioridad]',
'$fec')"
;

if(
$result mysql_query($sql)) 
echo 
"Ticket Agregado"
Ojala se entienda y muchas gracias.
__________________
ChilenoCesar Looking for something new...
  #2 (permalink)  
Antiguo 15/11/2005, 22:57
Avatar de jahepi
Colaborador
 
Fecha de Ingreso: diciembre-2004
Ubicación: Querétaro
Mensajes: 1.124
Antigüedad: 19 años, 4 meses
Puntos: 43
Hola chilenoces!

Déjame ver si te entendí, la variable que contiene el número aleatorio, lo insertas en la base de datos, posteriormente quieres verificar si ese ID no existe, no? , y en base a eso añadir el registro.

Tendrías que hacer una consulta previa para ver si existe el ID.

Código PHP:
$query "SELECT ID FROM tickets WHERE ID = $id";
if(
$resultado mysql_query($query)){

        if(
mysql_num_rows($resultado) == 0){

                    
//Si no hay registros con ese id
                    //Pasas a insertar el registro...
     
}

Suerte!
__________________
Una contraseña es como la ropa interior. No deberías dejarlas afuera a la vista de otras personas, deberías cambiarla regularmente, y ni se te ocurra prestarla a extraños.
  #3 (permalink)  
Antiguo 16/11/2005, 21:44
Avatar de CHILENOCES  
Fecha de Ingreso: octubre-2001
Ubicación: Mmm paseando por la vida
Mensajes: 491
Antigüedad: 22 años, 6 meses
Puntos: 0
Hola,
Bueno la respuesta esta correcta, ahora lo siguiente: esta obvio como quedaría el código :
Código PHP:
//Creamos el ID del Ticket
$id =  mt_rand(100000999999);

$query "SELECT ID FROM tickets WHERE ID = $id";
if(
$resultado mysql_query($query)){

        if(
mysql_num_rows($resultado) == 0){

//Insertamos el Ticket
$sql "INSERT INTO tickets (nombre,email,telefono,sitioweb,departamento,titulo,mensaje,estatus,ID,prioridad,fecha) VALUES ('$_POST[nombre]','$_POST[email]','$_POST[telefono]','$_POST[sitioweb]','$_POST[departamento]','$_POST[titulo]','$_POST[mensaje]','Abierto','$id','$_POST[prioridad]','$fec')";

if(
$result mysql_query($sql)) 
header("Location: index.php");


     }

pero como hago el else para que si encontró un ID igual vuelva a crear otro ID para ser insertado inmediatamente sin tener que enviar al visitante a la página del formulario para que lo llene otra vez?

Saludos.

jam1138:
Por favor hay que encerrar código. Edité para hacerlo pués "rompia con la estructura" del sitio
__________________
ChilenoCesar Looking for something new...

Última edición por jam1138; 17/11/2005 a las 02:14
  #4 (permalink)  
Antiguo 17/11/2005, 02:01
Avatar de deskman  
Fecha de Ingreso: noviembre-2005
Ubicación: Chorrillos Lima - Peru
Mensajes: 28
Antigüedad: 18 años, 5 meses
Puntos: 1
Hola Chilenoces

Bueno yo le di un vistazo a tu codigo y lo intente solucionar asi, no se si estara bien no lo he probado aun, pero ahi les va

Código PHP:
///////Creo un bucle y dentro creo el id y reviso si existe, si es asi, creo otro id hasta que salga del bucle y pueda guardar los datos

while ($num_results 0)
{
    
$id mt_rand(100000999999);

    
$query "SELECT ID FROM tickets WHERE ID = $id";
    
$resultado mysql_query($query))
    
        
$num_results mysql_num_rows($resultado);
    
}
////////Si salio del bucle quiere decir que el numero de registros con un ID igual al generado fue 0 entonces
///////Insertamos el Ticket
        
$sql "INSERT INTO tickets (nombre,email,telefono,sitioweb,departamento,titul     
        o,mensaje,estatus,ID,prioridad,fecha) VALUES 
('$_POST[nombre]','$_POST[email]','$_POST[telefono]','$_POST[sitioweb]','$_POST[departamento]','$_POST[titulo]','$_POST[mensaje]','Abierto','$id','$_POST[prioridad]','$fec')"
;

        
////Si se ha insertado regresamos al index
        
if($result mysql_query($sql))
        
header("Location: index.php"); 
Espero cualquier correccion con ansias, recien estoy comenzando
  #5 (permalink)  
Antiguo 17/11/2005, 02:20
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 8 meses
Puntos: 102
Código PHP:
while ($num_results 0
E inicialmente de dónde va a salir $num_results para hacer la comparación??. Bien podrías darle un valor directamente antes de bucle para que cumpla la condición... ó podrías hacer un do...while():
Código PHP:
 do {
    
$id mt_rand(100000999999);

    
$query "SELECT ID FROM tickets WHERE ID = $id";
    
$resultado mysql_query($query))
    
        
$num_results mysql_num_rows($resultado);
    
} while (
$num_results 0); 
Yo te sugeriría planetear esto en el foro de MySQL por si hay algúna solución de aquel lado (lo desconosco, aunque muy probablemente la haya). Realmente esto no podría ser efectivo... aunque es poco probable por el rango de carácteres, podrías hacer demasiadas consultas... ¿por qué la necesidad de un id aleatorio?? .

__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #6 (permalink)  
Antiguo 17/11/2005, 07:33
Avatar de CHILENOCES  
Fecha de Ingreso: octubre-2001
Ubicación: Mmm paseando por la vida
Mensajes: 491
Antigüedad: 22 años, 6 meses
Puntos: 0
bueno no sé si te has fijado en los Tickets de Soporte Tecnico ??? bueno eso es mas bien lo que estoy haciendo ya que no encuentro nada bueno bonito y barato jeje y mas encima en español asi que apenas lo terminé me gustaría compartirlo con todos ustedes para ir mejoradolo pero mientras lo hago necesito algunas ayuditas y el ID aleatorio es por eso porque en esos sistemas de tickets son ID's aleatorio en mi caso son 654647 numericos y en otros casos son con letras y numeros ZXFDfwee4235536sdzxzdsD jejejej pero bueno ojala se pueda con mi consulta.


Saludos!
__________________
ChilenoCesar Looking for something new...
  #7 (permalink)  
Antiguo 17/11/2005, 18:56
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 8 meses
Puntos: 102
La verdad que no me he fijado (ni los conosco) en los Tickets qu emencionas... Soporte Técnido de qué??? ¿?.

Cita:
pero bueno ojala se pueda con mi consulta.
¿Otra aparte??... no capté cuál.

Por cierto, para generar códigos aleatorios tienes algunas buenas funciones en las FAQ... para no variar . También hay una FAQ que dice "Cómo evitar registros duplicados" la cuál fue tu primer consulta y verás que el método es el mismo.

Saludos y suerte!
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #8 (permalink)  
Antiguo 30/12/2009, 13:10
 
Fecha de Ingreso: diciembre-2009
Ubicación: Guayaquil
Mensajes: 16
Antigüedad: 14 años, 4 meses
Puntos: 1
Respuesta: Como verificar si existe registro antes de hacer INSERT

Jeje que tal! imagino que has de estar trabajando en MySQL:


Bien puedes declararle un AUTOINCREMENT al id_tabla que sería tu primary key además, con eso te kitarías un peso de generar codigos aleatorios y verificar si existe o no!

También puede ser que estes ingresando registros en varias tablas y quieras tener un identificador para saber que campos kieres agregar/modificar. En mi caso io no uso códigos sino un TIMESTAMP puesto que al tener una serie de numeros(14 entre fecha y hora) irrepetibles sirve ojo para transacciones que no demanden gran cantidad de llamadas y modificaciones de la Base de datos puesto que podría existir concurrencia si se realiza en las mismas milésimas de un segundo(casi nunca pasa pero queda la probabilidad)


el código a probar para un Autoincrement sería el siguiente:

CREATE TABLE `BD`.`tabla` (
`id_tabla` INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`nombre` VARCHAR( 50 ) NOT NULL ,
`blabla` VARCHAR( 50 ) NULL
) ENGINE = MYISAM


donde cada que agregues un registro el siguiente id será el anterior + 1


espero te sea de ayuda ;)

y así hasta completar la cadena de 11numeros (00000000000 hasta 99999999999)
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 22:26.