elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  Numero Aleatorio en PHP o MYSQL pero que NO se repita nunca
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Numero Aleatorio en PHP o MYSQL pero que NO se repita nunca  (Leído 22,697 veces)
MakiaResc

Desconectado Desconectado

Mensajes: 229


Mundote - Informacion Sin Limites


Ver Perfil WWW
Numero Aleatorio en PHP o MYSQL pero que NO se repita nunca
« en: 13 Marzo 2008, 23:58 pm »


Miren lo que pasa es lo siguiente, quiero que en php o mysql se genere un numero y que me lo muestre en un textarea, bueno pero aqui lo que se me hace dificil es que no tengo ni idea de como hacerlo....

Se que siempre decimos en internet, primero busca y luego pregunta asi que ya lo hice y aqui voy a dar la informacion que puede encontrar y que un user le funciono pero yo no se ni como....

En si busco que se genere un numero  el cual pueda mostrar en un echo con php ya posteriormente esto se edita, pero quiero que este numero no se vuelva a repetir nunca de los nuncas.

Voy a poner un ejemplo de lo que busco que pase, haber si alguien me ayuda.....

Ejemplo:


No. de Pedido #

Titulo:

Nombre:

Descripcion:


En si esto es un formulario, pero en el numero de pedido es donde quiero que aparezca un numero aleatorio de 4 o 5 cifras ya sea numerico o alfanumerico, es por ello que el numero de pedido debe ser imposible de repetirce....

Si alguien sabe como hacer esto ayudenme se los agradecere bastante.

Esta es la info que encontre en internet la cual se que es SQL pero no se como crear la tabla u/o usarlo.

Código:
function nuevorand($lista) {
     srand ((double) microtime( )*1000000);
     do {
        $random_number = rand(0,1000);
    } while (in_array($random_number,$lista));
    return $random_number;
}

$usados = array();
$busqueda= mysql_query("SELECT numsocio FROM usuarios");
while($fila = mysql_fetch_assoc($busqueda)) {
    $usados[] = $fila["numsocio"];
}
$numsocio = nuevorand($usados); 

Supongo que esto es lo que se necesita para hacer la conexión a la base de datos.

Código:
<?
$direccion = 'localhost';
$usuario = 'usuario';
$password = 'password';
$db=mysql_connect($direccion,$usuario,$password);
mysql_select_db("nombre_de_la_db",$db);
?>

De antemano gracias y eespero sus respuestas





En línea

Ertai
Colaborador
***
Desconectado Desconectado

Mensajes: 2.025


Ralph Wiggum


Ver Perfil
Re: Numero Aleatorio en PHP o MYSQL pero que NO se repita nunca
« Respuesta #1 en: 14 Marzo 2008, 01:11 am »

No sería más facil usar el autoincrement de SQL?


En línea

Si la felicidad se comprara, entonces el dinero sería noble.

Código:
void rotar_by_ref(int& a, int& b) {
   /* Quien dijo que no se podia sin una variable temporal? */
   *a = *a ^ *b;
   *b = *a ^ *b;
   *a = *a ^ *b;
}
MakiaResc

Desconectado Desconectado

Mensajes: 229


Mundote - Informacion Sin Limites


Ver Perfil WWW
Re: Numero Aleatorio en PHP o MYSQL pero que NO se repita nunca
« Respuesta #2 en: 14 Marzo 2008, 01:48 am »

Gracias por tu respuesta, y... disculpa mi ignorancia, pero que es lo que tendria que hacer....?

Tendria que crear una tabla en mysql ¿Como?
¿Luego como hago para mostrar el valor que arroje el mysql?

De antemano te agradezco tu pronta respuesta y espero me puedas ayudar mientras buscare info de lo que acabas de mencionar....

Gracias por tu respuesta y espero puedas seguir ayudandome
En línea

Azielito
no es
Colaborador
***
Desconectado Desconectado

Mensajes: 9.188


>.<


Ver Perfil WWW
Re: Numero Aleatorio en PHP o MYSQL pero que NO se repita nunca
« Respuesta #3 en: 14 Marzo 2008, 17:34 pm »

Pues que hacer un campo y le dices que sera autoincrement xD

o sea
Código
  1. CREATE TABLE `DB`.`tabla` (
  2. `ped_id` INT( 5 ) NOT NULL AUTO_INCREMENT PRIMARY KEY
  3. )
donde DB es la base de datos
tabla es la tabla ¬¬
ped_id es el nombre dcel campo
5 es la longitud del campo
NOT NULL siempre tendra que tener algo ¬¬
AUTO_INCREMENT es el que hace la magia de auto incrementar xD
PRIMARY KEY le dice que es la llave primaria, para eso de las relaciones en tablas y demas te ayuda bastante

ahora, quieres una longitud en el id del pedido entonces podrias usar el str_pad de php, o sea, la funcion
Código
  1. <?php
  2. str_pad(); // <- click para mas info
  3. $cadena_original = "el id del registro actual"
  4. $pedidoNo = str_pad($cadena_original, 5, "0", STR_PAD_LEFT);
  5.  
  6. ?>


y listo, tendras un

"00001"
"00002"
[...]
"00526"
y asi hasta que se terminen xD

Tambien podrias usar un campo entero y basarte en la funcion time() de php
Código
  1. $id = time(); // click en el nombre de la funcion para mas info
  2.  

igual nunca se repite :)

o un campo timestamp (creo que asi se llama) en tu tabla :)
« Última modificación: 24 Marzo 2008, 17:33 pm por Azielito » En línea

MakiaResc

Desconectado Desconectado

Mensajes: 229


Mundote - Informacion Sin Limites


Ver Perfil WWW
Re: Numero Aleatorio en PHP o MYSQL pero que NO se repita nunca
« Respuesta #4 en: 15 Marzo 2008, 18:44 pm »

Al crear la base de datos me quedo asi:

Código:
Tabla pedido se creó.

consulta SQL:
CREATE TABLE `pedido` (
`id` INT( 5 ) NOT NULL AUTO_INCREMENT , PRIMARY KEY ( `id` )
) TYPE = MYISAM ;

Lego en el codgio que me diste lo puse del siguiente modo...

Código:
<?
$direccion = 'localhost';
$usuario = 'acclasto_C';
$password = 'zoloVUlo68';
$db=mysql_connect($direccion,$usuario,$password);
mysql_select_db("acclasto_pedido",$db);

str_pad();
$cadena_original = "el id del registro actual"
var $pedidoNo = str_pad($cadena_original, 5, "0", STR_PAD_LEFT);

?>

Y me marco el siguiente error:
Código:
Parse error: syntax error, unexpected T_VAR in /home/acclasto/public_html/pedido.php on line 10

Que crees tu que este haciendo mal o por que razon crees que me marce este error?

Lo estoy haciendo bien o hice algo mal????

En línea

SirLanceCC


Desconectado Desconectado

Mensajes: 1.093


Ver Perfil WWW
Re: Numero Aleatorio en PHP o MYSQL pero que NO se repita nunca
« Respuesta #5 en: 16 Marzo 2008, 19:40 pm »

Citar
Parse error: syntax error, unexpected T_VAR in /home/acclasto/public_html/pedido.php on line 10

Código
  1. $cadena_original = "el id del registro actual" // FALTA PUNTO Y COMA
  2. var $pedidoNo = str_pad($cadena_original, 5, "0", STR_PAD_LEFT); // LINEA 10
  3.  
En línea

h4ck3r_multidimensional

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Re: Numero Aleatorio en PHP o MYSQL pero que NO se repita nunca
« Respuesta #6 en: 20 Marzo 2008, 00:00 am »

Citar
Parse error: syntax error, unexpected T_VAR in /home/acclasto/public_html/pedido.php on line 10

Código
  1. $cadena_original = "el id del registro actual" // FALTA PUNTO Y COMA
  2. var $pedidoNo = str_pad($cadena_original, 5, "0", STR_PAD_LEFT); // LINEA 10
  3.  

Asielito y Sir_Lance, un consejo, no mezclen javascript con PHP, o de última entren a php.net y fijense para que sirve la palabra reservada VAR, http://ar.php.net/manual/es/language.oop.php#keyword.class , esta se utiliza sólo en la definición de los datos o variables miembro de una clase, o en javascript para declarar como se debe una variable, pero después... ahi ven lo que dice el interprete de php

Código
  1. Parse error: syntax error, unexpected T_VAR in [...]
  2.  

Que yo sepa, en los años que vengo programando en PHP esa manera de declarar variables externas a una clase no existe.

Así que ponganle un poco de onda y si van a explicarle algo al alguien que al menos no tenga errores.

MakiaResc,
Si querés generar claves principales o primarias en una tabla de una base de datos, y que sean distintas, tenés dos opciones, en realidad hay varias, pero se usan mucho estas dos, o tomas un campo entero (INT) con una logitúd sufiente como para poder soportar una cierta cantidad de registros, utilizando este campo con la opción AUNTO_INCREMENT o simplemente definis varios campos y en combinación con los que elegístes formas una clave primaria, yo la mayoría de las veces opto por la primer opción, es la más fácil, pero cuando se puede uso la combinación de dos o más campos.

Código
  1. ## crea una base de ejemplo
  2. CREATE DATABASE ejemplo;
  3.  
  4. ## le decimos que usamos la base 'ejemplo'
  5. USE ejemplo;  
  6.  
  7. ## creamos la tabla de ejemplo
  8. CREATE TABLE tabla_ejemplo (  
  9.  <claveprimaria> INT( <longitúd del campo> )  NOT NULL AUTO_INCREMENT PRIMARY KEY
  10. )TYPE=MyISAM;
  11.  
  12. ## obviamente no hace falta crear ninguna base ni tabla si se cuenta con una,
  13. ## es un ejemplo, está ASí para hacerlo más completo.
  14.  

En donde dice <claveprimaria> iría el nombre que le quieras dar al campo, y en donde dice <longitúd del campo> va la cantidad de dígitos que necesitas usar, en esta página http://dev.mysql.com/doc/refman/5.1/en/numeric-types.html tenés todos los tipos de datos con sus rangos numéricos aceptables. Para que te dés una idea si en vez de declarar el campo de clave principal como INT lo declaras como DOUBLE, tenés una cantidad posible de registros de 18.446.744.073.709.551.615, unos 18 trillones y medio, fijate si te alcanza  ;D igual quedate tranquilo que hay de más rango, pero se usan para cálculos con punto flotante, "números con coma" de gran tamaño. Para ver más cerca de esto, y que te quede más claro, el mejor lugar para mí, es mysql.org, ese link que te pasé es de ahí, mejor información que esa, la de los fabricantes no creo que encuentres, sin desmerecer a la gente que postea "cosas buenas" que también tienen sus méritos.

Y por último, NO lleva var una declaración de variable por eso:

Código
  1. var $pedidoNo = str_pad($cadena_original, 5, "0", STR_PAD_LEFT);
  2.  

te da error, por que ese var ahí no tiene que existir, sacalo y probalo.

Código
  1. $pedidoNo = str_pad($cadena_original, 5, "0", STR_PAD_LEFT);
  2.  

Igual lo que hace eso es rellenar con ceros la cadena que se encuentre en $cadena original hasta llegar a una longitúd de 5 caracteres en total, o sea los de $cadena_original + los ceros que se le agreguen, eso supongo que es para no mostrar el número así a secas, en vez de 120, por ejemplo mostraría 00120, no está mal, queda prolijo.

Bueno, me voy por que tengo que seguir trabajando, saludos y acuerdense de ponerle onda cuando explican y tratar de no pifiarla, -| Sir_Lance |- la pifió arriba de Azielito  :o , ta bien igual, somos todos humanos, y no se aprende de otra cosa que no sean los errores muchachos  ;D, así que a darle duro nomás.

Salu2.
En línea

alone-in-the-chat


Desconectado Desconectado

Mensajes: 587


Ver Perfil
Re: Numero Aleatorio en PHP o MYSQL pero que NO se repita nunca
« Respuesta #7 en: 20 Marzo 2008, 15:42 pm »

 :-\


« Última modificación: 20 Marzo 2008, 15:47 pm por alone-in-the-chat » En línea

Because maybe
You're gonna be the one that saves me
And after all
You're my wonderwall
d[n_n]b
Azielito
no es
Colaborador
***
Desconectado Desconectado

Mensajes: 9.188


>.<


Ver Perfil WWW
Re: Numero Aleatorio en PHP o MYSQL pero que NO se repita nunca
« Respuesta #8 en: 24 Marzo 2008, 17:33 pm »

jahahahahahaah!!!

no me di cuenta que puse "var" al inicio x'DDDDDDDDDDDD

perdon, es que estaba trabajando con javascript en el trabajo y se me mesclaron los lenguajes xDDDD

ya esta arreglado :P

gracias por el aviso
En línea

Override

Desconectado Desconectado

Mensajes: 242



Ver Perfil WWW
Re: Numero Aleatorio en PHP o MYSQL pero que NO se repita nunca
« Respuesta #9 en: 29 Marzo 2008, 07:45 am »

Me pidieron algo asì la semana pasada en el trabajo... los numeros aleatorios que habian que generar no debeian ser repetidos con los que habia en una tabla en una base de datos MySQL... estos numeros serìan "ordenes de pedido" ...


Lo que yo hice fuè generar numeros aleatorios, luego hacer una consulta buscandolo (SELECT numero FROM tabla WHERE numero = '$numaleatoriogenerado')

y con un algoritmo recursivo comprobaba de nuevo en la db el numero generado si no existia entonces lo mostraba como orden de pedido si no volvia  a llamarme y generaba de nuevo un numero y repetia el proceso hasta que no existiera...


PD: se que los algoritmos recursivos no deben implementarse si no es necesario por el uso de memoria pero bueno! asì resolvì el problema jaja.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Numero aleatorio en batch
Scripting
kraszic 2 16,151 Último mensaje 22 Septiembre 2007, 12:05 pm
por kraszic
ayuda con un numero que se repita
Programación C/C++
daniel010 2 2,226 Último mensaje 13 Septiembre 2013, 03:02 am
por GenR_18
desglose del un método generar numero aleatorio sin que se repita JAVA
Java
elm0n0 5 3,423 Último mensaje 30 Abril 2015, 01:00 am
por elm0n0
Ayuda!!! comparar que no se repita ningun numero en el array (Java)
Java
afrocardo 5 6,003 Último mensaje 4 Abril 2016, 17:20 pm
por esjuleta
Como puedo utilizar un numero random en un bucle sin que se repita?(cs)
.NET (C#, VB.NET, ASP)
Reent 2 2,437 Último mensaje 27 Julio 2019, 05:19 am
por WHK
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines