Foros del Web » Programando para Internet » PHP »

Problema al relacionar tablas con archivo csv.

Estas en el tema de Problema al relacionar tablas con archivo csv. en el foro de PHP en Foros del Web. Hola a todos! Me surgió un problema inesperado en este código. Resulta que en el momento que me ayudaron a resolver este tema ( AQUÍ ...
  #1 (permalink)  
Antiguo 18/03/2012, 11:27
 
Fecha de Ingreso: mayo-2002
Ubicación: Capital Federal
Mensajes: 630
Antigüedad: 21 años, 11 meses
Puntos: 1
Problema al relacionar tablas con archivo csv.

Hola a todos! Me surgió un problema inesperado en este código. Resulta que en el momento que me ayudaron a resolver este tema (AQUÍ MISMO) no me percaté de algo... fíjense en el id_categoría nro. 4... al tener solo 2 caractares, cuando hace la comparación para crear la relación ME DEVUELVE CERO

Creo que el problema está en esta líena del código: $idcategoria=$categoria[substr($data[3],0,3)];
¿Puede ser? ¿Se puede corregir para que me tome si hay 2 o 3 caracteres para que lo realice igual?
Les muestro como serían las tablas y el código más abajo que uso:
tabla CATEGORIA
Código:
id_categoria 	desc_categoria 	cod_categoria
1               Abrazaderas     ABR
2               Garef 	        GAR
3               Antenas 	ANT
4               Carbones G.V.   GV
tabla LINEAS
Código:
id_linea | desc_linea         | relacion | cod_linea
1        | Banda Mini         | 1        | ABR01
2        | Banda Standard     | 1        | ABR02
3        | Banda Reforzada    | 1        | ABR03
4 	 | Reguladores  A     | 2        | GAR01
5 	 | Reguladores  B     | 2        | GAR02
6        | Antenas A          | 3        | ANT01
7        | Antenas B          | 3        | ANT02
8        | Carbones A         | 0        | GV 01
9        | Carbones B         | 0        | GV 02
.......
Código PHP:
$row 1;
$fp fopen ('productos.csv','r'); 

$categoria=array();
$result=mysql_query("select * from categoria");
while(
$row=mysql_fetch_array($result)) $categoria[$row['cod_categoria']]=$row['id_categoria'];  

while (
$data fgetcsv ($fp1000";")) 

    
$num count ($data); 
    print 
" <br>"
    
$row++; 
    
    echo 
"$row- ".$data[4].$data[3];
     
    foreach (
$data as $pos=>$dato) { 
        
$data[$pos] = trim($dato);
    } 
  
    if (!
in_array($data[3],$ids)) {
       
   
$ids[] = $data[3];

   
$idcategoria=$categoria[substr($data[3],0,3)];  

   
$insertar="INSERT INTO lineas (desc_linea,relacion,cod_linea) VALUES ('$data[4]','$idcategoria','$data[3]')"
    
mysql_query($insertar);
    }

fclose ($fp); 
El máximo de caracteres que tiene que chequear son 3... más NO.
¿Se puede corregir para que me tome si hay 2 o 3 caracteres para que lo realice igual?

Muchas gracias a todos y saludos.
Marx.
__________________
"Todo lo que somos es el resultado de lo que hemos pensado". Budda.
  #2 (permalink)  
Antiguo 18/03/2012, 15:13
 
Fecha de Ingreso: agosto-2011
Mensajes: 59
Antigüedad: 12 años, 8 meses
Puntos: 8
Respuesta: Problema al relacionar tablas con archivo csv.

Si te he entendido bien tu problema es que cuando tienes dos caracteres uno te lo comprará con espacios pero en la base de datos no tiene el espacio
luego tu buscarías "GV " y realmente hay "GV"

¿Qué tal si haces un trim al resultado de trim(substr($data[3],0,3))?

http://php.net/manual/es/function.trim.php

O bien tu problema es que al insertar no te pone el espacio en blanco

con lo que te insertaría "GV01" en lugar de "GV 01"

en ese caso puedes utilizar la función rpad en el insert
http://dev.mysql.com/doc/refman/5.0/...#function_rpad, o si lo quieres solucionar con php hacer un str_len y si la longitud es dos concatenar un espacio en blanco http://php.net/manual/es/function.strlen.php

O también puedes dejar el espacio en blanco en el campo cod_categoria de tu tabla categoria

Última edición por nifdya; 18/03/2012 a las 15:28
  #3 (permalink)  
Antiguo 21/03/2012, 19:25
 
Fecha de Ingreso: mayo-2002
Ubicación: Capital Federal
Mensajes: 630
Antigüedad: 21 años, 11 meses
Puntos: 1
Respuesta: Problema al relacionar tablas con archivo csv.

nifdya: muchísimas gracias por tu ayuda. Utilicé esta opción que me dijiste y funcionó perfecto.

$idcategoria=$categoria[trim(substr($data[3],0,3))];

Muchas gracias por tu ayuda.

Saludos.

MArx.
__________________
"Todo lo que somos es el resultado de lo que hemos pensado". Budda.
  #4 (permalink)  
Antiguo 22/03/2012, 07:32
 
Fecha de Ingreso: agosto-2011
Mensajes: 59
Antigüedad: 12 años, 8 meses
Puntos: 8
Respuesta: Problema al relacionar tablas con archivo csv.

Sí, el trim es muy útil.

De nada.

Etiquetas: mysql, relacionar, sql, tabla, tablas
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 06:39.