Saltos de línea en formularios.

Bueno verán, tengo un formulario sencillo y normal en html (por esto no pongo el código) con un textarea de esta forma:

<textarea name="lala" cols="40" rows="5"></textarea>

Y cuando el usuario manda el texto a través de el, me lo manda todo junto, es decir, si el usuario ingresó:

Textos
Con
Saltos
De
Línea

Amí me aparece (al mostrarlo, no sé si en la base de datos también):

Textos Con Saltos De Linea

Alguien sabe como puedo hacer para que me guarde los saltos de línea que me dio el usuario? De lo contrario el pobre tienen que coloca <br /> al final de cada frase :(

Saludos!
veamos
necesitamos saber que tan basico es tu formulario
yo tengo uno tambien, y a mi si me manda los saltos de linea como los ponga el usuario

si pudieras mostrarnos el codigo php, seria exelente
claro si necesitas ocultar correos electronicos o contraseñas... haslo

saludos
Es un formulario simplísimo!
<input type="text" name="lala"><br />
<textarea name="lala2" cols="30" rows="5"></textarea><br />

Y el php no lo pongo completo, pero el sistema es así:

<?php
mysql_query("INSERT INTO tabla(value1,value2) VALUES ('"$_POST["lala"]"', '"$_POST["lala2"]"')") or die ("Problemas al insertar");
?>

Es por esto que no entiendo XD!

Saludos!
haaaaaaaaaaaaa
es que se va a una base de datos... no te llega directo al correo electronico....
tendré que hacer una prueba con mi base y te cuento

saludos
Hola, lo que pasa es que el contenido de un textarea no tiene formato HTML, por ende, si lo ves con el navegador (o la base de datos) lo verás como una simple línea como has mostrado (en la base de datos siempre se verá sin formato, incluso si tiene HTML dentro del texto). Si quieres que sea vea con formato, tienes que inventar una forma que reconozca los saltos de línea y los transforme en la etiqueta <br /> (no sé si ya existe una función en PHP que lo haga); por ejemplo:

<?php
  $msg = $_POST['mensaje'];
  // $msg será el contenido del textarea:
  $temp = preg_replace( PHP_EOL, '<br />', $msg );
  echo $temp;
?>

Lo anterior reemplaza los saltos de línea (\n o \r\n, depende del sistema operativo) por etiquetas que insertan un salto de línea en HTML.

Espero que te sirva, saludos.
Hmm, no hay forma más sencilla de hacerlo? La verdad es que tengo muchos campos y esto me dificultaría el trabajo.

Saludos!
Hmmm, la solución es más complicada XD. La solución sería recorrer el array $_POST (en una función) y buscar y reemplazar en cada índice el contenido que quieres modificar; el problema es que el array no se puede recorrer con for( $i = 0; $i < count( $_POST ); $i++), puesto que $_POST no tiene índices numéricos, es un Objeto (en el contexto de programación orientada a objetos).

Saludos.
Buaaaaaaaaaaaaaa, mejor uso el otro código XD!
Entonces debería, suponiendo que tengo 3 textareas, con los nombres: 1,2,3.
Debería ser así?:

  $msg = $_POST['1'];
  // $msg será el contenido del textarea:
  $temp = preg_replace( PHP_EOL, '<br />', $msg );
  echo $temp;
  $msg = $_POST['2'];
  // $msg será el contenido del textarea:
  $temp = preg_replace( PHP_EOL, '<br />', $msg );
  echo $temp;
  $msg = $_POST['3'];
  // $msg será el contenido del textarea:
  $temp = preg_replace( PHP_EOL, '<br />', $msg );
  echo $temp;

De todas formas te agradecería que me explicaras cosas como la función preg_replace y valor PHP_EOL porque no entendí nada XD!
Ok. preg_replace() es una función que utiliza expresiones regulares para reemplazar todas las ocurrencias encontradas (especificadas por el primer parámetro) dentro del tercer parámetro (que, generalmente, es una cadena de caracteres o string) por lo que hay en el segundo parámetro. Vale decir, en el caso anterior, preg_replace() leería letra a letra el mensaje ($msg) y reemplazaría PHP_EOL (que ya explicaré) por el salto de línea HTML (<br />).

PHP_EOL es una constante (definida por el intérprete de PHP al momento de compilar el programa) que define el salto de línea que utiliza el sistema operativo. En concreto, en Windows, el salto de línea es \n\r (o al revés, siempre me confundo - Windows tenía que ser XD), mientras que en Linux y Unix es \n (sin \r). Estos caracteres se utilizan solo en la línea de comandos (consola, CMD, símbolo del sistema, etc.), pero supongo que es el caracter insertado en los saltos de línea en una base de datos. Si no funciona, entonces me equivoqué XD.

En resumen, preg_replace(), en tu caso, reemplazará todos los saltos de línea (\n o \n\r) por los saltos de línea HTML (<br />) dentro del mensaje ($msg).

Saludos.
skaparate, en vez de usar preg_replace() podría usarse str_replace() ? Cuál es mejor usar?

Saludos!
Según entiendo, los motores de expresiones regulares son más rápidas que una búsqueda común, por ende sería mejor preg_replace() (aunque el parámetro de reemplazo no sea una expresión regular como tal). Ambas funciones aceptan los mismos tipos de parámetros (strings o arrays de strings), así que preg_replace debería usarse con expresiones regulares.

preg_replace();
str_replace();
Genial, muchas gracias, ahora lo entiendo! Luego lo pruebo, estoy cansado ._.

Salu2!