2010-02-21 4 views
5

Ho un'app PHP/Mysql che consente agli utenti di inviare il testo da un modulo. Quando inserisco il testo da una textarea HTML nella mia tabella mysql, non mantiene i ritorni a capo/interruzioni di riga. Il testo non è memorizzato nel DB come "Hey SO, \ n Questa è una nuova riga". Viene memorizzato con uno spazio bianco nella colonna (esattamente come è stato digitato), ma non è possibile per me produrlo con nl2br() e mantenere le interruzioni. Sto fuggire prima di inserire il testo in questo modo:Mysql non mantiene interruzioni di riga dal post di Jquery ajax?

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

Ma anche se tolgo tutto e basta usare il parametro POST, lo fa ancora la stessa cosa. Questo avrebbe qualcosa a che fare con la serializzazione e la pubblicazione di questo modulo tramite ajax (sto usando JQUERY)? Ho trovato this on stackoverflow, ma non vedo davvero una soluzione. Sto postando con:

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

C'è qualcosa di veramente ovvio che mi manca qui? Sono bloccato ...

Grazie in anticipo per qualsiasi aiuto!

+0

Non penso che le interruzioni di riga appartengano al database. Quelli sono un problema di rendering e il sistema operativo dipende dal boot. – duffymo

+1

MySQL memorizzerà le interruzioni di riga in un campo, saranno rimosse da qualcos'altro se sei sicuro che non sono nel database –

+0

Hey duffymo, non sono sicuro di come altro potrei essere in grado di memorizzare input come utente inteso senza salvare le interruzioni di riga nel DB?David, grazie per la risposta, pensi che tu abbia ragione. Ho appena controllato Firebug, e sembra che questo sarà Jquery specifico ... è stato rimosso il \ n "s prima che arrivasse al mio script di back-end. – Adamjstevenson

risposta

2

Grazie per le risposte. Ho finito con la rimozione di serialize() e l'invio manuale di ogni parametro come stringa. Ho aggiunto $("#foo_bar").replace(/\n/g, '<br>')) alla mia textarea come soluzione e ora sto ricevendo le mie pause. Vorrei non aver dovuto hackerare questo per farlo funzionare, ma ha fatto il lavoro.

1

Non ho mai avuto problemi nell'inserire dati da un modulo HTML nel database, sia nel modulo inviato normalmente che utilizzando AJAX.

Hai provato a inviare il modulo senza AJAX? Qual'è il risultato? Voglio suggerirti di usare jQuery form plugins in modo da non dover fare manualmente la richiesta AJAX.

Vorrei anche suggerire di utilizzare AdoDB per salvare i dati nel database. Questa libreria fornisce una grande astrazione cross-database. Non ho riscontrato alcun problema durante l'inserimento/aggiornamento dei dati, l'escape di tutti i valori viene eseguito automaticamente. Ecco l'esempio modo di fare aggiornamento utilizzando AdoDB:

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

Spero che questo le librerie vi aiuterà.

3

Il problema è che la serializzazione deve codificare un'interruzione di riga come% D0% DA, ma jQuery lo codifica come% 0A.

L'unica soluzione (graceless) ho trovato è stato quello di ottenere la stringa modulo serializzato, poi modificarlo con una funzione di sostituzione come:

funzione keepLB (str) {

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

Una volta modificata la stringa serializzata, la invio utilizzando la funzione $ .post().

Spero che possa essere d'aiuto!