Programación Web y Scripting > PHP

 Problema al insertar valores en una BD.

(1/4) > >>

Gaug:
Hola, es mi primer post en éste foro, y espero poder aportar mucho a él, así como recibir aportes también, ojalá puedan ayudarme con éste problemita que tengo.

Tengo un código que toma valores de un archivo CSV (Excel) que está de ésta forma:



--- Código: PHP --- clave           nombre       id        apellidos          J                  juan           87        perez              J                 pedro         75        rodriguezB                  mario         98        gonzalez  


Lo que quiero es que suba estos valores y los acomode en una tabla, eso no es el problema, el problema es que, por ejemplo en clave tengo "J" en la primera fila, tengo que relacionar esa letra con otros valores que tengo en OTRA tabla en la BD, el valor sería algo como "J12345", pero hay más valores, supongamos que en la tabla ésa tengo los valores así:



--- Código: PHP --- Tabla: 'tabla2' clave completa                          (Campo) J2485                                        (Valores)B8789J1589B8796  

Ahora si en la primera fila del archivo CSV que estoy subiendo, la clave es "J", sólo debe de tomar en cuenta los que empiecen con la letra "J" y tomar el que sea más grande, en este caso sería "J2485", entonces quiero que ese valor se le sume uno y lo inserte en la tabla principal donde voy a subir todo, así igual con si cambia de "J" a "B" o viceversa y me quede algo así:



--- Código: PHP --- Tabla: 'tabla_principal'clave           nombre       id        apellidos          J2486                juan      87        perez              J2487                pedro    75        rodriguezB8797               mario     98        gonzalez    


Aquí está el pedazo del código que hace eso, está CASI completo, pero me marca algunos errores:


--- Código: PHP --- $data2=0;while (($data = fgetcsv($handle, 4096, ',')) !== FALSE) {$data = str_replace("'","''",$data); if($data[0]!=$data2){ $sintaxis=$data[0]."%";    $query_Recordset = "SELECT * from tabla2 WHERE clave_completa like '".$sintaxis."' order by clave_completa ASC limit 0,1";$Recordset = mysql_query($query_Recordset, $conex) or die(mysql_error());$row_Recordset = mysql_fetch_assoc($Recordset);$clave=$row_Recordset['llave'];$data2=$data[0];}$clave++;$import="INSERT into tabla_principal(clave,nombre,id,apellidos) values('$clave','$data[1]','$data[2]','$data[3]')";$runq = mysql_query($import) or die(mysql_error());echo $import;echo "<br>";}  

Y me marca éstos errores:


--- Código: PHP --- Notice: Undefined variable: clave in sitio on line 41 Notice: Undefined offset: 1 in sitio on line 42 Notice: Undefined offset: 2 in sitio on line 42 Notice: Undefined offset: 3 in sitio on line 42 Notice: Undefined offset: 4 in sitio on line 42  

Ésta es la línea 42:

--- Código: PHP ---$import="INSERT into tabla_principal(clave,nombre,id,apellidos) values('$clave','$data[1]','$data[2]','$data[3]')"; 
Espero puedan ayudarme, por más que le busco al código no le encuentro el problema, gracias de antemano.

Saludos.

chesbor:
Ese error te lo da porque los campos del array están vacíos...
Probá con este script (agregándole el tema de buscar la j en tu tabla, y esas cosas. Creo que lo saqué de algúna web de ejemplos hace un tiempo y lo tenía en un archivo tirado en un servidor así que la verdad no se bien de dónde lo saqué.


--- Código: Text --- <?php$verif = 0;include "conec.php";//leemos el fichero$fname="datos.csv";$fp=fopen($fname,"r") or die("Error al abrir el fichero");$line = fgets( $fp, 2024 );//iniciamos conexion a bbddwhile(!feof($fp)){list($c1,$c2,$c3) =split( ";", $line);$line = fgets( $fp, 2024 );mysql_query("") or die(mysql_error());//lanzamos querys}fclose($fp);?>   
Ese $verif no sé ni qué hace, puede haber sido parte del código original de la web y lo modifiqué o un check que puse y saqué, no se xD, pero bueno, el script está probado e inserta en las variables $c1, $c2, $c3 y las necesarias los datos del archivo, con lo cual podés luego buscar la j, e insertar.

El error que te tira sobre la variable puede estar relacionado con un tema de configuración y el sumarle uno a la variable de caracteres... (igual tené en cuenta que es solo un notice, bien podrías desactivarlos).

Por lo que fuí leyendo me parece que tendría que andar asi como lo tenés :S.

Espero que sirva.

Gaug:
En realidad como dices sólo son Notice, ya que si me inserta los valores, sólo que alrevés...de abajo hacia arriba ¿alguna manera para corregir eso?
Y también, ¿cómo puedo desactivar los notice?

Saludos.

chesbor:
No sé por qué te estará leyendo los datos al revés... creo que debería andar bien así :S... y para desactivar los notice tenés que modificar el control de errores en la configuración de php (php.ini en windows).

Gaug:
Pues sigo teniendo problemas con el código, no me toma los valores correctamente, osea si yo quiero tomar el valor más grande, no lo hace así, y después cambia de valor, pego el código aquí espero alguien pueda ayudarme:


--- Código: PHP --- <?phprequire_once('Connections/conex.php');mysql_select_db($database_conex, $conex);//DbOpen();echo '<form action="' . $_SERVER['PHP_SELF'] . '" method="post" enctype="multipart/form-data">';if(isset($_POST['submit'])) { if (move_uploaded_file($_FILES['filename']['tmp_name'], "archivo.csv")) {echo "File sucessfully uploaded."."<BR>";$filename = "archivo.csv";$handle = fopen($filename, 'r');} else {echo "Error : " . $uploaddir . basename($_FILES['filename']['name'])  . 'n' . $_FILES['filename']['error'] . "<BR>";} $data2=0;while (($data = fgetcsv($handle, 4096, ',')) !== FALSE) {$data = str_replace("'","''",$data); if($data[0]!=$data2){ $sintaxis=$data[0]."%";    $query_Recordset = "SELECT * from tabla2 WHERE clave_completa like '".$sintaxis."' order by clave_completa ASC limit 0,1";$Recordset = mysql_query($query_Recordset, $conex) or die(mysql_error());$row_Recordset = mysql_fetch_assoc($Recordset);$clave=$row_Recordset['llave'];$data2=$data[0];}$clave++;$import="INSERT into tabla_principal(clave,nombre,id,apellidos) values('$clave','$data[1]','$data[2]','$data[3]')";$runq = mysql_query($import) or die(mysql_error());echo $import;echo "<br>";} fclose($handle);print "Import done"; }else {print "Type file name to import:<br>";print "<input type='file' name='filename' size='20'><br>";print "<input type='submit' name='submit' value='submit'>";}$import="select * from tabla_principal";$runq = mysql_query($import) or die(mysql_error()); //DbClose();?>   
Gracias de antemano.

Saludos.

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa