Foros del Web » Programando para Internet » PHP »

Script para subir documentos a la bd

Estas en el tema de Script para subir documentos a la bd en el foro de PHP en Foros del Web. Buenas. Estoy desarrollando un script para poder subir a la base de datos textos grandes divididos en paginas, es decir cada pagina (mas o menos) ...
  #1 (permalink)  
Antiguo 23/04/2005, 11:07
 
Fecha de Ingreso: junio-2003
Ubicación: Valencia
Mensajes: 334
Antigüedad: 20 años, 9 meses
Puntos: 0
Script para subir documentos a la bd

Buenas.
Estoy desarrollando un script para poder subir a la base de datos textos grandes divididos en paginas, es decir cada pagina (mas o menos) sera un registro.
El problema es que cuando llega a un determinado registro da error y no entiendo por que.
Os dejo el codigo para que le echeis un vistazo y me digais si veis algo raro.

Código PHP:
 <?

//Conexión a la base de datos
$con mysql_connect("localhost","","") or die (mysql_error());
mysql_select_db("nueva",$con) or die (mysql_error());

$cont=0;
//Nombre del texto
$vari="rentabilidad.txt";
if (
file_exists($vari))
    {
$referencia=fopen($vari"r");
do
    {
//Hacemos un bucle que vaya mostrando y metiendo en la bd los registros
     //Este bucle cuenta 44 lineas y las inserta (que son las que tiene una hoja de word)
      
while($cont!=44)
         {
$fila=fgets($referencia80);
        
//Aqui es donde mostramos por pantall
         
echo $fila.'<br>';
        
//Aqui metemos en una variable todo el contenido
         
if ($cont==0)
            
$contenido$fila;
         else
            
$contenido=$contenido.$fila;
        
//El tipico contador 
         
$cont++;
    }
    
//Ahora insertamos en la bd la variable con las 44 lineas, es decir una hoa
    
mysql_query("insert into textos  values ('$contenido')"$con) or die("error2");
//Inicializamos el contador a 0
$cont=0;
//Le decimos que se repita mientras exista la variable que coge las filas
}while(isset($fila));
}
//Cerramos
fclose($referencia);
?>
Muchas gracias de antemano
__________________
http://reunga.com
Desarrollo de aplicaciones informáticas
  #2 (permalink)  
Antiguo 23/04/2005, 11:19
 
Fecha de Ingreso: enero-2004
Ubicación: Salto
Mensajes: 484
Antigüedad: 20 años, 2 meses
Puntos: 2
Sería más facil si pusieras q error te da y en q linea del código o algo.
Saludos cuidate
__________________
Dios dira que esto no es justo, pero lo sera...
  #3 (permalink)  
Antiguo 23/04/2005, 11:48
 
Fecha de Ingreso: junio-2003
Ubicación: Valencia
Mensajes: 334
Antigüedad: 20 años, 9 meses
Puntos: 0
El problema es ese exactamente. Haber si me explico.
El script empieza a funcionar y no da nindun error hasta que inserta unos cuantos registros (bastantes no los he contado) y el error que da es "error2", es decir que no hace el insert correctamente, pero la cuestion es que ya ha echo otros antes pero cuando le viene en gana te salta el error y no se porque es.
Si fuera que no funciona ninguno lo entenderia, pero como deja de funcionar "cuando quiere" pues eso es lo que me esta volviendo loco.
__________________
http://reunga.com
Desarrollo de aplicaciones informáticas
  #4 (permalink)  
Antiguo 23/04/2005, 16:56
 
Fecha de Ingreso: enero-2004
Ubicación: Salto
Mensajes: 484
Antigüedad: 20 años, 2 meses
Puntos: 2
Podrías poner en lugar de "error2" or die(mysql_error()); si ya lo pusiste y lo q te da es literalmente "error 2" pues deberías buscar en la página de mysql q significa ese error y bajo q condiciones puede ser q surja. Puede ser un problema de time out, es decir q el proceso dura demasiado tiempo. PHP por defecto viene configurado con un time out de 30 segundos. En el php.ini es una linea algo así max_execution_time = 30, si tienes acceso a él, fijate q este configurado para mostrar los errores:
error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT
display_errors = On
Saludos cuidate
__________________
Dios dira que esto no es justo, pero lo sera...
  #5 (permalink)  
Antiguo 24/04/2005, 04:02
 
Fecha de Ingreso: junio-2003
Ubicación: Valencia
Mensajes: 334
Antigüedad: 20 años, 9 meses
Puntos: 0
Si, Sebtev, ese es el problema.
Me dice que existen errores en los tiempos de insercion.
He estado buscando y todo apunta a que debo modificar estas dos variables:

delayed_insert_timeout
delayed_insert_limit

El problema es que no se como hacerlo ni donde estan. Las he buscado pero no las encuentro y por internet no he encontrado informacion exacta de como modificarlas, ni buscando por aqui tampoco, asi que agradeceria si alguien lo ha echo que me dijera como.
Gracias
__________________
http://reunga.com
Desarrollo de aplicaciones informáticas
  #6 (permalink)  
Antiguo 25/04/2005, 07:32
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 2 meses
Puntos: 129
Será mejor que nos indiques el error "textual" que obtienes .. no "filtrado" por tus propias conclusiones que "podrían no ser correctas" (observa que lo pongo entre comillas) .. El tema es tener la suficiente información (como tu la tienes) para evaluar y sacar alguna conclusión ..

También ayudaría ver el SQL que dá el problema .. mas o menos al usar la función mysql_error() ya te lo dirá .. y será tal vez eso que has puesto .. pero estaría bueno confirmalo. Podría ser por ejemplo que no tuvieras permisos (el usuario que usas para conectarte a Mysql) para ejecutar una sentencia SQL de ese tipo .. en otras ocasiones podría ser que la versión de Mysql que usas no soporta esos comandos SQL ..

En esos casos .. se podría "modificar" tu SQL (quitando esas funcionalidades que realmente no son extremadamente relevantes) para hacer lo más "compatible" con toda versión de Mysql tu SQL generado por otra aplicación .. En su defecto si puedes volver a reproducir ese ".sql" .. hazlo denuevo y no uses las opciones referentes a "retrasar la insercción" (como esos delayed.... que usas).

En cualquier caso .. el problema ya no es de PHP .. la parte PHP; -para ver el mensaje de error- ya lo vistes .. ahora es problema integro de SQL (aunque para corroborar esto .. habría que ver el mensaje de error textual que obtienes).

Un saludo,
  #7 (permalink)  
Antiguo 25/04/2005, 13:43
 
Fecha de Ingreso: junio-2003
Ubicación: Valencia
Mensajes: 334
Antigüedad: 20 años, 9 meses
Puntos: 0
Vale, vamos a ver os lo voy a poner todo para que lo podais ver.
El codigo lo pongo aqui entero porque lo he modificado un poco:

Código PHP:
<?
//Conexión a la base de datos
$con mysql_connect("localhost","","") or die (mysql_error());
mysql_select_db("nueva",$con) or die (mysql_error());

$cont=0;
//Nombre del texto
$vari="VBScript.txt";
if (
file_exists($vari))
    {
$referencia=fopen($vari"r");
do
    {
//Hacemos un bucle que vaya mostrando y metiendo en la bd los registros
     //Este bucle cuenta 44 lineas y las inserta (que son las que tiene una hoja de word)
      
while($cont!=44)
         {
$fila=fgets($referencia80);
        
//Aqui es donde mostramos por pantall
         
echo $fila.'<br>';
        
//Aqui metemos en una variable todo el contenido
         
if ($cont==0)
            
$contenido$fila;
         else
            
$contenido=$contenido.$fila;
        
//El tipico contador 
         
$cont++;
    }
    
//Ahora insertamos en la bd la variable con las 44 lineas, es decir una hoa
    
mysql_query("insert into textos  values ('$contenido')"$con) or die(mysql_error());
//Inicializamos el contador a 0
$cont=0;
//Le decimos que se repita mientras exista la variable que coge las filas
}while(!empty($fila));
}
//Cerramos
fclose($referencia);
?>
La base de datos (por si lo quereis probar) hasta ahora es muy basica:


CREATE TABLE `textos` (
`todo_texto` longtext NOT NULL
) TYPE=MyISAM;

y el nombre de la bd es "nueva".
El error que da es el siguiente:

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 'click' oscilan entre los 0.03 y 0.10 euros. Por registro: En

Y nada mas.
Estoy probando con otros textos y si que funciona, pero es este en concreto (tambien el mas largo) el que me da este error. Haber si me podeis echar una mano.
Gracias
__________________
http://reunga.com
Desarrollo de aplicaciones informáticas
  #8 (permalink)  
Antiguo 25/04/2005, 14:03
Avatar de dwaks  
Fecha de Ingreso: agosto-2002
Ubicación: Panamá
Mensajes: 962
Antigüedad: 21 años, 7 meses
Puntos: 15
De acuerdo Aqui te va los errores que veo.

$con = mysql_connect("localhost","","") or die (mysql_error());

Esta linea le falta aunquesea el user para conectar a la base de datos que por default es root
$con = mysql_connect("localhost","root","") or die (mysql_error());

