Pregunta de Informix

Estoy trabajando con Informix y tengo en el formulario textos multilíneas, si dígito una sola linea la guarda bien; pero si dígito más de 256 caracteres o Enter no me guarda.
¿Por qué pasa esto?
Agradezco la ayuda y sugerencias que me puedas brindar.

1 Respuesta

Respuesta
1
No estoy muy ducho en informix, pero, si no tienes habilitadas magick quotes (que es standard en las ultimas versiones de php), deberías hacer:
$campo=addslashes($campo);
Para que "escape" los \n.
Suerte.
Saludos.
No me sale, sigue saliendo error; ¿Sabes alguna otra forma?
Hace por favor una prueba:
Imprimí por pantalla la instrucción SQL con la que estas haciendo el insert/update, y pásamela TAL CUAL...
¿No habra algun otro caracter especial?.
Otra recomendación, hace un
print_r($_POST) o print_r($_GET) para ver que estas recibiendo antes de hacer el insert, y lo vemos.
Seguramente es algo que se nos esta "escapando".
Saludos.
El Sql es:
Insert into cdi_correspexterna(CeConsecutivo,CeCodigoCo,CeFechaEmision,cehoraemision, CeNumeroRef,CeReferencia,CeDeptoDest,CeCiudadDest,CeEntidadDest,CeFuncionarioDest, CeCopiasFuncDest,CeAnexos,CeCodigoTd,CeObservaciones,CeEstado,CeAsunto,CeSaludo, CeCuerpo,CeDespedida,CeCedulaFunFirma,CeEstadoCDI,CeUsuario) values(3,'AA-06','09/23/2005','8:23',3, '',54,'003',860061059.0,'SDADFADF','',1,1,'','D','NOTAS DEL DIRECTOR','CORDIAL SALUDO','Me permito pedir las notas de X persona. El motivo por la cual es llevar control. Espero que se me entrgue en la brevedad','ATENTAMENTE',7778,'T','admin')
print_r($_POST):Array ( [txtConsecutivo] => [txtFechaEnvio] => [txtNumero] => 3 [txtFechaEmision] => [cbMunicipio] => 54003 [codigo] => [txtReferencia] => [txtEntidad] => [cbEntidad] => 860061059.0 [txtFuncDestino] => SDADFADF [txtCopiasFunc] => [txtAnexos] => 1 [cbTipo] => 1 [cbEstado] => D [txtObserva] => [cbFuncAut] => 7778 [txtAsunto] => NOTAS DEL DIRECTOR [txtSaludo] => CORDIAL SALUDO [txtDespedida] => ATENTAMENTE [txtCuerpo] => Me permito pedir las notas de X persona. El motivo por la cual es llevar control. Espero que se me entrgue en la brevedad... [Accion] => Guardar )
print_r($_GET):Array ( )
Estos son los datos que arrojan en pantalla.
Bien, este insert debe haber funcionado, o por lo menos no veo error.
¿Te responde el informix con algún error?.
lo que te decia del addslashes era hacer antes del insert un $_POST['txtCuerpo']=addslashes($_POST['txtCuerpo']);
Sino, no veo razón por la cual no se ingrese...
Por ultimo, creo que ya lo debes haber probado.. el campo CeDespedida.. ¿admite más de 256 caracteres?.
No se me ocurre mucho más.
Saludos.
Hice el addslashes y imprimí el resultado y sale así:
ddafdaljdahjldfaf dfakhdklfakfd dfahkdfla dfakjñdlfa dafjdaflk adfjdfañ adfdfa
Cuando mando la consulta a la consola de informix me sale el siguiente error:
282: Found a quote for which there is no matching quote.
Y en la ayuda detallada me sale lo siguiente:
-282 Found a quote for which there is no matching quote.
Inspect the current statement, examining the punctuation of all quoted
strings. To include the quote character in a literal string, use single
apostrophes as string delimiters, as in the following example:
SELECT '"', fname,'"', "''", lname, "''" FROM customer
¿Qué otra cosa puede ser?
El mensaje es bastante claro...
Cuando vos haces addslashes, el php "escapa" las comillas utilizando \.
Entonces, proba cambiar en el insert el ' por " (Es decir, cambia las comillas simples por dobles), porque normalmente se entiende que los "escapes" se activan con comillas dobles, y con simples son literales.
Entonces...
No sería válido poner 'joe's car', ni 'joe\'s car'
Sería válido "joe's car" o "joe\'s car".
¿Me explico?... Entonces, siguiendo con esa teoría (es teoría, no estoy 100%seguro, pero es lo que dice tu error), no sería válido poner:
'Atentamente.\nJuan Perez'.
Sería válido:
"Atentamente.\nJuan Perez"
Entonces, deberias cambiar el insert, y en vez de utilizar simples, utiliza dobles:
insert into xxx VALUES ("jj","","jjj","")
Saludos.
Hice la prueba y tampoco.
Por lo visto no es eso; ¿Qué otra cosa puede ser?
Sigue saliendo el mismo error descrito anteriormente...
Así hice el select, de pronto este mal.
$Cuerpo = addslashes($_REQUEST['txtCuerpo']);
$Sql = 'Insert into cdi_correspexterna(CeConsecutivo,CeCodigoCo,CeFechaEmision,cehoraemision,
CeNumeroRef,CeReferencia,CeDeptoDest,CeCiudadDest,CeEntidadDest,CeFuncionarioDest,
CeCopiasFuncDest,CeAnexos,CeCodigoTd,CeObservaciones,CeEstado,CeAsunto,CeSaludo,
CeCuerpo,CeDespedida,CeCedulaFunFirma,CeEstadoCDI,CeUsuario) values('.$consec.',"'.$ProcAr.'","'.
$FechaActual.'","'.
date("G:i").'",'.$VL_ValueRef.'"'.$_REQUEST['txtReferencia'].'",'.$depto.',"'.$mun.'",'.$_REQUEST['cbEntidad'].
',"'.$_REQUEST['txtFuncDestino'].'","'.$_REQUEST['txtCopiasFunc'].'",'.$_REQUEST['txtAnexos'].
','.$_REQUEST['cbTipo'].',"'.$_REQUEST['txtObserva'].'","'.$_REQUEST['cbEstado'].'","'.
$_REQUEST['txtAsunto'].'","'.$_REQUEST['txtSaludo'].'","'.$Cuerpo.'","'.
$_REQUEST['txtDespedida'].'",'.$_REQUEST['cbFuncAut'].',"T","'.$VL_Usuario.'")';
Ya esta.. fíjate en esta página:
http://bugs.php.net/bug.php?id=19061&edit=1
Entonces... como te aconseja, deberías crear un char con ifx_create_char, dado que tu query es muy larga.
Sacado del manual, pruébalo:
Deberías hacer:
$datos=array($consec,$ProcAr,$FechaActual,date("G:i"),$VL_ValueRef .. etc etc
y luego
$Sql="insert into cdi_correspexterna(CeConsecutivo.....) VALUES (?,?,?,?,?....)"
luego
$res=ifx_prepare($Sql,$db,$datos);
ifx_do($res);

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas