Foros del Web » Programando para Internet » PHP »

cadenas, textarea, saltos de linea y BBDD

Estas en el tema de cadenas, textarea, saltos de linea y BBDD en el foro de PHP en Foros del Web. Hola, Lo primero, pedir disculpas si repito el tema o la pregunta, he estado revisando los temas pero ninguno llega realmente a englobar mi caso. ...
  #1 (permalink)  
Antiguo 23/06/2009, 06:15
 
Fecha de Ingreso: octubre-2007
Mensajes: 25
Antigüedad: 16 años, 6 meses
Puntos: 1
cadenas, textarea, saltos de linea y BBDD

Hola,

Lo primero, pedir disculpas si repito el tema o la pregunta, he estado revisando los temas pero ninguno llega realmente a englobar mi caso. Os cuento:

Tengo un textarea que rellena el usuario con tantas lineas y saltos de linea como quiera, paso el contenido al PHP para insertarlo en la base de datos.
Hasta aquí no hay problema porque la BBDD me admite insertar saltos de linea y retornos de carro pero posteriormente debo leer estos textos de la BBDD y volver a meterlos en el textarea.

Me da continuamente el error "unterminated string literal" cuando, a través del PHP, intento cargar el texto en el textarea correspondiente.

He intentado quitar los retornos de carro (\r) y sustituir los \n que quedan con la función nl2br por <br \> antes de hacer la inserción para leerlo después en el formato "correcto" (se supone). Al insertar en base de datos no hay problema, pero de nuevo me da el error cuando intento volcar el texto al textarea.

También he intentado sustituir a lo "bestia" (str_replace) los saltos de linea y retornos por "<br>" y por "<br \>". Lo inserto en BBDD pero me da el mismo error al intentar guardarlo en el textarea.

He probado funciones como htmlentities(), la nl2br() pero no doy con ello.

Agradezco cualquier ayuda o pista que me puedan dar.

Gracias por adelantado!
  #2 (permalink)  
Antiguo 23/06/2009, 08:17
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: cadenas, textarea, saltos de linea y BBDD

unterminated string literal, ese no es un error de PHP, es de Javascript, que es lo que intentas hacer?

Saludos.
  #3 (permalink)  
Antiguo 23/06/2009, 08:17
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: cadenas, textarea, saltos de linea y BBDD

Ok, primero para el <br> no debes usar <br \> sino <br /> . Acuerdate que \ es para escapar un caracter.

¿Si das un echo en la pantalla sin usar el <textarea> te trae la información?

Otra cosa acuerdate que para traer la informacion en el <textarea> debe ser asi

Código PHP:
<textarea><?php echo "informacion va aqui"?></textarea>
Y unterminated string literal es un error de javascript
  #4 (permalink)  
Antiguo 23/06/2009, 09:27
 
Fecha de Ingreso: octubre-2007
Mensajes: 25
Antigüedad: 16 años, 6 meses
Puntos: 1
Respuesta: cadenas, textarea, saltos de linea y BBDD

Hola,

Gracias por vuestras respuestas.
Sé que el error es de javascript, pero todo lo estoy haciendo desde PHP, motivo por el cuál he puesto mi pregunta en este foro.

El insert en la base de datos lo hago desde PHP, recibo por POST el value del textarea con sus saltos de linea, en mi caso \n\r y hago la inserción.

Desde el mismo PHP leo de la BBDD el comentario insertado y lo intento cargar directamente en el value del texarea:
echo "<script>";
echo "parent.document.getElementById(\"mitextarea\").va lue='".$row['comentariodelabasededatos']."';";
echo "</script>";

El error, efectivamente lo veo en la consola de errores de JS pero imagino que la solución, corregidme si me equivoco, estará en el PHP.

Dísculpa si puse mal el <br/>, ha sido un lapsus... no obstante, ese no es el problema porque he usado la función nl2br que no comete este fallo y que cambia los \n por los br de HTML...correcto? (quitando antes los \r con str_replace)

Creo que me he encabezonado, tengo sensación de que será una chorrada, pero no caigo...

A la pregunta de abimaelrc:

Si hago el select del comentario y un echo, lo veo perfectamente, con sus saltos de linea cuando he probado a guardarlo tal y como lo recibo y con los br's cuando los he puesto. Sólo me da problemas cargar ese comentario en el value del textarea.

Espero haberme explicado con claridad.

Muchas gracias de nuevo!!
  #5 (permalink)  
Antiguo 23/06/2009, 09:34
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: cadenas, textarea, saltos de linea y BBDD

Ok, ya veo lo que quieres hacer. El problema es que para poder pasar un dato de textarea a un textarea que esta en un parent debes escapar todos los caracteres de return, pero para evitar usar mucho codigo, mi sugerencia es que uses otro textarea en la pantalla hija.

Ejemplo

Código PHP:
<form name="form1">
<textarea name="texto"><?php echo $row['comentariodelabasededatos']; ?></textarea>
</form>

