Foros del Web » Programando para Internet » PHP »

Problemas para grabar un texto largo

Estas en el tema de Problemas para grabar un texto largo en el foro de PHP en Foros del Web. Hola gente, tengo un problema extraño con un sistema que estoy desarrollando a ver si me dan una mano: Resumo lo que quiero hacer: Un ...
  #1 (permalink)  
Antiguo 06/11/2003, 23:22
 
Fecha de Ingreso: mayo-2003
Mensajes: 448
Antigüedad: 14 años, 6 meses
Puntos: 5
Problemas para grabar un texto largo

Hola gente, tengo un problema extraño con un sistema que estoy desarrollando a ver si me dan una mano:

Resumo lo que quiero hacer: Un formulario donde hay una caja de texto donde el usuario puede escribir un texto largo, luego este se guarda en un campo de una base de datos MySQL tipo longtext. Hasta ahí todo bien, he probado pegar textos extensos y funciona correctamente.

Pero se me ocurrio evitarle el trabajo incluso de copiar y pegar, y que pueda seleccionar un archivo de tipo texto plano (.txt) o podria ser html (.htm) tambien, y grabar en el campo de la base de datos directamente el contenido de dicho archivo. Y aquí es donde tengo problemas. Cuando selecciono archivos de mas de 400 bytes, MySQL no los graba...

Estas son las líneas que estoy usando para leer el contenido del archivo:

$ptro=fopen($archivo_importado, "r");
$texto=fread($ptro, filesize($archivo_importado));
fclose($ptro);

Cuando quiero grabar $texto en el campo longtext de MySQL recibo error.
Pero con archivos de menos de 400 bytes si graba. Los archivos "grandes" que me fallan en realidad no son tan grandes: 4000 bytes.
Si hago echo $texto, el contenido del archivo está perfecto, y lo peor de todo: Si edito el archivo copio el contenido y lo pego en la caja de texto, MySQL lo graba perfecto, y eso que uso la misma variable: $texto...

Perdon si fui muy extenso, pero es que el problema que tengo es dificil de explicar, espero me den una mano, desde ya, muchas gracias.

Tomás.
  #2 (permalink)  
Antiguo 07/11/2003, 00:35
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 14 años, 2 meses
Puntos: 41
Puedes visitar un artículo sobre los tipos de datos en Mysql acá:

http://www.mysql-hispano.org/page.php?id=22&pag=2

Ahí encontré esto:
Cita:
LONGTEXT
Una columna BLOB o TEXT con una longitud náxima de 4294967295 (2^32 - 1) caracteres.
Saludos
  #3 (permalink)  
Antiguo 07/11/2003, 06:12
 
Fecha de Ingreso: mayo-2003
Mensajes: 448
Antigüedad: 14 años, 6 meses
Puntos: 5
Exacto! y yo simplemente le mando 4000, por eso no entiendo por qué rebota. Pero si le mando solo 400 lo acepta, o si le pego los 4000 en un textarea también los toma! Es raro.
  #4 (permalink)  
Antiguo 07/11/2003, 06:23
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Hola,

¿Has hecho un echo filesize($archivo_importado); para ver si el fichero se ha subido completo? Tambien pon el formulario de upload. Y si tiene el campo oculto MAX_FILE_SIZE, decirte que el valor es en bytes, asi que si lo tienes en 1000, solo deja subir ficheros de hasta 1000 bytes. Lo digo porque como en tu mensaje dices que de 400 bytes funciona, pero con 4000 no, y creo recordar que el ejemplo del manual lo pone a 1000. Si tienes ese valor, prueba a subirlo. Y tambien mira en el php.ini o en el phpinfo() la directiva de tamaño maximo de upload (creo recordar que era upload_max_filesize). No podras subir ficheros de mas de ese tamaño.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #5 (permalink)  
Antiguo 07/11/2003, 13:49
 
Fecha de Ingreso: mayo-2003
Mensajes: 448
Antigüedad: 14 años, 6 meses
Puntos: 5
He chequeado el upload_max_filesize en el php.ini y está puesto a 2 MB.
Hice echo filesize($archivo_importado) y muestra los 4000 b. Además si hago echo de $texto me muestra el contenido del archivo completo.
Es decir que el archivo parece subir correctamente, el error es cuando quiero volcar los 4000 b al campo de la base de datos, pero supuestamente el tipo longtext acepta mucho más que 4000 b.

Lo que no he entendido es lo del campo oculto MAX_FILE_SIZE ¿que seria eso?
  #6 (permalink)  
Antiguo 07/11/2003, 15:01
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 14 años, 1 mes
Puntos: 11
crei que mi mensaje no te habia llegado, pero al parecer te respondi en otro foro, en el de base de datos. ahi puedes leerlo
__________________
Dedicado a proyectos web, actualmente desarrollando un sistema de diseño de flyers online muy fácil de usar.
  #7 (permalink)  
Antiguo 09/11/2003, 21:51
 
Fecha de Ingreso: mayo-2003
Mensajes: 448
Antigüedad: 14 años, 6 meses
Puntos: 5
Bueno en definitiva lo que hice es algo muy poco elegante, pero no pude solucionar de otra manera: Leo el archivo subido y guardo todo el contenido en una varible de sesión, luego vuelvo a la página original (desde la cuál el usuario eligió el archivo a importar), y cargo en un textarea el contenido de la variable de sesión. Luego, el usuario presiona "Enviar" y los datos me llegan en una variable $_POST (que es lo que ocurre si el texto se copia y pega) y así si funciona bien, pero no puedo explicarme por qué al leer el contenido y querer grabarlo directamente en la base de datos no me lo permite. No he podido encontrar la respuesta, pero seguiré buscando, cualquier cosa les cuento.
  #8 (permalink)  
Antiguo 10/11/2003, 01:57
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Hola,

¿El texto contiene '? ¿Que valor tienen las directivas magic_quotes_gpc y magic_quotes_runtime? Si el texto contiene ', es un caracter que debes escapar antes de meter en la base de datos. Si tienes magic_quotes_gpc a ON, PHP ya lo hace "automagicamente", escapando los valores GET, POST, COOKIES y SESSION. Si magic_quotes_runtime esta a OFF, PHP no escapa "automagicamente" los datos que vienen de base de datos o ficheros.

Por cierto, nunca has puesto el error MySQL que te daba. Lo podias mostrar poniendo:
Código PHP:
mysql_query("....") or die ("MySQL dice: ".mysql_error()); 
Supongo que te pondra algo como "Error de sintaxis".

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
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 09:32.