Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Ciclo DO While para verificar un dato

Estas en el tema de Ciclo DO While para verificar un dato en el foro de PHP en Foros del Web. Hola estoy tratando de hacer una especie de generador de código y que estos no se repitan en la base de datos y estoy utilizando ...
  #1 (permalink)  
Antiguo 18/04/2015, 20:52
Avatar de MLDGATO  
Fecha de Ingreso: marzo-2011
Ubicación: Guatemala
Mensajes: 113
Antigüedad: 13 años, 8 meses
Puntos: 2
Pregunta Ciclo DO While para verificar un dato

Hola estoy tratando de hacer una especie de generador de código y que estos no se repitan en la base de datos y estoy utilizando un ciclo Do While, según entiendo este ciclo se ejecuta por lo menos 1 vez o mientras no se cumpla una condición, este es el código que tengo:

Código PHP:
Ver original
  1. $verificar = 2;
  2. //Funcion para generar códigos aleatorios
  3. function generarCodigo()
  4. {
  5.     $key = '';
  6.     $pattern = '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ';
  7.     $max = strlen($pattern)-1;
  8.     for($i=0; $i < 10; $i++) $key .= $pattern{mt_rand(0,$max)};
  9.     return $key;
  10. }
  11. do
  12. {
  13.     $IdEmpresa = "PU-".date("dmY")."-".generarCodigo();
  14.     $consultaExiste = mysqli_query($conexion, "SELECT IdEmpresa FROM smntr_Perfil_1_InfoEmpresa WHERE IdEmpresa = '".$IdEmpresa."'") or die(mysqli_error($conexion));
  15.     $verificar = mysqli_num_rows($consultaExiste);
  16. }
  17. while($verificar < 1);
  #2 (permalink)  
Antiguo 18/04/2015, 21:32
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
Puntos: 977
Respuesta: Ciclo DO While para verificar un dato

Sé que hay muchas formas de lograr lo que buscas, pero pienso que si el código se basara en la fecha y hora (transformada en milésimas de segundo) en la que se realiza la acción, no debería de repetirse el código y ya no habría necesidad de realizar consultas. El problema surgiría cuando alguien cambie la fecha y hora del servidor y trate de colocarla al mismo instante en el que ocurrió la acción, pero aún así sería complicado ya que las posibilidades de que se realice la acción exactamente en el mismo instante (contabilizando las milésimas de segundo) es muy baja. Ya si aún así desconfías, continúa con lo que estás intentando.

No olvides tener a dicho campo como índice único en la tabla.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #3 (permalink)  
Antiguo 18/04/2015, 22:13
Avatar de gildus  
Fecha de Ingreso: agosto-2003
Mensajes: 1.495
Antigüedad: 21 años, 3 meses
Puntos: 105
Respuesta: Ciclo DO While para verificar un dato

Holas,

No recomiendo mucho tener consultas a la BD dentro de un bucle, en lo posible seria lo mejor obviarlas, porque te consumirías muchísimo recurso.

Te recomiendo que usar sha1 al id de tu tabla (IdEmpresa) junto con uniqid, asi evitarias duplicados. Otra forma seria usar uniqid y que esta a su vez sea un indice unico en tu tabla asi evitarias duplicidad, en caso de que exista puedes capturarlo en un try catch para generar otro uniqid.

Ya nos comentas.

Saludos,
__________________
.: Gildus :.
  #4 (permalink)  
Antiguo 19/04/2015, 16:05
Avatar de MLDGATO  
Fecha de Ingreso: marzo-2011
Ubicación: Guatemala
Mensajes: 113
Antigüedad: 13 años, 8 meses
Puntos: 2
Respuesta: Ciclo DO While para verificar un dato

Cita:
Iniciado por gildus Ver Mensaje
Holas,

No recomiendo mucho tener consultas a la BD dentro de un bucle, en lo posible seria lo mejor obviarlas, porque te consumirías muchísimo recurso.

Te recomiendo que usar sha1 al id de tu tabla (IdEmpresa) junto con uniqid, asi evitarias duplicados. Otra forma seria usar uniqid y que esta a su vez sea un indice unico en tu tabla asi evitarias duplicidad, en caso de que exista puedes capturarlo en un try catch para generar otro uniqid.

Ya nos comentas.

Saludos,
Gracias el uniquid me sirvió mucho

Etiquetas: ciclos
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 21:14.