Foros del Web » Programando para Internet » PHP »

Ayuda con trocito de codigo plz

Estas en el tema de Ayuda con trocito de codigo plz en el foro de PHP en Foros del Web. Buenas ! :) Hay algo que no logro entender. ¿Quién pudiera explicarme o ayudarme porfavor? Con el código que presentaré a continuación, no entiendo por ...
  #1 (permalink)  
Antiguo 04/12/2009, 14:22
 
Fecha de Ingreso: septiembre-2006
Mensajes: 97
Antigüedad: 17 años, 7 meses
Puntos: 1
Buenas ! :)
Hay algo que no logro entender. ¿Quién pudiera explicarme o ayudarme porfavor?

Con el código que presentaré a continuación, no entiendo por qué no sigue insertando...
Por ejemplo, voy realizando inserciones, pero llega un momento en el cual no sigue...
Se van generando códigos autoincrementalmente....
por ejemplo:

FE-1
FE-2
FE-3
FE-4

Hasta que llega a: FE-10

pero despues no sigue insetando a: FE-11
y me lanza el error...

¿Alguna idea del por qué sucede esto?

Gracias...

Olvidé poner el código....LOL XD

<?php

require("../conexiones/Conexion.inc.php");
conectar();

$id_equipo = $_POST['id_equipo']; //variable del id del equipo de la bd
$ingreso_equipo = $_POST['ingreso_equipo']; //variable del boton del formulario anterior


$ultimo_num_equipo = mysql_query ("SELECT num_equipo
FROM cod_internos
WHERE id_equipo = '$id_equipo'
ORDER BY num_equipo DESC LIMIT 1", $conn);



//CAPTURA EN UN ARREGLO LA CONSULTA
$captura_ultimo = mysql_fetch_array($ultimo_num_equipo);


$equipo=$captura_ultimo['num_equipo'];
$equipo_arreglo=explode("-",$equipo); // explotamos el guión
$equipo_arreglo[1]++; // sumamos 1 al número de la maquina
$equipo_siguiente=$equipo_arreglo[0]."-".$equipo_arreglo[1]; // juntamos de nuevo
echo $equipo_siguiente; // Resultado


$graba_equipo = "INSERT into cod_internos (id_equipo,num_equipo)
values ('$id_equipo','$equipo_siguiente')";
mysql_query ($graba_equipo, $conn)
or die ("Error");

?>

Última edición por GatorV; 04/12/2009 a las 14:52
  #2 (permalink)  
Antiguo 04/12/2009, 14:46
Avatar de jackson666  
Fecha de Ingreso: noviembre-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 1.971
Antigüedad: 14 años, 5 meses
Puntos: 65
Respuesta: Ayuda con trocito de codigo plz

Te imprime FE-11 aca??? ---->echo $equipo_siguiente; // Resultado

Que error te tira?? Reemplaza por esto esta linea

mysql_query ($graba_equipo, $conn) or die (mysql_error());
  #3 (permalink)  
Antiguo 04/12/2009, 14:53
 
Fecha de Ingreso: septiembre-2006
Mensajes: 97
Antigüedad: 17 años, 7 meses
Puntos: 1
Respuesta: Ayuda con trocito de codigo plz

mMMm, digamos que "no me lanza error".....
Osea lo que lanza es el error del or die ('error');

fuera de eso no me lanza un error....

por lo que veo no sigue sumando mas de 10

llega hasta FE-10
y por ende no siguie insertando y lanza el or die.

El echo si imprime, y es hasta el FE-10, por eso digo que no sigue sumando mas de 10, es como que se estancara, y por tanto da error.

Ahora bien con la linea de codigo que me dijiste que colocara si lanza un error y es el siguiente.

fe-10
Duplicate entry 'fe-10' for key 'num_equipo'

Ahi puedes ver lo que imprime, (el fe-10)

pero no puedo tener dos entradas num_equipo iguales, son codigos de maquinas que no pueden tener las dos maquinas el mismo numero...
ese valor esta como unico...
  #4 (permalink)  
Antiguo 04/12/2009, 14:57
Avatar de jackson666  
Fecha de Ingreso: noviembre-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 1.971
Antigüedad: 14 años, 5 meses
Puntos: 65
Respuesta: Ayuda con trocito de codigo plz

Por alguna razon se te inserto el mismo valor en la columna que es primary key, borrala
  #5 (permalink)  
Antiguo 04/12/2009, 15:05
 
Fecha de Ingreso: septiembre-2006
Mensajes: 97
Antigüedad: 17 años, 7 meses
Puntos: 1
Respuesta: Ayuda con trocito de codigo plz

Es que lo que pasa es que si yo borro todos los campos y vuelvo a insertar, para corroborar, me refiero tener vacio todos los campos de la BD y partir de cero...
empiezo a insertar y guardar, y ni un problema, hasta que llega a 10...
luego no inserta :(
  #6 (permalink)  
Antiguo 04/12/2009, 15:09
Avatar de jackson666  
Fecha de Ingreso: noviembre-2009
Ubicación: Buenos Aires, Argentina
Mensajes: 1.971
Antigüedad: 14 años, 5 meses
Puntos: 65
Respuesta: Ayuda con trocito de codigo plz

Que limite de caracteres tiene esa columna en tu tabla?
  #7 (permalink)  
Antiguo 04/12/2009, 20:28
 
Fecha de Ingreso: septiembre-2006
Mensajes: 97
Antigüedad: 17 años, 7 meses
Puntos: 1
Respuesta: Ayuda con trocito de codigo plz

¿cómo puedo saber eso?
¿como saber el limite?
Puede que sea ese mi problema?
  #8 (permalink)  
Antiguo 04/12/2009, 20:38
 
Fecha de Ingreso: septiembre-2006
Mensajes: 127
Antigüedad: 17 años, 6 meses
Puntos: 5
Respuesta: Ayuda con trocito de codigo plz

De todos modos F-10 y F-11 tienen la misma cantidad de carácteres...
¿Porque mejor no usas solamente números enteros y le das la propiedad de AUTO_INCREMENT a la llave primaria? Luego en PHP a la hora de mostrar le colocas el "F-". Te ahorrarás problemas, en ves de hacer manualmente el proceso de incremento, que a veces puede fallar, como ahora te ocurre.
  #9 (permalink)  
Antiguo 05/12/2009, 01:20
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: Ayuda con trocito de codigo plz

El problema es que "F-2" es mayor que "F-10", porque son campos alfanumericos, al llegar a "F-10" el mayor siempre sera "F-9".

En todo caso, tendrias que establecer una longitud determinada para la parte numerica y agregar ceros al principio, de manera que queden, por ejemplo "F-000002", "F-000010", para esto te podria servir la funcion str_pad().

Aunque, ciertamente seria mas facil seguir el consejo de KekoGrama.
__________________
- León, Guanajuato
- GV-Foto
  #10 (permalink)  
Antiguo 05/12/2009, 09:57
 
Fecha de Ingreso: septiembre-2006
Mensajes: 97
Antigüedad: 17 años, 7 meses
Puntos: 1
Respuesta: Ayuda con trocito de codigo plz

Es que lo que me dice KekoGrama es para mostrarlo por pantalla...
Pero lo que yo necesito es grabarlo en la base de datos...
Por otro lado no puedo hacer eso que me planteas Triby, de poner un codigo con tantos ceros por que los equipos que estan en el inventario, ya los tienen codificados con los numeros dados, por tanto ya tienen la regla de que si ingresan un nuevo equipo tiene que venir con el formato "letra(s)" seguido de "-" (guion) y luego el "numero", partiendo de cero...

¿Quiza el problema esta en el select?, por que despues de todo, yo capturo ambas partes, las letras y luego el numero y ahi yo le sumo +1 al número y luego vuelvo a juntar ambas partes, no veo por qué no deberia incrementar mi numero....
  #11 (permalink)  
Antiguo 05/12/2009, 10:09
Avatar de darkasecas  
Fecha de Ingreso: marzo-2005
Ubicación: SantaCata, NL, Mexico
Mensajes: 1.553
Antigüedad: 19 años, 1 mes
Puntos: 77
Respuesta: Ayuda con trocito de codigo plz

Cita:
Iniciado por Rafagedon Ver Mensaje
¿Quiza el problema esta en el select?, por que despues de todo, yo capturo ambas partes, las letras y luego el numero y ahi yo le sumo +1 al número y luego vuelvo a juntar ambas partes, no veo por qué no deberia incrementar mi numero....
Cita:
Iniciado por Triby Ver Mensaje
El problema es que "F-2" es mayor que "F-10", porque son campos alfanumericos, al llegar a "F-10" el mayor siempre sera "F-9".
Ese es el problema.

En la consulta podrias sacar la parte numerica del campo con substring_index, y castearlo a decimal para asi ordenarlo correctamente
  #12 (permalink)  
Antiguo 05/12/2009, 10:17
 
Fecha de Ingreso: septiembre-2006
Mensajes: 97
Antigüedad: 17 años, 7 meses
Puntos: 1
Respuesta: Ayuda con trocito de codigo plz

darkasecas....
Bueno haber, recien estaba probando, y claramente ese es el problema, estaba viendo cual es la ultima fila que me devuelve el select, y llega hasta F-9...
No me toma hasta el F-10, como el ultimo registro, debe ser porque el F-9 es el mayor...
Ahora tu me das una solución pero soy nuevo en php, no comprendo a cabalidad lo que me señalas...
Ahora, estaba pensando, pero sería mejor tal vez poder realizar un select en el que me devuelva LA ULTIMA FILA ingresada, o tal vez....

Eso que me mensionas de castear a decimal no entiendo a que se refiere...
En lo que respecta a separar la parte numerica de la parte de letras, lo hago con la funcion explode, como puedes ver en el codigo.
  #13 (permalink)  
Antiguo 05/12/2009, 10:26
Avatar de darkasecas  
Fecha de Ingreso: marzo-2005
Ubicación: SantaCata, NL, Mexico
Mensajes: 1.553
Antigüedad: 19 años, 1 mes
Puntos: 77
Respuesta: Ayuda con trocito de codigo plz

En realidad me referia a hacerlo desde la consulta, con funciones de mysql, para que te traiga el valor correcto
http://dev.mysql.com/doc/refman/5.0/...ubstring-index

Y castear es convertir un tipo de dato a otro, en este caso tambien en la consulta con una funcion de mysql
cast

ejemplo
Código:
tabla
--------------
| foo        |
-------------
| bar-1      |
| bar-2      |
| bar-10     |
-------------

select * from tabla order by cast(substring_index(foo,'-',-1) as decimal) desc;

los devuelve ordenados de mayor a menor "correctamente"
bar-10
bar-2
bar-1

Última edición por darkasecas; 05/12/2009 a las 11:16
  #14 (permalink)  
Antiguo 05/12/2009, 11:11
 
Fecha de Ingreso: septiembre-2006
Mensajes: 97
Antigüedad: 17 años, 7 meses
Puntos: 1
Respuesta: Ayuda con trocito de codigo plz

Gracias a todos los que respondieron!
Gracias darkasecas, me funcionó lo que me planteaste, ahora si funciona bien.
Podrias darme una explicación de lo que hace la linea.

ORDER BY cast(substring_index(num_equipo,'-',-1) as decimal) desc"

Voy a leer tambien para informarme mas.
Me gusta comprender lo que estoy haciendo, no solo copiar y listo, funciona!....
Me gusta entenderlo.

Gracias una vez mas!
  #15 (permalink)  
Antiguo 05/12/2009, 11:19
Avatar de darkasecas  
Fecha de Ingreso: marzo-2005
Ubicación: SantaCata, NL, Mexico
Mensajes: 1.553
Antigüedad: 19 años, 1 mes
Puntos: 77
Respuesta: Ayuda con trocito de codigo plz

En los links que deje dice lo que hacen las funciones, pero basicamente,
substring_index, con los parametros que le pasas, te devuelve lo que esta a ala derecha del "-" en el campo num_equipo, que viene siendo los puros numeros; pero aun lo trata como texto, por lo que tienes que convertirlos a numerico, eso lo haces con cast, y ya que lo tienes el order by los ordena correctamente pues ya son tratados como numeros :)
  #16 (permalink)  
Antiguo 05/12/2009, 11:22
 
Fecha de Ingreso: septiembre-2006
Mensajes: 97
Antigüedad: 17 años, 7 meses
Puntos: 1
Respuesta: Ayuda con trocito de codigo plz

Ahhh oka !
vale vale, entendido.
Bueno, ya esta probando y todo, asi que quien necesite realizar esto, ya esta probado que funciona bien ;)
Asi no se generan nuevos post repetidos.
Gracias una vez mas!
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 01:07.