Foros del Web » Programando para Internet » PHP »

Como generar ID aleatorio en una base de datos

Estas en el tema de Como generar ID aleatorio en una base de datos en el foro de PHP en Foros del Web. Mi duda es como lo describe el título... Tengo un formulario y cuando le de al boton "submit", este me genere un ID aleatorio y ...
  #1 (permalink)  
Antiguo 02/05/2014, 19:24
 
Fecha de Ingreso: abril-2014
Mensajes: 26
Antigüedad: 10 años
Puntos: 0
Como generar ID aleatorio en una base de datos

Mi duda es como lo describe el título...

Tengo un formulario y cuando le de al boton "submit", este me genere un ID aleatorio y lo escriba automaticamente en un campo de mi tabla.


Cabe recalcar que este ID aleatorio No se debe repetir y ser cualquier número que tenga 4 cifras.

Muy similar a lo que hace youtube en sus links, es precisamente ese fin... para usarlo en los links.

No uso el "autoincrement" de MYSQL porque no quiero que sea una sucesión consecutivos de numeros.

Ojala alguien me pueda ayudar.

Gracias!!
  #2 (permalink)  
Antiguo 02/05/2014, 20:29
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Como generar ID aleatorio en una base de datos

Tienes varias opciones en: http://www.forosdelweb.com/f18/opini...words-1090292/

El único problema que veo es que tendrás que verificar que la ID no haya sido usada previamente, incrementando el total de consultas.
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 02/05/2014, 20:31
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Como generar ID aleatorio en una base de datos

Muy bonita la idea, pero tiene un pequeño problema: A medida que vayas usando números, y estos no puedan repetirse, el tiempo de creación y verificación del valor obtenido aleatoriamente derivará hacia el infinito...
Es un pequeñísimo problema que no se nota hasta que no hayas ocupado la mitad de los numeroso posibles.
No te recomiendo la idea.

¿Hay alguna razón específica para que no uses incrementales, o es simplemente que NO QUIERES usarlos?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 03/05/2014, 09:11
 
Fecha de Ingreso: abril-2014
Mensajes: 26
Antigüedad: 10 años
Puntos: 0
Respuesta: Como generar ID aleatorio en una base de datos

Uhm se ve fácil el codigo usando rand() mi preocupación es como hacer la consulta en tiempo real de que el codigo generado no exista en la BD porque si le doy al botón submit y recien me haga la consulta... tendría que hacerlo muchisimas veces si sale error, por lo que esa no es la idea.

Yo si uso en la tabla el autoincrement con valor primario llamandolo así : id y en el segundo campo lo llamo: idFAKE que es aqui donde le coloco un id autogenerado aleatoriamente y que NO se repita.

La razón es :
Tengo un botón y cuando el usuario le haga click me valla a un adfly y cuando me redireccione finalmente a la página, esta va a salir su contenido según lo seleccionado pasando por parámetros el ID de este, el chiste es que si esto sería consecutivo... para el usuario le es fácil adivinar que el siguiente link sea por ejemplo 1523 ya que el anterior fue 1522 y me acceda directamente haciendo esto y no desde el botón.

Por ese pequeño problema que mencionas, decís que no se nota hasta que haya ocupado la mitad de numeros posibles... sabiendo que son de 4 cifras osea desde 1000 hasta 9999, la mitad sería 4500 temas...ufff es imposible que tan siquiera alcance el 50% de eso, así que creo yo que no hay problemas xD!
  #5 (permalink)  
Antiguo 03/05/2014, 10:08
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: Como generar ID aleatorio en una base de datos

Un id autoincremental tiene muchas ventajas, entre ellas velocidad, siempre deberias usarlo.

Puedes hacer varias cosas con esos numeros:

- Si los distancias sumando una constante k, ya no son consecuitivos
- Si les aplicas una funcion lineal, necesitan al menos 3 Ids para advertir esa distribucion y obtener la ecuacion
- Podrias usar un polinomio de grado mayor (2 por ejemplo)

Te dejo un ejemplo de HASH simple que te hice:

Código PHP:
<?php
/*
    @author: Pablo Bozzolo
*/

# auxiliar
function swapstr($s){    
    
$endpos strlen($s)-1;
    
$last     $s[$endpos];
    
$first  $s[0];
    
$s substr_replace ($s $last ,01); 
    
$s substr_replace ($s $first ,$endpos1); 
    return 
$s;
}

# coding
function ofusca_key($n){
    return 
swapstr(strval(dechex(1000 $n*$n)));
}    
    
#decoding
function desofusca_key($s){
    return 
sqrt(hexdec(swapstr($s)) -1000);
}    


// Ejemplo
$n 3500;

echo 
ofusca_key($n)."\n";
echo 
desofusca_key(ofusca_key($n));
Tu muestras el ID ofuscado en la URL y cuando te quieres devolver para con el parametro GET recuperar tus datos, usas la funcion inversa desofusca_key()

