Foros del Web » Programando para Internet » PHP »

Un form me corta los textos !!! Ayuda !!!

Estas en el tema de Un form me corta los textos !!! Ayuda !!! en el foro de PHP en Foros del Web. Tengo un form para ingresar datos a una db, este los pasa a otra page.php que primero los muestra yalli se puede confirmar para que ...
  #1 (permalink)  
Antiguo 21/04/2004, 15:10
 
Fecha de Ingreso: diciembre-2001
Ubicación: Mar del Plata
Mensajes: 201
Antigüedad: 16 años
Puntos: 0
Un form me corta los textos !!! Ayuda !!!

Tengo un form para ingresar datos a una db, este los pasa a otra page.php que primero los muestra yalli se puede confirmar para que los inserte en la db. Los textos escritos en los campos de la primera page pasan a la segunda de manera correcta, PERO cuando confirmo que esta los inserte en la db, los textos ingresados en las TEXTAREA al encontrar una frase que en el medio contiene el caracter DOBLE COMILLA (") solo INSERTAN las frases anteriores a esta, el resto del texto que le sigue a " NO LO INSERTA, es decir supongo que esta tomando este caracter como alguna instruccion para que CORTE el texto alli.
Por ejemplo en la frase:

Jorge tenia un perro, el "pulgoso" era malumorado.

Solo me inserta en la db Jorge tenia un perro, el el resto lo ignora, si este mismo texto lo ingreso desde phpmyadmin, no tengo problema alguno, se inserta entero. Alguien podria explicarme por que sucede esto ???

Desde ya muchas gracias !!!
__________________
:) Fernando Dichiera (:
[email protected]
  #2 (permalink)  
Antiguo 21/04/2004, 15:33
Avatar de Genetix  
Fecha de Ingreso: febrero-2002
Ubicación: Lima - Perú
Mensajes: 1.600
Antigüedad: 15 años, 10 meses
Puntos: 43
Hola!
usa la función addslashes()

en la pagina donde recives los datos, colocas antes de tu variable:
Código PHP:
echo addslashes($tuvariable
  #3 (permalink)  
Antiguo 21/04/2004, 15:41
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Y que sentencia SQL usas para insertar tu dato de tu textarea?

Código PHP:
$sql="INSERT INTO tabla (campo1) VALUES ('".$_POST['textarea']."')"
si usas comillas '$valor' en tu sentencia SQL no tendrías que tener esos problemas .. El addslashes() por defecto PHP ya las incluye (fijate que veras tus comillas como \") .. cuando las visualices tendras que aplicar stripslasheses() a tu variable ..)

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #4 (permalink)  
Antiguo 21/04/2004, 16:18
 
Fecha de Ingreso: diciembre-2001
Ubicación: Mar del Plata
Mensajes: 201
Antigüedad: 16 años
Puntos: 0
No me funciono ??!!

Prove la opcion que me dio Genetix de poner
Código PHP:
echo addslashes($comentario); 
pero el resultado es este:

Jorge tenia un perro, el \

Es decir me pone un slash antes de la doble comilla y el resto del texto lo sigue ignorando. En la page de confirmacion de insercion, pongo en un campo oculto
Código PHP:
echo addslashes($comentario); 
y tambien lo muestro para confirmar y alli si esta todo el texto completo:

Jorge tenia un perro, el \"pulgoso\" era malumorado.

Pero parece que el error entonces es al insertarlo ???

Para insertar uso:

Código PHP:
$insertSQL sprintf("INSERT INTO libros (titulo, tituloshort, autor, genero, comentario, miniaturas, tapas, video, audio, biografia) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s)",
                       
GetSQLValueString($_POST['titulo'], "text"),
                       
GetSQLValueString($_POST['tituloshort'], "text"),
                       
GetSQLValueString($_POST['autor'], "text"),
                       
GetSQLValueString($_POST['genero'], "text"),
                       
GetSQLValueString($_POST['comentario'], "text"),
                       
GetSQLValueString($_POST['miniaturas'], "text"),
                       
GetSQLValueString($_POST['tapas'], "text"),
                       
GetSQLValueString($_POST['videos'], "text"),
                       
GetSQLValueString($_POST['audio'], "text"),
                       
GetSQLValueString($_POST['biografia'], "text"));

  
mysql_select_db($database_test14$test14);
  
$Result1 mysql_query($insertSQL$test14) or die(mysql_error()); 
Si me pudieran ayudar, estaria muy agradecido !!!
__________________
:) Fernando Dichiera (:
[email protected]
  #5 (permalink)  
Antiguo 21/04/2004, 17:06
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
No he usado Dreamweaver y sus asistentes de código .. pero en principio le faltan las comillas a los VALUES de la sentencia SQL:

VALUES ('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s' )

Te recomiendo encarecidamente que aprendas PHP y Mysql sin usar asistentes .. así luego llegan problemas como este ..

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #6 (permalink)  
Antiguo 22/04/2004, 11:40
 
Fecha de Ingreso: diciembre-2001
Ubicación: Mar del Plata
Mensajes: 201
Antigüedad: 16 años
Puntos: 0
Aun no funciona !

Cluster, te cuento utilize tus concejos al pie de la letra pero nada, todavia sigo sin poder insertar el texto que tiene " (comillas) en el medio, el code usado es el siguiente:
Código PHP:
<?
if ($HTTP_POST_VARS["cmdEnviar"]=="Enviar")
{
require (
'Connections/cnn.php');

$cmdSQL "INSERT INTO libros (titulo, tituloshort, autor, genero, comentario, miniaturas, tapas, video, audio, biografia) ";
$cmdSQL .= "VALUES ('".$_POST['$ztitulo']."', '".$_POST['ztituloshort']."', '".$_POST['zautor']."', '".$_POST['zgenero']."', '".$_POST['zcomentario']."', '".$_POST['zminiaturas']."', '".$_POST['ztapas']."', '".$_POST['zvideos']."', '".$_POST['zaudio']."', '".$_POST['zbiografia']."')" ;

if (
mysql_query ($cmdSQL))
echo 
"<P> Consulta OK:<BR>$cmdSQL</P>";
else
echo 
"<P> Consulta ERROR</P>";
}
else
{
?>
<form name="form1" method="POST" action="insertar_ok.php">
  <input name="ztitulo" type="hidden" id="ztitulo" value="<? echo $HTTP_POST_VARS["titulo"]; ?>">
  <input name="ztituloshort" type="hidden" id="ztituloshort" value="<? echo $HTTP_POST_VARS["tituloshort"]; ?>">
  <input name="zautor" type="hidden" id="zautor" value="<? echo $HTTP_POST_VARS["autor"]; ?>">
  <input name="zgenero" type="hidden" id="zgenero" value="<? echo $HTTP_POST_VARS["genero"]; ?>">
  <input name="zcomentario" type="hidden" id="zcomentario" value="<? echo $HTTP_POST_VARS["comentario"]; ?>">
  <input name="zminiaturas" type="hidden" id="zminiaturas" value="<? echo $HTTP_POST_VARS["miniaturas"]; ?>">
  <input name="ztapas" type="hidden" id="ztapas" value="<? echo $HTTP_POST_VARS["tapas"]; ?>">
  <input name="zvideos" type="hidden" id="zvideos" value="<? echo $HTTP_POST_VARS["videos"]; ?>">
  <input name="zaudio" type="hidden" id="zaudio" value="<? echo $HTTP_POST_VARS["audios"]; ?>">
  <input name="zbiografia" type="hidden" id="zbiografia" value="<? echo $HTTP_POST_VARS["biografia"]; ?>">
  <input type="submit" name="cmdEnviar" value="Enviar">
</form>
<?
}
?>
Si vemos el contenido del campo oculto zcomentario por ejemplo veo como value el texto que contiene "comillas" en el medio, pero este no llega a insertarce en la db, como veras utilize comillas simples para la sentencia de insert y haci y todo, nada solo ingresa en la db el texto hasta que encuentra la primer comilla doble, el resto sigue ignorandolo. Tienes idea que solucion se podria implementar para este caso ???

Desde ya muchas gracias por todo lo que hacen para los novatos en PHP. Un saludo
__________________
:) Fernando Dichiera (:
[email protected]
  #7 (permalink)  
Antiguo 22/04/2004, 12:04
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Hola,

Es problema HTML. En HTML no puedes tener:

value="algo " algo">

Solo te toma hasta la primera comilla.

El addslashes() no funciona en este caso, ya que las escapa para PHP, pero a HTML le da lo mismo " que \".

Asi que la solucion es o pasarlas a entidades HTML (htmlentities()) o codificarlas para URL (urlencode()) al hacer el echo en el value del hidden. No se cual sera mejor, quizas el urlencode(). Es que ahora no recuerdo cual es la codificacion que se usa para las peticiones POST.

Haz la prueba y comentas.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #8 (permalink)  
Antiguo 22/04/2004, 12:14
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Olvida el urlencode(). He hecho un par de pruebas y funciona con el htmlentities():
Código PHP:
<input name="zcomentario" type="hidden" id="zcomentario" value="<? echo htmlentities($HTTP_POST_VARS["comentario"]); ?>">
Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #9 (permalink)  
Antiguo 22/04/2004, 12:19
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
si haces un

echo $cmdSQL ;

antes de tu mysql_query() .. que ves? las comillas escapadas? .. Te lo comento por qué PHP por defecto añade el escape a las comillas y otros caracteres según el estado de magic_quotes_gpc (php.ini).

Si dices que en tu HTML generado tienes comillas .. tendras que por lo menos ahí mismo hacer un addslashes()

Código PHP:
<input name="zbiografia" type="hidden" id="zbiografia" value="<? echo addslashes($HTTP_POST_VARS["biografia"]); ?>">
para que no suceda esto.

Código PHP:
<input name="zbiografia" type="hidden" id="zbiografia" value="esto tiene comillas "comillas" y mas cosas"
Hay que conseguir que las comillas dombles (para ese caso) se escapen (con la función mencionada PHP lo hace) y quede:

Código PHP:
<input name="zbiografia" type="hidden" id="zbiografia" value="esto tiene comillas \"comillas\" y mas cosas"
A su vez en tu BD guadarías tus textos con escape de comillas y caracteres vários. Pero al volver (en tu caso) aplicar un addslashses() se duplicaran los \\" ..

Por lo demás .. NO mezcles $_POST con $HTTP_POST_VARS .. o usa un método o el otro pero no ambos a la vez. (recomendable $_POST como arrays superglobales).

Mira en tu phpinfo() el estado de la directiva magic_quote_gpc (por defecto suele ser "ON").

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #10 (permalink)  
Antiguo 22/04/2004, 15:59
 
Fecha de Ingreso: diciembre-2001
Ubicación: Mar del Plata
Mensajes: 201
Antigüedad: 16 años
Puntos: 0
De acuerdo La Solucion !!!

Bueno finalmente con vuestra ayuda pude encontrar una solucion:

Utilize el ultimo concepto de Cluster para darme cuenta y aprender a cerca de magic_quotes_gpc en php.ini la cual estaba en off, al cambiar esto pude usar esta opcion con los concejo que me distes y funciono, tambien prove la idea que amablemente me suguirio josemi, la cual para el proposito que necesitaba funciona y cumple su cometido.

Fueron todos muy amables y didacticos. Haci da gusto aprender un tema nuevo cuando se tiene ayuda de este tipo, espero mas adelante empezar a ayudar a los nuevos "novatos". Muchas Gracias

PD: Solo una cosa mas Cluster, me pasa algo parecido con una funcion que tambien vi en este foro, pero ahora no encuentro en donde la misma cortaba una frase luego de determinados caracteres pero respetando la ultima palabra y no cortando esta. Lo que sucede es que al mostrar la frase en esta no aparece (desaparecen) algunos caracteres (ú, ? y otros) tienes idea por que ?
__________________
:) Fernando Dichiera (:
[email protected]
  #11 (permalink)  
Antiguo 23/04/2004, 07:32
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
PD: Solo una cosa mas Cluster, me pasa algo parecido con una funcion que tambien vi en este foro, pero ahora no encuentro en donde la misma cortaba una frase luego de determinados caracteres pero respetando la ultima palabra y no cortando esta. Lo que sucede es que al mostrar la frase en esta no aparece (desaparecen) algunos caracteres (ú, ? y otros) tienes idea por que ?
Sería bueno que iniciaras un nuevo tema con el código que mencionas y el problema puntual detallado.

Pero, .. en principio casi todo código que se suele ver por ahí "asume" que se usa magic_quote_gpc a ON .. con lo cual PHP añade los \ (slashes) a caracteres tipo " y algunos más. Y por ende esas funciones suelen aplicar algún tipo de stripslashes() o similar. Por ahí podría venir el problema o del uso o no uso de htmlentities(), urlencode() o similares funciones.

Insisto .. en que inicies un nuevo tema (indica en que valor dejastes magic_quote_gpc si es que esa función trabajase con alguna de esas funciones )

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:03.