Estoy enviando un formulario con un campo de notas a una base de datos Oracle y luego mostrando las notas. Se pueden agregar nuevas notas, y se agregarán a la nota anterior.

El problema que tengo es con la nueva línea que estoy insertando al comienzo de cada actualización de notas. Estoy enviando actualizaciones de notas a la base de datos con un javascript de esta manera: oldNote + "\n" + date + " " + username + ": " + newNote;.

Esta es la parte php:

echo "<input class='button' type='button' id='Save' name='saveInteraction' onclick=\"saveInteractionInfo('$oldNote', '$date', '$username', '$interactionId', '$seqNum');\" value='Update'/>";

Esta es toda la función de JavaScript:

function saveInteractionInfo(oldNote, date, username, interactionId, seqNum) {
    var formData = {};
    formData['interactionId'] = interactionId;
    formData['seqNum'] = seqNum;
    formData['notes'] = oldNote + "\n" + date + " " + username + ": " + document.all.notes.value;
    trxId = readCookie("transactionId");
    if(trxId)
        formData["transactionId"] = trxId;
    var respFunc = function(par1,par2,par3,par4) { postUpdateInteractionNotesResponseHandler(par1,par2,par3,par4); };
    var errorFunc = function(reqId) { return showErrorCaseHandler(reqId); };
    ajaxPostRequest("Interactions.php",formData,"Update Interaction Notes.","subExtra",respFunc,errorFunc);
}

La actualización de las notas funciona como debería, pero cuando intento actualizarla por segunda vez aparece un error en Firebug: unterminated string literal: saveInteractionInfo('Test, donde saveInteractionInfo es la función a la que le estoy pasando las notas y 'Test' es el valor del formulario . Entonces, el error ocurre cuando la nueva línea se pasa a la función.

¿Alguna sugerencia de cómo podría hacer que esto funcione?

ACTUALIZACIÓN Entonces, el problema es que $ oldNote tiene saltos de línea (\ n), lo que impide que pase los datos a la función de JavaScript. La etiqueta ahora:

<input class='button' type='button' id='Save' name='saveInteraction' onclick="saveInteractionInfo('fdsfsfsf
dfdfdf
gdfgdg', '13/09/2011 16:11:13', 'blaha01', '7038245', '2');" value='Update'/>

La etiqueta como debería ser:

<input class='button' type='button' id='Save' name='saveInteraction' onclick="saveInteractionInfo('fdsfsfsfdfdfdfgdfgdg', '13/09/2011 16:11:13', 'blaha01', '7038245', '2');" value='Update'/>

¿Cualquier otra sugerencia?

0
Samuel Lindblom 13 sep. 2011 a las 14:32

3 respuestas

La mejor respuesta

La solución fue similar a la publicada por Rob W :

$oldNote = str_replace("\r\n", "\\n", $oldNote);
0
Samuel Lindblom 14 sep. 2011 a las 06:44

Tal vez una o más de sus variables PHP ($ oldNote, por ejemplo) tengan una sola cita. Cuando escribes el javascript obtienes:

onclick=\"saveInteractionInfo('Test''

Lo que haría que la JS sea inválida.

Le sugerimos que cambie el onclick para tomar la comilla simple y envolver los php vars en \ ":

onclick='saveInteractionInfo(\"$oldNote\", ...
0
James 13 sep. 2011 a las 13:18

Reemplace las líneas nuevas por \\n usando un RE, en PHP:

$oldNote = preg_replace('/\n/g', "\\n", $oldNote);

¿Cuál es la longitud mínima máxima de su nombre de archivo? (por ejemplo, DOS admite solo 8-11 caracteres; la mayoría de los sistemas operativos no admiten> 256 caracteres)…

1
Rob W 13 sep. 2011 a las 14:22