Foros del Web » Programando para Internet » PHP »

Problemas con NUmeros Aleatorios

Estas en el tema de Problemas con NUmeros Aleatorios en el foro de PHP en Foros del Web. hola chikos teng ste problema sobre numeros aleatorios tengo el siguiente codigo para generarlos: Código PHP: <?php      include( 'conexionmacro.php' );      $link = Conectarse ...
  #1 (permalink)  
Antiguo 30/12/2005, 09:17
Avatar de lily_cv  
Fecha de Ingreso: noviembre-2005
Mensajes: 165
Antigüedad: 18 años, 5 meses
Puntos: 0
Exclamación Problemas con NUmeros Aleatorios

hola chikos teng ste problema sobre numeros aleatorios
tengo el siguiente codigo para generarlos:

Código PHP:
<?php
    
include('conexionmacro.php');
    
$link=Conectarse();

function 
genera_password($longitud,$tipo="alfanumerico"){ 
    if (
$tipo=="numerico"){ 
        
$exp_reg="[^0-9]"
    } 
     
    return 
substr(eregi_replace($exp_reg""md5(rand())) . 
       
eregi_replace($exp_reg""md5(rand())) . 
       
eregi_replace($exp_reg""md5(rand())), 
       
0$longitud); 


do{
    
$Xgiro genera_password(4,"numerico");
    
$aux $Xgiro;
    
$Rsngiro1 mysql_query("select ngiro from giros",$link);
}while(
mysql_fetch_array($Rsngiro1)!=$aux);

$giro $aux;

$RScountcliente mysql_query("select id_cliente from clientes where id_cliente='$acceso2'",$link);
$fila mysql_fetch_array($RScountcliente);
mysql_free_result($RScountcliente);

$Xidcli $fila[0];
$RSinsertcliente mysql_query("insert into giros values ('$Xidcli','$acceso1','$acceso2','$monto_envio','$cuenta','$observacion','$fecha','$giro','$tipom','$estado','','$tcambio')",$link);
mysql_close($link);
?>

<script>
function Cargar(){
    var ng = parseInt(document.frm_datos.giro.value); 
    alert('Nº de Giro: '+ ng );
    document.frm_datos.action="giros_encomiendas.php";
    document.frm_datos.submit();
    window.open("imprimir.php?giro="+ng,'ventana1','height=700,width=550,resizable=yes,scrollbars=yes');
    }
</script>

<body onLoad="Cargar()">
<form action="giros_encomiendas.php" method="post" name="frm_datos">
<input type="hidden" name="txtpais" value="<? echo $txtpais;?>">
<input type="hidden" name="giro" value="<? echo $giro;?>">
</form>
</body>
</html>
ahora cuando yo muestro en un alert el numero aleatorio en momentos me muestra el numero que ha generado y me guarda ese numero a mi bd lo cual lo guarda bien, hasta alli todo bien.
Pero hay momentos en que me muestra un numero que no es, es decir solo lo muestra en el alert pero en mi base de datos guarda otro numero. alguien podria saber cual es mi error porfa necesito sus ayudas urgente.
Gracias de antemano.

Última edición por Cluster; 30/12/2005 a las 09:59
  #2 (permalink)  
Antiguo 30/12/2005, 09:20
Avatar de lily_cv  
Fecha de Ingreso: noviembre-2005
Mensajes: 165
Antigüedad: 18 años, 5 meses
Puntos: 0
ahhhhh me muestra este error :
Fatal error: Maximum execution time of 30 seconds exceeded in /home/andcorp/public_html/prueba/cpanel/prg_insert_giros.php on line 9
  #3 (permalink)  
Antiguo 30/12/2005, 10:06
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Sólo veo un lio con variables:

$giro = genera_password(4,"numerico");
$aux = $Xgiro;
$Rsngiro1 = mysql_query("select ngiro from giros",$link);
}while(mysql_fetch_array($Rsngiro1)!=$aux);

$giro = $aux;

Es más simple que uses $giro directamente en tu sentencia SQL:

RSinsertcliente = mysql_query("insert into giros values ('$Xidcli','$acceso1','$acceso2','$monto_envio','$ cuenta','$observacion','$fecha','$giro','$tipom',' $estado','','$tcambio')",$link);

Y .. revisa la función que usas para generar los passwords .. no sé si la tienes actualizada (pues había un pequeño error .. solventado hace tiempo también), pero creo que tienes actualizado el código:
http://www.forosdelweb.com/showpost....3&postcount=67

Un saludo,
  #4 (permalink)  
Antiguo 30/12/2005, 10:17
Avatar de lily_cv  
Fecha de Ingreso: noviembre-2005
Mensajes: 165
Antigüedad: 18 años, 5 meses
Puntos: 0
hola cluster pues ese codigo lo saque de la faq's y esta actualizado con la diferencia de que solo kiero numeros no letras, y hare lo de la variable $giro pero creo que tienes un error.

$giro = genera_password(4,"numerico");
$aux = $giro; $Rsngiro1 = mysql_query("select ngiro from giros",$link);
}while(mysql_fetch_array($Rsngiro1)!=$aux);

$giro = $aux;

asi?????
  #5 (permalink)  
Antiguo 30/12/2005, 10:33
Avatar de jair20x  
Fecha de Ingreso: noviembre-2005
Ubicación: Madrid - España
Mensajes: 532
Antigüedad: 18 años, 5 meses
Puntos: 1
Y para que quieres generar numeros aleatorios e insertarlos en tu BD???????????????????????????????????
  #6 (permalink)  
