Viernes 8 de Noviembre de 2024, 15:33
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación Web y Scripting
»
PHP
(Moderador:
F_Tanori
) »
Problema al insertar valores en una BD.
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: Problema al insertar valores en una BD. (Leído 4612 veces)
Gaug
Miembro activo
Mensajes: 26
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
clave nombre id apellidos
J juan
87
perez
J pedro
75
rodriguez
B 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
)
B8789
J1589
B8796
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
rodriguez
B8797 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.
Tweet
chesbor
Miembro activo
Mensajes: 47
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
<?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 bbdd
while(!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
Miembro activo
Mensajes: 26
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
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
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
<?php
require_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.
chesbor
Miembro activo
Mensajes: 47
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
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
<?php
require_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
=
'S'
;
while
(
(
$data
=
fgetcsv
(
$handle
,
4096
,
','
)
)
!==
FALSE
)
{
$data
=
str_replace
(
"'"
,
"''"
,
$data
)
;
$prueba
=
$data
[
0
]
;
/// M
if
(
$prueba
!=
$data2
)
{
$sintaxis
=
$prueba
.
"%"
;
$query_Recordset
=
"SELECT * from tabla2 WHERE clave_completa like '"
.
$sintaxis
.
"' order by clave_completa DESC limit 0,1"
;
$Recordset
=
mysql_query
(
$query_Recordset
,
$conex
)
or
die
(
mysql_error
(
)
)
;
$row_Recordset
=
mysql_fetch_assoc
(
$Recordset
)
;
$totalRows_Recordset
=
mysql_num_rows
(
$Recordset
)
;
$clave
=
$row_Recordset
[
'llave'
]
;
$clave
++;
$data2
=
$prueba
;
// se asigna el valor anterior para poder comparar en el if
}
$import
=
"INSERT into tabla_principal(clave,nombre,id,apellidos) values('
$clave
','
$data[1]
','
$data[2]
','
$data[3]
')"
;
$import2
=
"INSERT into tabla2(clave_completa) values('"
.
$clave
.
"')"
;
$runq
=
mysql_query
(
$import
)
or
die
(
mysql_error
(
)
)
;
$runq2
=
mysql_query
(
$import2
)
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
(
)
)
;
$import2
=
"select * from tabla2"
;
$runq2
=
mysql_query
(
$import2
)
or
die
(
mysql_error
(
)
)
;
//DbClose();
?>
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
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
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
echo
'<pre>'
;
var_dump
(
$row_Recordset
)
;
echo
'</pre>'
;
En la primera vuelta me muestra esto:
Código: PHP
bool
(
false
)
¿Alguna idea del por qué?
Saludos.
chesbor
Miembro activo
Mensajes: 47
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
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]
<?php
require_once
(
'Connections/conex.php'
)
;
mysql_select_db
(
$database_conex
,
$conex
)
;
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
=
'S'
;
$sw
=
0
;
while
(
(
$data
=
fgetcsv
(
$handle
,
4096
,
','
)
)
!==
FALSE
)
{
$data
=
str_replace
(
"'"
,
"''"
,
$data
)
;
$prueba
=
$data
[
0
]
;
/// M
if
(
!
empty
(
$sw
)
)
{
if
(
$prueba
!=
$data2
)
{
$sintaxis
=
$prueba
.
"%"
;
$query_Recordset
=
"SELECT * from tabla2 WHERE clave_completa like '"
.
$sintaxis
.
"' order by clave_completa DESC limit 0,1"
;
$Recordset
=
mysql_query
(
$query_Recordset
,
$conex
)
or
die
(
mysql_error
(
)
)
;
$row_Recordset
=
mysql_fetch_assoc
(
$Recordset
)
;
$clave_completa
=
$row_Recordset
[
'clave_completa'
]
;
$clave
=
explode
(
$prueba
,
$clave_completa
)
;
$clave
[
1
]
++;
$clave
=
$prueba
.
$clave
[
1
]
;
$import
=
"INSERT INTO tabla_principal(clave,nombre,id,apellidos) values('$clave','$data[1]','$data[2]','$data[3]')"
;
$import2
=
"UPDATE tabla2 SET clave_completa = '$clave' WHERE clave_completa= '$clave_completa"
;
$runq
=
mysql_query
(
$import
)
or
die
(
mysql_error
(
)
)
;
$runq2
=
mysql_query
(
$import2
)
or
die
(
mysql_error
(
)
)
;
}
}
$sw
=
1
;
}
fclose
(
$handle
)
;
print
"Import done"
;
}
else
{
echo
'<form action="#" method="post" enctype="multipart/form-data">
Select file to import:<br>
<input type="file" name="filename" size="20"><br>
<input type="submit" name="submit" value="submit">
</form>'
;
}
//$import="select * from main_table";
//$runq = mysql_query($import) or die(mysql_error());
//$import2="select * from table2";
//$runq2 = mysql_query($import2) or die(mysql_error());
//DbClose();
?>
[/php:32y5pct6]
Y me marca sólamente estos errores:
[php:32y5pct6]
Notice: Undefined offset:
1
in site on line
42
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
[/php:32y5pct6]
Ésta es la línea 42:
[php:32y5pct6]
$clave
[
1
]
++;
[/php:32y5pct6]
¿Alguna idea para resolver esto?
Saludos.
chesbor
Miembro activo
Mensajes: 47
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
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
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
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
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
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.
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación Web y Scripting
»
PHP
(Moderador:
F_Tanori
) »
Problema al insertar valores en una BD.