-------------------------------------

while($cont!=44)

Si lo que quieres es que solo meta 44 registros aqui no hace eso ya que le dices que no sea igual a 44 a mi parecer lo mejor es que se mantenga el valor de forma menor al 44 y seria
while($cont<=44)
Esto es a mi parecer y nunca me a fallado.

-------------------------------------

mysql_query("insert into textos values ('$contenido')", $con) or die(mysql_error());

Esta linea le veo mal el sql que usas para insertar ya que debe ser asi.
mysql_query("insert into textos (todo_texto) values ('".$contenido."')", $con) or die(mysql_error());

--------------------------------------

Y la verdad disculpa pero la forma como yo haria ese proceso no fuese de esa manera. Pero ahorita no tengo el tiempo apenas lo tenga te pongo como lo haria yo aqui para que lo pruebes y si te funciona me alegro.
  #9 (permalink)  
Antiguo 26/04/2005, 13:46
 
Fecha de Ingreso: junio-2003
Ubicación: Valencia
Mensajes: 334
Antigüedad: 20 años, 9 meses
Puntos: 0
Cita:
Iniciado por dwaks
$con = mysql_connect("localhost","","") or die (mysql_error());

Esta linea le falta aunquesea el user para conectar a la base de datos que por default es root
$con = mysql_connect("localhost","root","") or die (mysql_error());

-------------------------------------
Tienes razon, aunque si trabajas en local no hace falta ponerla.

Cita:
Iniciado por dwaks

while($cont!=44)

Si lo que quieres es que solo meta 44 registros aqui no hace eso ya que le dices que no sea igual a 44 a mi parecer lo mejor es que se mantenga el valor de forma menor al 44 y seria
while($cont<=44)
Esto es a mi parecer y nunca me a fallado.

-------------------------------------
Aqui lo que le digo es que haga el bucle mientras que no llegue a 44. Creo que da igual ponerlo de tu forma que de la mia. Como es un contador y va de uno en uno llegara a tener el mismo resultado, aunque si admito que esta mejor dicho de tu forma.

Cita:
Iniciado por dwaks

mysql_query("insert into textos values ('$contenido')", $con) or die(mysql_error());

Esta linea le veo mal el sql que usas para insertar ya que debe ser asi.
mysql_query("insert into textos (todo_texto) values ('".$contenido."')", $con) or die(mysql_error());

--------------------------------------
Aqui si que no te puedo dar la razon. Al hacer un Insert en SQL puedes hacer dos cosas o poner los campos que vas a poner uno detras de otro (siempre en el caso de que o quieras hacerlo asi o no vayas a ponerlos todos).
Voy a explicar esto ultimo que me parece que no ha quedado muy claro:
A ver, si tuvieramos una tabla con diez columnas y fueramos a insertar en TODOS lo pondriamos asi:

Insert into textos values (valor1, valor2, valor3...valor4);

Tambien lo podriamos poner asi:

Insert into textos (col1, col2, col3...col10) values (valor1, valor2, valor3...valor4);

Solo en el caso de que no fueramos a insertar en TODOS deberiamos especificar, obligatoriamente, en cuales vamos a insertar de esta forma:

Insert into textos (col1, col2, col3, col5, col9, col10) values (valor1, valor2, valor3, valor5, valor9, valor10);

[/QUOTE]

Cita:
Iniciado por dwaks
Y la verdad disculpa pero la forma como yo haria ese proceso no fuese de esa manera. Pero ahorita no tengo el tiempo apenas lo tenga te pongo como lo haria yo aqui para que lo pruebes y si te funciona me alegro.
Tranquilo no me ofende. Es mas seguro que de cada uno de los que estamos en estos foros lo hubiera escrito diferente, (no creo que se hubiera dado el caso de tener dos exactamente iguales) unos mejor, y otros peor. Como todo en la vida, eso no es ningun misterio.

De todas formas, por si acaso, he probado tus cambios y tampoco me funcionan. Haber si alguien poner algo de luz a este problema.
Muchas gracias por vuestras respueestas
__________________
http://reunga.com
Desarrollo de aplicaciones informáticas
  #10 (permalink)  
Antiguo 30/04/2005, 08:08
 
Fecha de Ingreso: junio-2003
Ubicación: Valencia
Mensajes: 334
Antigüedad: 20 años, 9 meses
Puntos: 0
Solucionado!!!!
Gracias a todos por la ayuda.
El problema no esta en el script como yo pensaba sino en el documento que subia.
El documento era un curso en html con multitud de signos propios tales como < ó > y se volvia loco por esto.
__________________
http://reunga.com
Desarrollo de aplicaciones informáticas
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 18:47.