Antiguo 30/12/2005, 10:36
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
$aux = $giro; $Rsngiro1 = mysql_query("select ngiro from giros",$link);
}while(mysql_fetch_array($Rsngiro1)!=$aux);

Ahora veo ..

No puedes pretender hacer eso!!!!!!!!!!!!!!!!!!!!!!!!!!

TU tienes que hacer una consulta SQL a tu BD para ver si ese "$giro" ya está en tu BD .. pero no de esa forma (eso realemnte no significa nada .. no es corecto).

Puedes usar SQL para contar el n° de registros que arroje una consulta SQL condicional ..

Como necesitas "generar" un nuevo "código" de giro si existe (supongo que esa era la finalidad?) .. uso una función para definir ese proceso y lo llamo de forma "recursiva" por el bucle while() si es que se alguno de los "$giro" generado se repite.

Código PHP:
function verifica_giro_existe($giro){
   global 
$link;

   
$Rsngiro1 mysql_query("select COUNT(*) from giros WHERE ngiro='".$giro."'",$link); 
   
$exite_giro=mysql_result($Rsngiro1,0);
   if (
$exite_giro == 1){ // suponemos que ngiro es único?
       
return true;
   } else {
       return 
false;
   }
 }

While (
verifica_giro_existe($giro)){
  
$giro=genera_password(4,"numerico"); 
}

// resto de tu script ....actula usando $giro directamente donde lo requieras para tus consultas SQL. 
A todo esto .. ese $giro .. lo propagas a otro script (giros_encomiendas.php) por un campo oculto: <input type="hidden" name="giro" value="<? echo $giro;?>">

Realmente .. eso no deberías hacerlo así .. propaga ese dato en una variable de sesión (mas seguro . .imagina si "altero" ese valor a mano? .. que se puede).

Un saludo,

PD: (pruebalo . no he tenido oportunidad de probarlo pero por ahí va la cosa)
  #7 (permalink)  
Antiguo 30/12/2005, 10:39
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por jair20x
Y para que quieres generar numeros aleatorios e insertarlos en tu BD???????????????????????????????????
Para darle una especie de "n°" a un proceso aleatorio . .que no se repita sobre todo. Podría usar el "ID" que seguramente se generará tras insertar esos datos en la BD (si usa campos autonuméricos) pero .. en ocasiones es necesario generar ese n° .. almacenarlo en la BD y de ahí pasar tal vez ese dato a otro sistema de forma "transparente" ..

Realmente esto son formas de trabajar .. a mi me gusta más usar los "ID" y no complicarme .. en otros casos es necesario un "ID" "aleatorio" como para usarlo como "código de validación" o algo así ..

Un saludo,
  #8 (permalink)  
Antiguo 30/12/2005, 10:44
Avatar de jair20x  
Fecha de Ingreso: noviembre-2005
Ubicación: Madrid - España
Mensajes: 532
Antigüedad: 18 años, 5 meses
Puntos: 1
Sonrisa

Cita:
Iniciado por Cluster
Para darle una especie de "n°" a un proceso aleatorio . .que no se repita sobre todo. Podría usar el "ID" que seguramente se generará tras insertar esos datos en la BD (si usa campos autonuméricos) pero .. en ocasiones es necesario generar ese n° .. almacenarlo en la BD y de ahí pasar tal vez ese dato a otro sistema de forma "transparente" ..

Realmente esto son formas de trabajar .. a mi me gusta más usar los "ID" y no complicarme .. en otros casos es necesario un "ID" "aleatorio" como para usarlo como "código de validación" o algo así ..

Un saludo,

Gracias Cluster por la explicacion
Saludos
  #9 (permalink)  
Antiguo 30/12/2005, 10:46
Avatar de lily_cv  
Fecha de Ingreso: noviembre-2005
Mensajes: 165
Antigüedad: 18 años, 5 meses
Puntos: 0
aja tambien uso los ID para otra cosa lo que pasa es que esto es necesario al menos la empresa asi kiere que sea el manejo con numeros aleatorios y gracias por la ayuda cluster voy a hacer lo que me dices en cuanto a la funcion verificar.

Por cierto el numero aleatorio que lo guardo en el formulario no es para mandarlo a la pagina giros_encomiendas es solo para mostrar en alert, aunque como tu dices lo pasa a esa pagina por ser un formulario y un dato oculto pero es que otra forma no se me ocurrio para poder mostrarlo como un alert, dime podrias decirme otra forma de hacerlo y que se muestre el mismo num que guardo en mi base de datos hay veces en que me muestra otro numero.
  #10 (permalink)  
Antiguo 30/12/2005, 10:59
Avatar de lily_cv  
Fecha de Ingreso: noviembre-2005
Mensajes: 165
Antigüedad: 18 años, 5 meses
Puntos: 0
Exclamación

Estoy interprentando mal?, mira tu me dices en este codigo

Código PHP:
function verifica_giro_existe($giro){ 
   global 
$link

   
$Rsngiro1 mysql_query("select COUNT(*) from giros WHERE ngiro='".$giro."'",$link);  
   
$exite_giro=mysql_result($Rsngiro1,0); 
   if (
$exite_giro == 1){ // suponemos que ngiro es único? 
       
return true
   } else { 
       return 
false
   } 
 } 

While (
verifica_giro_existe($giro)){ 
  
$giro=genera_password(4,"numerico");  


el bucle while lo que hace es llamar primero a la funcion verifica_giro_exite(...) y luego me genera el aleatorio con la funcion genera_password(...)., eso es correcto?
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

SíEste tema le ha gustado a 1 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 19:03.