Foros del Web » Programando para Internet » PHP »

¿Cómo guardo en mysql lo siguiente...?

Estas en el tema de ¿Cómo guardo en mysql lo siguiente...? en el foro de PHP en Foros del Web. Buenas, imaginad que quiero guardar un mensaje de un hilo de unos foros en una registro en MySQL. Lo he intentado con VARCHAR(2000) [para 2000 ...
  #1 (permalink)  
Antiguo 20/03/2007, 18:33
 
Fecha de Ingreso: marzo-2007
Mensajes: 129
Antigüedad: 17 años, 1 mes
Puntos: 0
¿Cómo guardo en mysql lo siguiente...?

Buenas, imaginad que quiero guardar un mensaje de un hilo de unos foros en una registro en MySQL.

Lo he intentado con VARCHAR(2000) [para 2000 caracteres], pero no da resultado.

¿Alguien me puede echar un cable? No estoy muy metido en el tema.

Un saludo!

EDITO: Lo he puesto como TEXT, pero no me guarda los saltos de linea, es mi imaginación?

Última edición por Grothias; 20/03/2007 a las 18:39
  #2 (permalink)  
Antiguo 20/03/2007, 18:50
 
Fecha de Ingreso: julio-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 1.304
Antigüedad: 18 años, 9 meses
Puntos: 6
Re: ¿Cómo guardo en mysql lo siguiente...?

Si guarda los saltos de linea, pero los comunes \n. Si los queres ver en codigo HTML los tenes que reemplazar por <br>.

<?php echo nl2br($campo);?>
__________________
Federico.

Mi página: www.jourmoly.com.ar
  #3 (permalink)  
Antiguo 20/03/2007, 19:03
Avatar de eits  
Fecha de Ingreso: junio-2005
Ubicación: valladolid, yucatán
Mensajes: 1.655
Antigüedad: 18 años, 10 meses
Puntos: 88
Re: ¿Cómo guardo en mysql lo siguiente...?

observacion, ya te fijaste si realmente se guardan tus 2000 caracteres, porque yo tengo entendido que varchar solo soporta 250 y para lo que necesitas puedes usar text(2000) porque este soporta 65535 al igual que el blob.

saludos.
__________________
El amor es la locura mas lucida que tiene el hombre.- Andres Henestrosa
la tristeza no existe, solo es... la ausencia de la felicidad.
  #4 (permalink)  
Antiguo 20/03/2007, 19:07
 
Fecha de Ingreso: marzo-2007
Mensajes: 129
Antigüedad: 17 años, 1 mes
Puntos: 0
Re: ¿Cómo guardo en mysql lo siguiente...?

Pero quiero que se vean dentro de otro textarea para que el usuario pueda editarlo.

Cita:
eits
Ya lo puse como TEXT, lo tengo editado en el primer mensaje (aunque se ve poco xD)
  #5 (permalink)  
Antiguo 20/03/2007, 19:39
 
Fecha de Ingreso: noviembre-2006
Mensajes: 146
Antigüedad: 17 años, 5 meses
Puntos: 1
Re: ¿Cómo guardo en mysql lo siguiente...?

Código HTML:
<textarea name="nombre"><?php echo $texto; ?></textarea> 
o
Código PHP:
echo "<textarea name='nombre'>".$texto."</textarea>"
  #6 (permalink)  
Antiguo 20/03/2007, 19:49
 
Fecha de Ingreso: noviembre-2003
Mensajes: 499
Antigüedad: 20 años, 5 meses
Puntos: 7
Re: ¿Cómo guardo en mysql lo siguiente...?

probaste con blob?
  #7 (permalink)  
Antiguo 20/03/2007, 20:02
 
Fecha de Ingreso: marzo-2007
Mensajes: 129
Antigüedad: 17 años, 1 mes
Puntos: 0
Re: ¿Cómo guardo en mysql lo siguiente...?

Ahora tengo el problema por el que todo el mundo ha pasado, el de los saltos de línea
  #8 (permalink)  
Antiguo 20/03/2007, 20:06
 
Fecha de Ingreso: marzo-2007
Mensajes: 129
Antigüedad: 17 años, 1 mes
Puntos: 0
Re: ¿Cómo guardo en mysql lo siguiente...?

Cita:
probaste con blob?
He probado y nada, me tira error cuando meto un salto de linea.
  #9 (permalink)  
Antiguo 20/03/2007, 21:20
 
Fecha de Ingreso: octubre-2006
Ubicación: México D.F
Mensajes: 210
Antigüedad: 17 años, 6 meses
Puntos: 0
Re: ¿Cómo guardo en mysql lo siguiente...?

Prueba con addslashes... para guardarlo.
strip_tags con stripslashes para mostrarlo.

Saludos
  #10 (permalink)  
Antiguo 21/03/2007, 03:10
 
Fecha de Ingreso: marzo-2007
Mensajes: 129
Antigüedad: 17 años, 1 mes
Puntos: 0
Re: ¿Cómo guardo en mysql lo siguiente...?

Nada, he probado y sigue igual...

Lo tengo en BLOB.

EDITO: También he probado en TEXT...

Última edición por Grothias; 21/03/2007 a las 03:23
  #11 (permalink)  
Antiguo 21/03/2007, 07:32
 
Fecha de Ingreso: marzo-2007
Mensajes: 129
Antigüedad: 17 años, 1 mes
Puntos: 0
Re: ¿Cómo guardo en mysql lo siguiente...?

Adjunto una imagen para que vean el problema :(

  #12 (permalink)  
Antiguo 21/03/2007, 07:48
Avatar de MWNS  
Fecha de Ingreso: julio-2003
Mensajes: 528
Antigüedad: 20 años, 9 meses
Puntos: 2
Re: ¿Cómo guardo en mysql lo siguiente...?

Hola, para que soluciones lo que muestras en tu imagen usa lo siguiente para mostrar el texto

<textarea name="textarea">echo nl2br($oss[TuTexto])</textarea>

El nl2br hace que se te respeten los saltos de línea que existan en tu registro.

Sobre tu BD, probaste con LongText ¿?

Chao
__________________
MWNS
Mario Navas
http://marionavas.com
  #13 (permalink)  
Antiguo 21/03/2007, 07:51
 
Fecha de Ingreso: marzo-2007
Mensajes: 129
Antigüedad: 17 años, 1 mes
Puntos: 0
Re: ¿Cómo guardo en mysql lo siguiente...?

Nada... Tengo puesto el textarea de la siguiente forma:

Código PHP:
<textarea name="anotacion" rows="20" cols="50" wrap="virtual" tabindex="2" onclick=getActiveText(this) 

onChange=getActiveText(this)>
<?php echo nl2br($txt);?>
</textarea><br>

Y para mostrarlo, como en la parte de abajo de la imágen anterior:

Código PHP:
<?php
echo "<center><h2>$ttxt</h2></center>";
echo 
"<center><table tableborder='yes' border='1' width='50%'><td>";
echo 
nl2br($txt);
echo 
"</table></center>";
?>
  #14 (permalink)  
Antiguo 21/03/2007, 08:05
Avatar de MWNS  
Fecha de Ingreso: julio-2003
Mensajes: 528
Antigüedad: 20 años, 9 meses
Puntos: 2
Re: ¿Cómo guardo en mysql lo siguiente...?

una pregunta ¿?

$txt de donde lo cargas ? desde la DB ?

de ser asi deberias usar:

Código PHP:
<?php
echo "<center><h2>$ttxt</h2></center>";
echo 
"<center><table tableborder='yes' border='1' width='50%'><td>";
echo 
nl2br($tuFila[txt]);
echo 
"</table></center>";
?>
__________________
MWNS
Mario Navas
http://marionavas.com

Última edición por MWNS; 21/03/2007 a las 08:10
  #15 (permalink)  
Antiguo 21/03/2007, 08:14
 
Fecha de Ingreso: marzo-2007
Mensajes: 129
Antigüedad: 17 años, 1 mes
Puntos: 0
Re: ¿Cómo guardo en mysql lo siguiente...?

Quizá el problema esté al introducir el texto en la BD...

Cuando creo el texto en el textarea, lo valido primero con JavaScript, para comprobar que no supera los 2000 caracteres.

Al validarlo, paso por la URL la variable que ha capturado el contenido del textarea...

¿Puede estar ahí el problema?
  #16 (permalink)  
Antiguo 21/03/2007, 08:33
Avatar de MWNS  
Fecha de Ingreso: julio-2003
Mensajes: 528
Antigüedad: 20 años, 9 meses
Puntos: 2
Re: ¿Cómo guardo en mysql lo siguiente...?

si el texto que ingresas es de 2000 caracteres pasas esos 2000 caracteres por url? , eso es lo que decís?

pues mira yo en mi web hago lo siguiente:

guardo el registro así:

Código PHP:
$exLab strip_tags(ucfirst(strtolower($exLaboral)));

mysql_query("insert into perfiles(exLaboral) values ('$exLab',')",$link); 
y luego lo leo así:

Código PHP:
echo nl2br($oss[exLaboral]); 
Y no tengo problema alguno con los saltos de línea
__________________
MWNS
Mario Navas
http://marionavas.com
  #17 (permalink)  
Antiguo 21/03/2007, 08:50
 
Fecha de Ingreso: marzo-2007
Mensajes: 129
Antigüedad: 17 años, 1 mes
Puntos: 0
Re: ¿Cómo guardo en mysql lo siguiente...?

MWNS, me gusta tu idea, si puedes explicarme cómo los has hecho, te lo agradecería muchísimo, porque llevo luchando con esto bastante tiempo.

Te pego el código completo para que le eches un vistazo:

Código PHP:
<html>
<
head>
<
script language="JavaScript">
function 
guardar()
{
if (
document.texto.ttxt.value!="")
    {
        if (
document.texto.anotacion.value.length>2000)
        {
        
alert("Lo lamentamos, pero su anotación tiene más de 2000 caracteres");
        }
        else
        {
        
ttxt document.texto.ttxt.value;
        
txt document.texto.anotacion.value;
        
location.href="guardartexto.php?ttxt="+ttxt+"&txt="+txt+"";
        }
    }
    else
    {
    
alert("Escribe un título para tu anotación");
    }
}
</script>
</head>
<body>

<form name="texto">
<center>Título: <input type="text" name="ttxt" maxlength="16"><br>
Contenido:<br>
<textarea name="anotacion" rows="20" cols="50" wrap="virtual" tabindex="2" onclick=getActiveText(this) 

onChange=getActiveText(this)>
</textarea><br>
<input type="button" value="Guardar" onClick="guardar();">
</center></form>


</body>
</html> 
Un saludo!
  #18 (permalink)  
Antiguo 21/03/2007, 08:58
 
Fecha de Ingreso: octubre-2006
Ubicación: México D.F
Mensajes: 210
Antigüedad: 17 años, 6 meses
Puntos: 0
Re: ¿Cómo guardo en mysql lo siguiente...?

Yo lo hago así:

En el script donde recibo el text para guardarlo:
Código PHP:
$allowedTags '<p><strong><em><u><h1><h2><h3><h4><h5><h6><img>';
$allowedTags .= '<li><ol><ul><span><div><br><ins><del>';

$str_content strip_tags(stripslashes($_POST['textarea']), $allowedTags);

$txt_texto addslashes($str_content);
$str_qry_text "INSERT INTO " DB_DATABASE_LIQ "." TABLA_TEXT_POST "(dtxnumpss, dtxsubpss, dtxtxtpss)
                     VALUES ($int_post, '$str_subtitulo', '$txt_texto');"

Y donde los muestro pues simplemente pongo el resultado de mi consulta.

Esto me respeta saltos de linea, formatos de texto, caracteres especiales urls, etc.
  #19 (permalink)  
Antiguo 21/03/2007, 09:16
 
Fecha de Ingreso: enero-2007
Ubicación: Cochabamba - Bolivia
Mensajes: 346
Antigüedad: 17 años, 4 meses
Puntos: 2
Re: ¿Cómo guardo en mysql lo siguiente...?

Se puede utilizar el MAXLENGTH para evitar que se ingresen mas caracteres de los que se desea.

De todos modos si se ingresaria mas caracteres del que esta definido en la BD para dicho campo, pues el unico problema es que no se almacenan todos los caracteres, asi que creo que es innecesario que verifiques si se ingreso o no 2000 caracteres, solo restringilo en el textarea.

Yo lo utilizo asi en mi pagina:

Código PHP:
<tr
<
td><div align="right"
<
p><font color="#000066" size="3" face="Berlin Sans FB">Observaciones:</font></p>
</
div></td>

<
td colspan="-4">
<
textarea name="obslab" cols="65" maxlength="100"></textarea></td>
</
tr
y el textarea que se llama OBSLAB lo guardo directamente en la BD. Sin tocar nada. El problema es el momento de mostrar el contenido, que ahi recien utilizamos el nl2br.

No se si te sirva, pero como dijo JAVISTA en otro post:

Pues la verdad es que si que ha guardado los saltos en linea y se imprimen en el html, pero ud como visualiza un salto de linea en un documento html? pues no ve nada, el navegador no interpreta el salto de linea como un salto de linea obligado en la interpretación del documento, lo que tiene que hacer es reemplazar el salto de linea ASCII con el salto de linea html, o sea, el <br> o si prefiere el <p>, el codigo es este:


Código PHP:
str_replace(Chr(13).Chr(10), "<br>"$text); 
Como se habrá dado cuenta, el Chr(13).Chr(10), son los dos carácteres del salto de línea, que SI se guardan en el mysql.

Haciendo ese reemplazo aseguras SI o SI que estas guardando los saltos de linea, y luego para mostrarlos solo usas el nl2br.
  #20 (permalink)  
Antiguo 21/03/2007, 10:44
 
Fecha de Ingreso: marzo-2007
Mensajes: 129
Antigüedad: 17 años, 1 mes
Puntos: 0
Re: ¿Cómo guardo en mysql lo siguiente...?

He probado a usar las dos formas... y nada :(

Os agradezco la ayuda, pero no me ha servido, sigue sucediendo lo mismo. No se guardan los saltos de linea.

Vamos a hacer una cosa, paso a paso...

- ¿De qué forma he de guardar el contenido del textarea? (BLOB, TEXT...)

- Cuando se pulsa el botón guardar, se valida con JavaScript para comprobar que no excede de 2000 caracteres (MAXLENGTH no funcionaba). Una vez comprobado, se pasa el valor del textarea a una variable, y ésta pasa por la URL.

- Una vez en la siguiente página, recogemos el valor del textarea con $_GET[txt] y lo volcamos dentro de una variable de sesión $_SESSION[txt].
Aquí dentro también escribiermos el contenido de dicha variable dentro de un registro en MySQL, de la siguiente manera:

Código PHP:
mysql_query("INSERT INTO texto (user_id, ttxt, ftxt, txt) VALUES ('$_SESSION[user_id]','$_GET[ttxt]',NOW(),'$_SESSION[txt]')") or die ("<b>ERROR</b>"); 
- Si pasamos a leer el contenido del registro, es cuando no se muestran los saltos de línea. El código de esa página es el siguiente:
1 - Hemos creado una consulta a la BD para extraer el texto que vamos a leer.
2 - Hacemos mysql_fetch_array para recoger el resultado de la consulta (ya que es un solo registro, usamos.
3 - Volcamos el valor del fetch_array en una variable: "$txt = $consulta[0];"

- Ya por último, mostramos el contenido de la consulta, el supuesto texto: "echo $txt;"

Lo he dejado sin las funciones que dicen por ahi, porque me muestra el mismo resultado con cualquiera de las formas.

Un saludo y gracias!

Última edición por Grothias; 21/03/2007 a las 10:56
  #21 (permalink)  
Antiguo 21/03/2007, 13:39
 
Fecha de Ingreso: octubre-2006
Ubicación: México D.F
Mensajes: 210
Antigüedad: 17 años, 6 meses
Puntos: 0
Re: ¿Cómo guardo en mysql lo siguiente...?

Y sin embargo, debe funcionar como te lo he puesto.
Diseñe un sistema de foros para una aplicación y sin problemas con lo que mencionas.

Por supuesto, al principio me ocurría todo lo que dices. Pero eso que he puesto funciona a la perfeccion.

1. Uso como campo de la BD un TEXT

2. El area de captura es un textarea.

3. Al hacer submit lo recibo con $_POST en el script que guarda el mensaje

4. Aplico las funciones arriba mostradas.

5. Lo guardo.

6. Hago la consulta..... y SI que traigo los saltos de línea, y cuanto formato haya escrito mi usuario. Comas, diagonales, saltos, viñetas, y todo lo que se te ocuarra.

No sé, igual y se trata de un caso diferente.

..... qué sentido tiene asignar el texto a una variable de sesion????

Saludos!
  #22 (permalink)  
Antiguo 21/03/2007, 14:12
 
Fecha de Ingreso: enero-2007
Ubicación: Cochabamba - Bolivia
Mensajes: 346
Antigüedad: 17 años, 4 meses
Puntos: 2
Re: ¿Cómo guardo en mysql lo siguiente...?

No muestres como estas diciendo:

- Ya por último, mostramos el contenido de la consulta, el supuesto texto: "echo $txt;"

Tienes que usar el nl2br.

O sea asi:

Código PHP:
echo nl2br($txt); 
Por ultimo no se si te sirva usar el htmlentities()

Código PHP:
$otro htmlentities($_POST['text']); 
En la BD se guardan automaticamente los saltos y demas, si tu campo es del tipo TEXT, asi que el problema esta en mostrar su contenido.
  #23 (permalink)  
Antiguo 21/03/2007, 15:11
 
Fecha de Ingreso: marzo-2007
Mensajes: 129
Antigüedad: 17 años, 1 mes
Puntos: 0
Re: ¿Cómo guardo en mysql lo siguiente...?

Buenas.

Gracias a todos, ya lo he conseguido.

Empece a hacerlo desde 0, en el formulario puse method="post". Lo que me dío muy buenos resultados.

También he usado htmlentities($_POST[txt]); para que no se guarden las etiquetas html.

Por ahora todo bien, puedo ver el texto como yo quería, CON SALTOS DE LÍNEA.

Ahora surge un nuevo problema, y espero que sea el último.

Una vez creado, doy la opción de editarlo.

El código del formulario es el siguiente:

Código PHP:
<form name="texto" action="editartexto2.php" method="post">
<center>Título: <input disabled type="text" name="ttxt" value="<?php echo $compttxt?>" maxlength="16"><br>
Contenido:<br>
<textarea name="txt" rows="20" cols="50" wrap="virtual" tabindex="2" onclick=getActiveText(this) onChange=getActiveText

(this)>
<?php echo nl2br($comptxt); ?>
</textarea><br>
<input type="submit" value="Guardar">
</center></form>
Y lo recibo en la siguiente página, editartexto2.php de la siguiente forma:

Código PHP:
<?php

var_dump
($_POST[ttxt], $_POST[txt]);
echo 
"<br>";

$_POST[txt] = htmlentities($_POST[txt]);
$_POST[ttxt] = htmlentities($_POST[ttxt]);
mysql_query("UPDATE texto SET txt='$_POST[txt]' WHERE user_id='$_SESSION[user_id]' AND ttxt='$compttxt'") or die 

(
mysql_error());;

echo 
"<center>La anotación se guardó correctamente.<br>";
echo 
"Espere para volver a la edición de su anotación, o bien haga click <a href='javascript:history.back()'>aquí</a>.";

?>
La conexión a la BD la hago antes de <html>, pero no hace falta que la incluya, no tienen ningún error sintáctico.

Si se fijan, he puesto var_dump para comprobar los valores de dichas variables POST, y me da como resultado:

"NULL string(30) "Buenas

Esto va!"

Pero cuando hago la consulta para actualizar el registro, no se guardan los cambios.

Se debe, a que el valor que aparece NULL no es bien recibido por el POST.

Me explico?
  #24 (permalink)  
Antiguo 21/03/2007, 16:06
 
Fecha de Ingreso: marzo-2007
Mensajes: 129
Antigüedad: 17 años, 1 mes
Puntos: 0
Re: ¿Cómo guardo en mysql lo siguiente...?

Ya lo solucioné, es porque tenía el input type text en "Disabled" en vez de ponerle readonly="readonly".

Muchas gracias a todos por la ayuda!

No se pueden imaginar lo que me ayudaron ^^

Gracias de nuevo!

Saludos!
  #25 (permalink)  
Antiguo 22/03/2007, 02:55
 
Fecha de Ingreso: septiembre-2006
Ubicación: Argentina
Mensajes: 190
Antigüedad: 17 años, 7 meses
Puntos: 1
Re: ¿Cómo guardo en mysql lo siguiente...?

Más fácil, te ponías un editor wysiwyg para editar y para insertar y listo. Chau problema a todo.
__________________
Gustavo
  #26 (permalink)  
Antiguo 22/03/2007, 10:06
 
Fecha de Ingreso: enero-2007
Ubicación: Cochabamba - Bolivia
Mensajes: 346
Antigüedad: 17 años, 4 meses
Puntos: 2
Re: ¿Cómo guardo en mysql lo siguiente...?

WYSIWYG?? Orale cual es ese editor??? Pero la gracia es hacer algo automatizado, el proceso de edicion a partir de sus formularios y de determinada informacion de la base de datos....en todo caso se ponia PHPMYADMIN y listo... pero supongo que estaba haciendo una interfaz... no???
  #27 (permalink)  
Antiguo 22/03/2007, 22:37
 
Fecha de Ingreso: septiembre-2006
Ubicación: Argentina
Mensajes: 190
Antigüedad: 17 años, 7 meses
Puntos: 1
Re: ¿Cómo guardo en mysql lo siguiente...?

Cita:
Iniciado por makeitslow Ver Mensaje
WYSIWYG?? Orale cual es ese editor??? Pero la gracia es hacer algo automatizado, el proceso de edicion a partir de sus formularios y de determinada informacion de la base de datos....en todo caso se ponia PHPMYADMIN y listo... pero supongo que estaba haciendo una interfaz... no???
Es un editor visual que se agraga a un textarea, es como el editor de este foro, te deja poner negrita, letras iconos o lo que quieras. Pero el caso es que se puede limitar a las necesidades qu tengas y listo.

Saludos.
__________________
Gustavo
  #28 (permalink)  
Antiguo 23/03/2007, 05:05
 
Fecha de Ingreso: marzo-2007
Mensajes: 129
Antigüedad: 17 años, 1 mes
Puntos: 0
Re: ¿Cómo guardo en mysql lo siguiente...?

La cosa es aprender código xq estoy aciendo un proyecto final para el ciclo de expLotación de sistemas.

Srry la orto, posteo desde una NDS.

Saludos.
  #29 (permalink)  
Antiguo 23/03/2007, 11:53
 
Fecha de Ingreso: enero-2007
Ubicación: Cochabamba - Bolivia
Mensajes: 346
Antigüedad: 17 años, 4 meses
Puntos: 2
Re: ¿Cómo guardo en mysql lo siguiente...?

UAU! Suena interesante tener esa opcion en un text area... Para una pagina web, esta cool.. pero para un sistema creo que no es muy razonable y necesario...
  #30 (permalink)  
Antiguo 23/03/2007, 12:26
 
Fecha de Ingreso: marzo-2007
Mensajes: 78
Antigüedad: 17 años, 1 mes
Puntos: 0
Re: ¿Cómo guardo en mysql lo siguiente...?

Cita:
Iniciado por Gustavo_AR Ver Mensaje
Es un editor visual que se agraga a un textarea, es como el editor de este foro, te deja poner negrita, letras iconos o lo que quieras. Pero el caso es que se puede limitar a las necesidades qu tengas y listo.

Saludos.
Hola,
Y cómo podemos asociar el WYSIWYG al textarea? Es decir, existe alguno implementado y que sólo tengamos que invocarlo de alguna manera ¿?
Gracias
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 23:42.