• Lunes 29 de Abril de 2024, 22:15

Autor Tema:  Problema al insertar valores en una BD.  (Leído 4276 veces)

Gaug

  • Miembro activo
  • **
  • Mensajes: 26
    • Ver Perfil
Problema al insertar valores en una BD.
« en: Lunes 29 de Junio de 2009, 23:55 »
0
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
  1.  
  2. clave           nombre       id        apellidos        
  3.  
  4. J                  juan           87        perez              
  5. J                 pedro         75        rodriguez
  6. B                  mario         98        gonzalez
  7.  
  8.  



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
  1.  
  2. Tabla: 'tabla2'
  3.  
  4. clave completa                          (Campo)
  5.  
  6. J2485                                        (Valores)
  7. B8789
  8. J1589
  9. B8796
  10.  
  11.  


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
  1.  
  2. Tabla: 'tabla_principal'
  3. clave           nombre       id        apellidos        
  4.  
  5. J2486                juan      87        perez              
  6. J2487                pedro    75        rodriguez
  7. B8797               mario     98        gonzalez  
  8.  
  9.  



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

Código: PHP
  1.  
  2. $data2=0;
  3. while (($data = fgetcsv($handle, 4096, ',')) !== FALSE) {
  4. $data = str_replace("'","''",$data);
  5.  
  6. if($data[0]!=$data2){
  7.  
  8. $sintaxis=$data[0]."%";
  9.  
  10.  
  11.   $query_Recordset = "SELECT * from tabla2 WHERE clave_completa like '".$sintaxis."' order by clave_completa ASC limit 0,1";
  12. $Recordset = mysql_query($query_Recordset, $conex) or die(mysql_error());
  13. $row_Recordset = mysql_fetch_assoc($Recordset);
  14. $clave=$row_Recordset['llave'];
  15. $data2=$data[0];
  16. }
  17. $clave++;
  18. $import="INSERT into tabla_principal(clave,nombre,id,apellidos) values('$clave','$data[1]','$data[2]','$data[3]')";
  19. $runq = mysql_query($import) or die(mysql_error());
  20. echo $import;
  21. echo "<br>";
  22. }
  23.  
  24.  


Y me marca éstos errores:

Código: PHP
  1.  
  2. Notice: Undefined variable: clave in sitio on line 41
  3.  
  4. Notice: Undefined offset: 1 in sitio on line 42
  5.  
  6. Notice: Undefined offset: 2 in sitio on line 42
  7.  
  8. Notice: Undefined offset: 3 in sitio on line 42
  9.  
  10. Notice: Undefined offset: 4 in sitio on line 42
  11.  
  12.  


Ésta es la línea 42:
Código: PHP
  1. $import="INSERT into tabla_principal(clave,nombre,id,apellidos) values('$clave','$data[1]','$data[2]','$data[3]')";
  2.  

Espero puedan ayudarme, por más que le busco al código no le encuentro el problema, gracias de antemano.

Saludos.

chesbor

  • Miembro activo
  • **
  • Mensajes: 47
    • Ver Perfil
Re: Problema al insertar valores en una BD.
« Respuesta #1 en: Martes 30 de Junio de 2009, 00:25 »
0
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
  1.  
  2. <?php
  3. $verif = 0;
  4. include "conec.php";
  5. //leemos el fichero
  6. $fname="datos.csv";
  7. $fp=fopen($fname,"r") or die("Error al abrir el fichero");
  8. $line = fgets( $fp, 2024 );
  9. //iniciamos conexion a bbdd
  10. while(!feof($fp))
  11. {
  12. list($c1,$c2,$c3) =split( ";", $line);
  13. $line = fgets( $fp, 2024 );
  14. mysql_query("") or die(mysql_error());
  15. //lanzamos querys
  16. }
  17. fclose($fp);
  18. ?>
  19.  
  20.  

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

  • Miembro activo
  • **
  • Mensajes: 26
    • Ver Perfil
Re: Problema al insertar valores en una BD.
« Respuesta #2 en: Martes 30 de Junio de 2009, 00:53 »
0
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

  • Miembro activo
  • **
  • Mensajes: 47
    • Ver Perfil
Re: Problema al insertar valores en una BD.
« Respuesta #3 en: Martes 30 de Junio de 2009, 03:39 »
0
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

  • Miembro activo
  • **
  • Mensajes: 26
    • Ver Perfil
Re: Problema al insertar valores en una BD.
« Respuesta #4 en: Martes 30 de Junio de 2009, 15:58 »
0
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
  1.  
  2. <?php
  3. require_once('Connections/conex.php');
  4. mysql_select_db($database_conex, $conex);
  5. //DbOpen();
  6. echo '<form action="' . $_SERVER['PHP_SELF'] . '" method="post" enctype="multipart/form-data">';
  7. if(isset($_POST['submit'])) {
  8.  
  9. if (move_uploaded_file($_FILES['filename']['tmp_name'], "archivo.csv")) {
  10. echo "File sucessfully uploaded."."<BR>";
  11. $filename = "archivo.csv";
  12. $handle = fopen($filename, 'r');
  13. } else {
  14. echo "Error : " . $uploaddir . basename($_FILES['filename']['name'])  . 'n' . $_FILES['filename']['error'] . "<BR>";
  15. }
  16. $data2=0;
  17. while (($data = fgetcsv($handle, 4096, ',')) !== FALSE) {
  18. $data = str_replace("'","''",$data);
  19.  
  20. if($data[0]!=$data2){
  21.  
  22. $sintaxis=$data[0]."%";
  23.  
  24.  
  25.   $query_Recordset = "SELECT * from tabla2 WHERE clave_completa like '".$sintaxis."' order by clave_completa ASC limit 0,1";
  26. $Recordset = mysql_query($query_Recordset, $conex) or die(mysql_error());
  27. $row_Recordset = mysql_fetch_assoc($Recordset);
  28. $clave=$row_Recordset['llave'];
  29. $data2=$data[0];
  30. }
  31. $clave++;
  32. $import="INSERT into tabla_principal(clave,nombre,id,apellidos) values('$clave','$data[1]','$data[2]','$data[3]')";
  33. $runq = mysql_query($import) or die(mysql_error());
  34. echo $import;
  35. echo "<br>";
  36. }
  37.  
  38. fclose($handle);
  39. print "Import done";
  40.  
  41. }
  42. else {
  43. print "Type file name to import:<br>";
  44. print "<input type='file' name='filename' size='20'><br>";
  45. print "<input type='submit' name='submit' value='submit'>";
  46. }
  47. $import="select * from tabla_principal";
  48. $runq = mysql_query($import) or die(mysql_error());
  49.  
  50. //DbClose();
  51. ?>
  52.  
  53.  

Gracias de antemano.

Saludos.

chesbor

  • Miembro activo
  • **
  • Mensajes: 47
    • Ver Perfil
Re: Problema al insertar valores en una BD.
« Respuesta #5 en: Martes 30 de Junio de 2009, 17:33 »
0
Eso es porque la consulta tendría que ordenar los valores DESCENDIENTEMENTE, o sea, el mas grande arriba (el primero que lees) y de ahi ir bajando... con orden ascendente el último valor es el mas grande, y vos no lo leés...
Si es eso solo ya estás andando xD, sino avisá por acá.

Gaug

  • Miembro activo
  • **
  • Mensajes: 26
    • Ver Perfil
Re: Problema al insertar valores en una BD.
« Respuesta #6 en: Martes 30 de Junio de 2009, 17:51 »
0
Le he movido algo y digamos que tengo ésto:

Código: PHP
  1.  
  2. <?php
  3. require_once('Connections/conex.php');
  4. mysql_select_db($database_conex, $conex);
  5. //DbOpen();
  6. echo '<form action="' . $_SERVER['PHP_SELF'] . '" method="post" enctype="multipart/form-data">';
  7. if(isset($_POST['submit'])) {
  8.  
  9. if (move_uploaded_file($_FILES['filename']['tmp_name'], "archivo.csv")) {
  10. echo "File sucessfully uploaded."."<BR>";
  11. $filename = "archivo.csv";
  12. $handle = fopen($filename, 'r');
  13. } else {
  14. echo "Error : " . $uploaddir . basename($_FILES['filename']['name'])  . 'n' . $_FILES['filename']['error'] . "<BR>";
  15. }
  16.  
  17. $data2='S';
  18.  
  19. while (($data = fgetcsv($handle, 4096, ',')) !== FALSE) {
  20. $data = str_replace("'","''",$data);
  21.  
  22. $prueba=$data[0]; /// M
  23.  
  24. if($prueba!=$data2){
  25.  
  26. $sintaxis=$prueba."%";
  27.  
  28. $query_Recordset = "SELECT * from tabla2 WHERE clave_completa like '".$sintaxis."' order by clave_completa DESC limit 0,1";
  29. $Recordset = mysql_query($query_Recordset, $conex) or die(mysql_error());
  30. $row_Recordset = mysql_fetch_assoc($Recordset);
  31. $totalRows_Recordset = mysql_num_rows($Recordset);
  32. $clave=$row_Recordset['llave'];
  33.  
  34.  
  35.  
  36. $clave++;
  37.  
  38. $data2=$prueba; // se asigna el valor anterior para poder comparar en el if
  39. }
  40.  
  41.  
  42. $import="INSERT into tabla_principal(clave,nombre,id,apellidos) values('$clave','$data[1]','$data[2]','$data[3]')";
  43. $import2="INSERT into tabla2(clave_completa) values('".$clave."')";
  44. $runq = mysql_query($import) or die(mysql_error());
  45. $runq2 = mysql_query($import2) or die(mysql_error());
  46. echo $import;
  47. echo "<br>";
  48. }
  49. fclose($handle);
  50. print "Import done";
  51.  
  52. }
  53. else {
  54. print "Type file name to import:<br>";
  55. print "<input type='file' name='filename' size='20'><br>";
  56. print "<input type='submit' name='submit' value='submit'>";
  57. }
  58. $import="select * from tabla_principal";
  59. $runq = mysql_query($import) or die(mysql_error());
  60. $import2="select * from tabla2";
  61. $runq2 = mysql_query($import2) or die(mysql_error());
  62.  
  63. //DbClose();
  64. ?>
  65.  
  66.  

Me gustaría que probaras el código para que vieras tú mismo el problema, te facilito el archivo .cvs adjúntandolo a éste post, de nuevo muchas gracias.

Saludos.
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.

chesbor

  • Miembro activo
  • **
  • Mensajes: 47
    • Ver Perfil
Re: Problema al insertar valores en una BD.
« Respuesta #7 en: Martes 30 de Junio de 2009, 21:07 »
0
La verdad no sé qué es lo que está mal, lo único que vi es que un valor se repitió (algo que ver con el $data2="S" creo)... te recomendaría que pruebes con el script de lectura de csv que te pasé porque creo que está leyendo mal el archivo, las dbs no las probé por no tenerlas, pero el código parece estar bien...

Gaug

  • Miembro activo
  • **
  • Mensajes: 26
    • Ver Perfil
Re: Problema al insertar valores en una BD.
« Respuesta #8 en: Miércoles 1 de Julio de 2009, 00:22 »
0
Poniendo el valor del row_Recordset con éste código:

Código: PHP
  1.      
  2. echo '<pre>';
  3.       var_dump($row_Recordset);
  4.       echo '</pre>';
  5.  
  6.  

En la primera vuelta me muestra esto:

Código: PHP
  1.  
  2. bool(false)
  3.  
  4.  

¿Alguna idea del por qué?

Saludos.

chesbor

  • Miembro activo
  • **
  • Mensajes: 47
    • Ver Perfil
Re: Problema al insertar valores en una BD.
« Respuesta #9 en: Miércoles 1 de Julio de 2009, 01:38 »
0
Sinceramente no, probaste con mysql_fetch_array?

Gaug

  • Miembro activo
  • **
  • Mensajes: 26
    • Ver Perfil
Re: Problema al insertar valores en una BD.
« Respuesta #10 en: Jueves 2 de Julio de 2009, 15:47 »
0
Ya le moví al código y creo que lo tengo casi completo :

[php:32y5pct6]
  1.  
  2. <?php
  3. require_once('Connections/conex.php');
  4. mysql_select_db($database_conex, $conex);
  5. if(isset($_POST['submit']))
  6. {
  7.  if (move_uploaded_file($_FILES['filename']['tmp_name'], "archivo.csv"))
  8.  {
  9.   echo "File sucessfully uploaded."."<BR>";
  10.   $filename = "archivo.csv";
  11.   $handle = fopen($filename, 'r');
  12.   }
  13.  else
  14.  {
  15.   echo "Error : " . $uploaddir . basename($_FILES['filename']['name'])  . 'n' . $_FILES['filename']['error'] . "<BR>";
  16.   }
  17.  $data2='S';
  18.  $sw=0;
  19.  while (($data = fgetcsv($handle, 4096, ',')) !== FALSE)
  20.  {
  21.   $data = str_replace("'","''",$data);
  22.   $prueba = $data[0]; /// M
  23.   if(!empty($sw))
  24.   {
  25.    if($prueba!=$data2)
  26.    {
  27.     $sintaxis=$prueba."%";
  28.     $query_Recordset = "SELECT * from tabla2 WHERE clave_completa like '".$sintaxis."' order by clave_completa DESC limit 0,1";
  29.     $Recordset = mysql_query($query_Recordset, $conex) or die(mysql_error());
  30.     $row_Recordset = mysql_fetch_assoc($Recordset);
  31.     $clave_completa = $row_Recordset['clave_completa'];
  32.     $clave=explode($prueba,$clave_completa);
  33.     $clave[1]++;
  34.     $clave= $prueba.$clave[1];
  35.     $import="INSERT INTO tabla_principal(clave,nombre,id,apellidos) values('$clave','$data[1]','$data[2]','$data[3]')";
  36.     $import2="UPDATE tabla2 SET clave_completa = '$clave' WHERE clave_completa= '$clave_completa";
  37.     $runq = mysql_query($import) or die(mysql_error());
  38.     $runq2 = mysql_query($import2) or die(mysql_error());
  39.     }
  40.    }
  41.   $sw=1;
  42.   }
  43.  fclose($handle);
  44.  print "Import done";
  45.  }
  46. else
  47. {
  48.  echo '<form action="#" method="post" enctype="multipart/form-data">
  49.          Select file to import:<br>
  50.          <input type="file" name="filename" size="20"><br>
  51.          <input type="submit" name="submit" value="submit">
  52.          </form>';
  53.  }
  54. //$import="select * from main_table";
  55. //$runq = mysql_query($import) or die(mysql_error());
  56. //$import2="select * from table2";
  57. //$runq2 = mysql_query($import2) or die(mysql_error());
  58. //DbClose();
  59. ?>
  60.  
[/php:32y5pct6]

Y me marca sólamente estos errores:

[php:32y5pct6]
  1.  
  2. Notice: Undefined offset: 1 in site on line 42
  3.  
  4. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '')' at line 1  
  5.  
[/php:32y5pct6]

Ésta es la línea 42:

[php:32y5pct6]
  1.  
  2.  $clave[1]++;  
  3.  
[/php:32y5pct6]

¿Alguna idea para resolver esto?

Saludos.

chesbor

  • Miembro activo
  • **
  • Mensajes: 47
    • Ver Perfil
Re: Problema al insertar valores en una BD.
« Respuesta #11 en: Jueves 2 de Julio de 2009, 17:33 »
0
Sí... clave no la tenés definida como array, entonces ir a la posición 1 cuando la 0 está vacía no tiene sentido... en vez de usar $clave[1] usá otra variable llamada $clave1 y listo.
Y a las consultas no sé que les pasan... lo que si tienen mal los espaciados pero dudo que sea eso xD.

Gaug

  • Miembro activo
  • **
  • Mensajes: 26
    • Ver Perfil
Re: Problema al insertar valores en una BD.
« Respuesta #12 en: Jueves 2 de Julio de 2009, 17:57 »
0
Bueno, lo de la variable ya quedó resuelto, ahora el problema sería la sintaxis de MySQL, ¿alguien que pueda ayudarme con eso?

Saludos.

chesbor

  • Miembro activo
  • **
  • Mensajes: 47
    • Ver Perfil
Re: Problema al insertar valores en una BD.
« Respuesta #13 en: Jueves 2 de Julio de 2009, 18:54 »
0
$import2="UPDATE tabla2 SET clave_completa = '$clave' WHERE clave_completa= '$clave_completa";

En esa te falta una comilla simple despues de la variable... podría ser eso, lo que no se es por qué dice que es en la linea 1.

Ya corregiste los espacios en la otra?

Gaug

  • Miembro activo
  • **
  • Mensajes: 26
    • Ver Perfil
Re: Problema al insertar valores en una BD.
« Respuesta #14 en: Jueves 2 de Julio de 2009, 19:05 »
0
No es la comilla, lo que pasa es que lo pegué mal aquí, pero el código original si tiene la comilla.

¿Cuáles espacios?

Saludos.

chesbor

  • Miembro activo
  • **
  • Mensajes: 47
    • Ver Perfil
Re: Problema al insertar valores en una BD.
« Respuesta #15 en: Jueves 2 de Julio de 2009, 20:28 »
0
$import="INSERT INTO tabla_principal(clave,nombre,id,apellidos) values('$clave','$data[1]','$data[2]','$data[3]')";

$import="INSERT INTO tabla_principal (clave,nombre,id,apellidos) values ('$clave','$data[1]','$data[2]','$data[3]')";

Pero lo raro es que dice que es en la linea 1 asi qeu andá a saber que consulta es...

Probá sino reescribiendo el código con todas las consideraciones que fuimos dando desde el principio a ver si fue algun problema de tipeo que no vimos...

Gaug

  • Miembro activo
  • **
  • Mensajes: 26
    • Ver Perfil
Re: Problema al insertar valores en una BD.
« Respuesta #16 en: Viernes 3 de Julio de 2009, 02:00 »
0
Ya lo resolví, lo que pasa es que lo puse mal aqui y me faltaba una comilla (') en un array, muchas gracias por tu ayuda y atención.

Saludos.