<script language="javascript">
parent.document.getElementById(\"mitextarea\").value = document.form1.texto.value;
</script>
Así no te tienes que preocupar de escapar los caracteres. Tambien puedes usar un div, pero debes tener conocimiento del HTML DOM
  #6 (permalink)  
Antiguo 23/06/2009, 09:44
 
Fecha de Ingreso: octubre-2007
Mensajes: 25
Antigüedad: 16 años, 6 meses
Puntos: 1
Respuesta: cadenas, textarea, saltos de linea y BBDD

Cita:
Iniciado por abimaelrc Ver Mensaje
Ok, ya veo lo que quieres hacer. El problema es que para poder pasar un dato de textarea a un textarea que esta en un parent, mi sugerencia es que uses otro textarea.

Ejemplo

Código PHP:
<form name="form1">
<textarea name="texto"><?php echo $row['comentariodelabasededatos']; ?></textarea>
</form>

<script language="javascript">
parent.document.getElementById(\"mitextarea\").value = document.form1.texto.value;
</script>
O puedes usar un div. Pero debes tener conocimiento del HTML DOM
Gracias de nuevo, qué rapidez!!
No me sirve la solución que planteas porque el comentario lo leo desde PHP de una base de datos, ya no está en un textarea si no en una tabla. Cómo el acceso a la BBDD sólo lo puedo hacer desde PHP es ahí dónde leo el comentario y dónde intento cargarlo en el textarea que está en el HTML origen.

A ver si me explico unpoco mejor:
tengo dos ficheros, un HTML y un PHP, el HTML contiene un textarea, cuando se rellena se pasa por POST el value al PHP y se hace un oinsert de ese valor en la base de datos.
Esto no me da problemas porque la BBDD me permite insertar saltos de linea y retornos de carro.
Por ejemplo, mi comentario queda guardado así en la BBDD:
Hola esto es\n\r
un comentario con salto de linea

Luego desde PHP hago un "select comentario from mitabla" y lo cargo enla variable $row['comentario'].
Cómo lo tengo en una variable PHP hago lo que os comenté antes:
echo "<script>";
echo "parent.document.getElementById(\"mitextarea\" ).va lue='".$row['comentariodelabasededatos']."';";
echo "</script>";

En ese punto no me muestra el comentario en el textarea y me da el error "Unterminated string...

Mil gracias!
  #7 (permalink)  
Antiguo 23/06/2009, 09:48
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: cadenas, textarea, saltos de linea y BBDD

Por eso te dije que crees un textarea

Ejemplo
Código PHP:
echo "<form name='form1'>
  <textarea name='texto'>{$row['comentariodelabasededatos']}</textarea>
</form>
<script language='javascript'>
parent.document.getElementById(\"mitextarea\" ).value=document.form1.texto.value;
</script>"

Pruebalo y me dejas saber
  #8 (permalink)  
Antiguo 23/06/2009, 09:58
 
Fecha de Ingreso: octubre-2007
Mensajes: 25
Antigüedad: 16 años, 6 meses
Puntos: 1
Respuesta: cadenas, textarea, saltos de linea y BBDD

Cita:
Iniciado por abimaelrc Ver Mensaje
Por eso te dije que crees un textarea

Ejemplo
Código PHP:
echo "<form name='form1'>
  <textarea name='texto'>{$row['comentariodelabasededatos']}</textarea>
</form>
<script language='javascript'>
parent.document.getElementById(\"mitextarea\" ).value=document.form1.texto.value;
</script>"

Pruebalo y me dejas saber

Genial, muchísimas gracias, no te había entendido!!
Lo acabo de probar y por fin me carga el comentario con sus saltos de linea, etc,...

Muy buena la solución (y sencilla!!), quedo muuuuy agradecida.

Un saludo enorme!
  #9 (permalink)  
Antiguo 16/10/2009, 11:13
 
Fecha de Ingreso: octubre-2009
Mensajes: 3
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: cadenas, textarea, saltos de linea y BBDD

Hola gente, tengo una nueva solución a este problema:

desde php reemplazo los caracteres ASCII 13 y 10 (reemplazo uno de los dos y envío la cadena resultante como parámetro al otro reemplazo) por una cadena identificativa del salto de línea (definida por nosotros):

Código PHP:
$cadenaNueva=str_replace(chr(13),"",str_replace(chr(10),"%%valorParaEnter%%",$valor)); 
después, en javascript, reemplazamos en esta cadena el valor de enter (%%valorParaEnter%%) por el caracter '\n' para que se muestren los saltos de línea, con una función especial:

Código PHP:
//En realidad es código javascript, pero no conozco la etiqueta correcta
valorNuevo=reemplazarCadenaEnter(valor); 
La función reemplazarCadenaEnter() reemplaza todas las ocurrencias de la cadena que elegimos por el caracter '\n' para que se muestren los saltos de línea correspondientes:

Código PHP:
//En realidad es código javascript, pero no conozco la etiqueta correcta
function reemplazarCadenaEnter(cadena){
    do{
        if (
document.allcadena=cadena.replace('%%valorParaEnter%%','\n\r');
        else 
cadena=cadena.replace('%%valorParaEnter%%','\n');
    }while(
cadena.indexOf('%%valorParaEnter%%')!=-1)
    return 
cadena;

Espero que les sirva. Saludos!!
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

SíEste tema le ha gustado a 2 personas




La zona horaria es GMT -6. Ahora son las 16:05.