Si te fijas el ID=1 ya se convierte en algo medio complicado de decodificar

Podrias complicarla mas con mascara de bits
__________________
Salu2!

Última edición por Italico76; 04/05/2014 a las 05:46
  #6 (permalink)  
Antiguo 04/05/2014, 09:16
 
Fecha de Ingreso: abril-2014
Mensajes: 26
Antigüedad: 10 años
Puntos: 0
Respuesta: Como generar ID aleatorio en una base de datos

Cita:
Iniciado por Italico76 Ver Mensaje
Tu muestras el ID ofuscado en la URL y cuando te quieres devolver para con el parametro GET recuperar tus datos, usas la funcion inversa desofusca_key()
:O gracias por esa alternativa...

Como mi nombre lo dice... estoy aprendiendo aún. por eso me quedan 2 dudas :

1. Porque si usar un ID aleatorio y que no se repita en la BD no estan recomendable... entonces porque YOUTUBE y otra páginas superconocidas hacen lo mismo?? o es que no hacen necesariamente eso, sino, aplican algo parecido a lo que me haz puesto?

2. No me queda muy claro como implementarlo a mi formulario... me podrías hechar una mano?

Código PHP:
<?php
$editFormAction 
$_SERVER['PHP_SELF'];
if (isset(
$_SERVER['QUERY_STRING'])) {
  
$editFormAction .= "?" htmlentities($_SERVER['QUERY_STRING']);
}

if ((isset(
$_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
  
$insertSQL sprintf("INSERT INTO tblpagina (idPagina) VALUES (%s)",
                       
GetSQLValueString($_POST['idPagina'], "text"));

  
mysql_select_db($database_conexionshopnyx$conexionshopnyx);
  
$Result1 mysql_query($insertSQL$conexionshopnyx) or die(mysql_error());

  
$insertGoTo "pagina.php";
  if (isset(
$_SERVER['QUERY_STRING'])) {
    
$insertGoTo .= (strpos($insertGoTo'?')) ? "&" "?";
    
$insertGoTo .= $_SERVER['QUERY_STRING'];
  }
  
header(sprintf("Location: %s"$insertGoTo));
}
?>
Código HTML:
<form method="post" name="form1" action="<?php echo $editFormAction; ?>">
  		<input type="hidden" value="idPagina">
  		<input type="submit" value="Crear categoría!" class="button">
  		<input type="hidden" name="MM_insert" value="form1">
	</form> 
Lo pongo en un input oculto el ID, porque quiero obviamente que este se cree y guarde automaticamente.
  #7 (permalink)  
Antiguo 04/05/2014, 09:45
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: Como generar ID aleatorio en una base de datos

Para colocarlo en tu sistema:

Código PHP:
Ver original
  1. <?php
  2. // "descargar.php"
  3. // Pagina donde recupero el Id y muestro un 'registro'
  4.  
  5. include "ofuscador de id.php";
  6.  
  7. $id = desofusca_key($_GET['id']);
  8.  
  9. // SELECT * FROM tabla WHERE id=$id
  10. ?>

Código PHP:
Ver original
  1. <?php
  2. // Pagina que posee el enlace ofuscado
  3. include "ofuscador de id.php";
  4.  
  5. // de la base de datos recupero un registro o registros con sus Id
  6.  
  7. ?>
  8.  
  9. <a href="descargar.php?id=<?php echo ofusca_key($id); ?>">Ir a pagina de descarga</a>
__________________
Salu2!
  #8 (permalink)  
Antiguo 04/05/2014, 10:30
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Como generar ID aleatorio en una base de datos

Cita:
1. Porque si usar un ID aleatorio y que no se repita en la BD no estan recomendable... entonces porque YOUTUBE y otra páginas superconocidas hacen lo mismo?? o es que no hacen necesariamente eso, sino, aplican algo parecido a lo que me haz puesto?
¿Quien te dijo que son números aleatorios?
Los identificadores de ese tipo no se contruyen con números aleatorios, y si lo hacen con ellos no se usan necesariamente números únicos, ya que esos números no son PK .
En todo caso, existen otras funciones en los DBMS para crear identificadores únicos, que no son numéricos.
Además, porque una mala idea se proponga mucho, no quiere decir que se transforme en una buena idea.
Finalmente: El planteo de que un mismo usuario puede "adivinar" cuál es el siguiente número de una secuencia sólo tendría sentido en un sistema de único usuario. Con sólo que haya dos simultáneos generando con su navegación diferentes cantidades de identificadores al mismo tiempo, ya es imposible que puedan hacer esa adivinación.
En ese caso, el acceso a ese identificador requeriría un dato adicional, por ejemplo el username o nick del user. De ese modo, al usar una clave combinada, la probabilidad de acceso a los datos se reduce drásticamente.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: formulario, mysql, tabla
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 20:59.