2010-02-21 7 views
5

Tengo una aplicación PHP/Mysql que permite a los usuarios publicar texto desde un formulario. Cuando inserto texto de un área de texto HTML en mi tabla mysql, no se mantienen los retornos de carro/saltos de línea. El texto no está almacenado en el DB como "Hey SO, \ n Esta es una nueva línea". Se almacena con espacio en blanco en la columna (exactamente como se escribe), pero no hay forma de que lo muestre con nl2br() y guarde los descansos. Estoy escapar antes de insertar el texto así:¿Mysql no retiene saltos de línea de Jquery ajax post?

$foo_text = mysql_real_escape_string(ucfirst($_POST['foo_text'])); 

Pero incluso si quito todo y sólo tiene que utilizar el parámetro POST, todavía hace lo mismo. ¿Tendría esto algo que ver conmigo serializando y publicando este formulario a través de ajax (estoy usando JQUERY)? Encontré this on stackoverflow, pero realmente no veo una solución. Estoy posteando con:

$.ajax({ 
     type: "POST", 
     url: "insertFooBar.php", 
     data: $("#foo_form").serialize(), 
     success: function(msg) { 
      ETC... 
     } 
    }) 

¿Hay algo realmente obvio que me falta aquí? Estoy atascado ...

¡Gracias de antemano por cualquier ayuda!

+0

No creo que los saltos de línea pertenezcan a la base de datos. Esos son problemas de renderizado y el sistema operativo depende del arranque. – duffymo

+1

MySQL almacenará saltos de línea en un campo, están siendo eliminados por otra cosa si está seguro de que no están en la base de datos –

+0

Hola, duffymo, no estoy seguro de qué otra manera podría almacenar entradas como usuario previsto sin guardar los saltos de línea en la base de datos?David, gracias por la respuesta, piensa que tienes razón. Acabo de comprobar Firebug, y parece que esto va a ser específico de Jquery ... se eliminó el "\ n" s antes de que llegue a mi script de fondo. – Adamjstevenson

Respuesta

2

Gracias por las respuestas. Terminé eliminando serialize() y enviando cada parámetro manualmente como una cadena. Agregué $("#foo_bar").replace(/\n/g, '<br>')) a mi área de texto como una solución alternativa y ahora estoy obteniendo mis descansos. Ojalá no tuviera que hackear esto para que funcione, pero hace el trabajo bien.

1

Nunca tuve problemas para insertar datos de un Formulario HTML en la base de datos, ya sea el formulario enviado normalmente o el uso de AJAX.

¿Intentas enviar el formulario sin AJAX? Cual es el resultado? Quiero sugerirle que use jQuery form plugins para que no tenga que hacer la solicitud AJAX manualmente.

También quiero sugerirle que use AdoDB para guardar los datos en la base de datos. Esta biblioteca proporciona una gran abstracción de bases de datos cruzadas. No he encontrado ningún problema al insertar/actualizar los datos, todos los valores de escape se realizan automáticamente. Aquí está la manera de hacer la actualización ejemplo usando AdoDB:

$data['foo_text'] = ucfirst($_POST['foo_text']); 
$adodb->AutoExecute($tablename, $data, 'UPDATE', "id=$id"); 

espero que esto le ayudará a bibliotecas.

3

El problema es que la serialización debe codificar un salto de línea como% D0% DA, pero jQuery lo codifica como% 0A.

La única solución (sin gracia) que encontré fue para obtener la cadena de forma serializada, a continuación, modificarlo con una función de sustitución, tales como:

función keepLB (str) {

var reg = new RegExp ("(% 0A)", "g"); return str.replace (reg, "% 0D $ 1"); }

Una vez que se modifica la cadena serializada, la envío utilizando la función $ .post().

Espero que ayude!