PDA

Ver la Versión Completa : Problema al insertar varios renglones


Vinicio
20-08-2007, 23:46:07
Que tal amigos, tengo un problema a la hora de insertar varios registros en una base de datos mysql, debo insertar varios registros con codigos diferentes, el codigo que presento acontinuacion
muestra la forma en que lo estoy intentando hacer, basicamente hago un ciclo FOR para insertar los registros dependiendo de la cantidad que el usuario asigne, el problema esta en que solo inserta una vez no importando cuantas veces le diga al FOR k haga iteraciones... alguno tiene otra idea, o me peuden decir en donde estoy fallando?


for($e=0;$e<=$cantidad;$e++)
{

srand((double)microtime()*1000000);
$codigo;

for($i=0;$i<=11;$i++)
{

$nol = rand(0,1);

switch($nol)
{
case 0: $valor = chr(rand(48,57));break; //0-9
case 1: $valor = chr(rand(65,90));break; //A-Z
}
$codigo .= $valor;
}

$result = mysql_query("INSERT INTO codigo (id_codigo, lote, codigo, id_usuario, id_distribuidor, activa, fecha_gen, fecha_act, credito) VALUES (NULL, '$maxlote', '$codigo', NULL, NULL, '0', '$fecha_gen', NULL, '0');",$cnx);

//termina inserta Codigo
}
header ("Location: codigo_asigna.php");

kayetano
21-08-2007, 18:50:32
Hola

Dejando a un lado que no entiendo porque te moentas ese pollo para crear una clave cuando existen opciones mucho más simples para crear claves únicas.

Yo no veo nada raro, no entiendo el porque de la línea donde simplemente pones "$codigo" ya que si quieres una inicialización deberías asignarle un valor
$codigo = ""
// o
$codigo = 0;

Yo para estos casos lo que suelo hacer es imprimir la sentencia SQL que se genera es decir cambio:
$result = mysql_query("INSERT INTO codigo (id_codigo, lote, codigo, id_usuario, id_distribuidor, activa, fecha_gen, fecha_act, credito) VALUES (NULL, '$maxlote', '$codigo', NULL, NULL, '0', '$fecha_gen', NULL, '0')",$cnx);
por
echo "INSERT INTO codigo (id_codigo, lote, codigo, id_usuario, id_distribuidor, activa, fecha_gen, fecha_act, credito) VALUES (NULL, '$maxlote', '$codigo', NULL, NULL, '0', '$fecha_gen', NULL, '0')"
Así puedes ver realmente que esta pasando. El punto y como que pones al final no sirve para nada.
También es muy util el "or die"
$result = mysql_query("INSERT INTO codigo (id_codigo, lote, codigo, id_usuario, id_distribuidor, activa, fecha_gen, fecha_act, credito) VALUES (NULL, '$maxlote', '$codigo', NULL, NULL, '0', '$fecha_gen', NULL, '0')",$cnx) or die(mysql_error());
Con esto imprimes el posible error generado por la consulta SQL.

Vinicio
21-08-2007, 18:56:51
Gracias, ya logré encontrar el error, precisamente hice lo que sugeriste y me di cuenta que el error estaba en que se concatenaban los demas codigos generados en la variable $codigo, es decir, la primera vez si insertaba pues se generaba un codigo de 12 digitos , la sigueinte vez como se generaba un codigo de 24 no permitia insertar en la base pues el campo solo tiene de longitud 12, entonces resolvi el problema inicializando la variable antes de entrar al segundo FOR, muchisimas gracias por tu respuesta :D.

PD. Si tienes una forma mas sencilla de generar codigos te agradeceria me la compartieras , pues es la unica que encontré jeje.

Muchas gracias de Nuevo!