Foros del Web » Programando para Internet » PHP »

Urgente, problema al querer grabar esta palabra

Estas en el tema de Urgente, problema al querer grabar esta palabra en el foro de PHP en Foros del Web. DISCULPEN, estoy con un problema, necesito grabar palabras como estas en la base de Datos O'LEARY y me sale este error Warning: odbc_exec() [function.odbc-exec]: SQL ...
  #1 (permalink)  
Antiguo 04/08/2009, 13:42
 
Fecha de Ingreso: junio-2009
Mensajes: 89
Antigüedad: 14 años, 10 meses
Puntos: 0
Exclamación Urgente, problema al querer grabar esta palabra

DISCULPEN, estoy con un problema, necesito grabar palabras como estas en la base de Datos

O'LEARY

y me sale este error

Warning: odbc_exec() [function.odbc-exec]: SQL error: [IBM][Controlador ODBC de iSeries Access][DB2 UDB]SQL0104 - Símbolo LEARY no válido. Símbolos válidos: ) ,., SQL state 37000 in SQLExecDirect in

Existe alguna solucion?
  #2 (permalink)  
Antiguo 04/08/2009, 13:49
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Urgente, problema al querer grabar esta palabra

Necesitas usar htmlentities

Código PHP:
Ver original
  1. echo htmlentities($str, ENT_QUOTES);
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 04/08/2009, 13:54
 
Fecha de Ingreso: julio-2009
Mensajes: 118
Antigüedad: 14 años, 9 meses
Puntos: 2
Respuesta: Urgente, problema al querer grabar esta palabra

Cita:
Iniciado por abimaelrc Ver Mensaje
Necesitas usar htmlentities

Código PHP:
Ver original
  1. echo htmlentities($str, ENT_QUOTES);

en este caso sería mas correcto addslashes ya que no le interesa filtrar el html
  #4 (permalink)  
Antiguo 04/08/2009, 13:55
 
Fecha de Ingreso: junio-2009
Mensajes: 89
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: Urgente, problema al querer grabar esta palabra

me sale el mismo error..
  #5 (permalink)  
Antiguo 04/08/2009, 13:57
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Urgente, problema al querer grabar esta palabra

O eso mismo , es costumbre de usar htmlentities(), pero aun asi yo prefiero usarlo para evitar que me hackeen la pagina almacenando informacion con codigos que afectaran mi pagina web (Ataques XSS).

Escribe entonces el codigo para poder indicarte y como lo hiciste
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #6 (permalink)  
Antiguo 04/08/2009, 14:00
 
Fecha de Ingreso: junio-2009
Mensajes: 89
Antigüedad: 14 años, 10 meses
Puntos: 0
$barriofirmante = trim($_POST['barriofirmante']);
$barriofirmante = strtoupper($barriofirmante);
$barriofirmante = htmlentities($barriofirmante, ENT_QUOTES);

este es el campo que esta creando el error

se para que sirve htmlentities, pero no estoy usando porq es totalmente local el sistema

Última edición por GatorV; 04/08/2009 a las 21:04
  #7 (permalink)  
Antiguo 04/08/2009, 14:02
 
Fecha de Ingreso: julio-2009
Mensajes: 118
Antigüedad: 14 años, 9 meses
Puntos: 2
Respuesta: Urgente, problema al querer grabar esta palabra

pon esto:

$barriofirmante = addslashes($barriofirmante);
  #8 (permalink)  
Antiguo 04/08/2009, 14:05
 
Fecha de Ingreso: junio-2009
Mensajes: 89
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: Urgente, problema al querer grabar esta palabra

continua dando el mismo error al cargar O'LEARY
  #9 (permalink)  
Antiguo 04/08/2009, 14:12
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Urgente, problema al querer grabar esta palabra

Escribe todo el codigo porque el problema no lo veo en esos 3 codigos que escribiste.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #10 (permalink)  
Antiguo 04/08/2009, 14:16
 
Fecha de Ingreso: junio-2009
Mensajes: 89
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: Urgente, problema al querer grabar esta palabra

$barriofirmante = trim($_POST['barriofirmante']);
$barriofirmante = strtoupper($barriofirmante);
$barriofirmante = htmlentities($barriofirmante, ENT_QUOTES);
$barriofirmante = addslashes($barriofirmante);

$tel1 = $_POST['tel1'];
if ($tel1 == null)
{
$tel1=0;
$error=1;
}
$tel2 = $_POST['tel2'];
if ($tel2 == null)
{
$tel2=0;
}
$fax = $_POST['fax'];
if ($fax == null)
{
$fax=0;
}
$mail= $_POST['mail'];
$cel1= $_POST['cel1'];
$cel2= $_POST['cel2'];
$localidad= $_POST['ciudades'];
if ($localidad == null)
{
$localidad=0;
}
// asignar region automaticamente
$region = substr($localidad, 0, 2);
if ($region == null)
{
$region=0;
}
$actividad= $_POST['acti'];
if ($actividad == null)
{
$actividad=0;
}
$ano = $_POST['ano'];
$mes = $_POST['mes'];
$dia = $_POST['dia'];
$fechanac = "$dia".""."$mes".""."$ano";
if ($fechanac == null)
{
$fechanac =0;
}
if($fechanac==19000000){
$error=1;
}
$fechanac2 = "$dia"."/"."$mes"."/"."$ano";
$cartaley= $_POST['cartaley'];
if ($cartaley == null)
{
$cartaley=0;
$error=1;
}
$sexo = $_POST['sexo'];
if ($sexo == null)
{
$sexo=0;
}
$pais = $_POST['paises'];
if ($pais == null)
{
$pais=0;
}
$estado = $_POST['estados'];
if ($estado == null)
{
$estado=0;
}
$vinculo= $_POST['vinculos'];
if ($vinculo == null)
{
$vinculo=0;
$error=1;
}
$cargo= $_POST['cargo'];
if ($cargo == null)
{
$cargo=0;
}
$profesion = $_POST['profesion'];
$lugartrabajo = $_POST['lugartrabajo'];
$lugartrabajo = strtoupper($lugartrabajo);
$dirlaboral = $_POST['dirlaboral'];
$dirlaboral = strtoupper($dirlaboral);
$telaboral = $_POST['telaboral'];
$faxlaboral = $_POST['faxlaboral'];
$director = $_POST['director'];
if ($director == null)
{
$director=0;
}
$accionista = $_POST['accionista'];
if ($accionista == null)
{
$accionista=0;
}
$casilla = $_POST['casilla'];
$comentario = $_POST['txtaccionista'];
if ($comentario == null)
{
$comentario= "";
}
$fecha = date("Ymd");
$hora = date("H:i:s");


include('conectar_AS.php');
$insertar = "insert into RIESGO.FRIEPC02 (PRNUSE, PTIPDO, PIDEN1, PPRIAP, PSEGAP, PCASAP, PPRINO, PSEGNO, PSEXO, PNACIO, PFNACI, PECIVI, PDOMIC, PTELEF, PFAX, PREGIO, PCCORR, PLOCAL, PACTIV, PRPROF, PRLUGT, PRCARG, PRDIRL, PRTELA, PRFAXL, PRDIRE, PRACCI, PRCARL, PRBARR, PRTELE, PRCEL1, PRCEL2, PRCORE, RTIPRE, PFNAC1, PRUSUA, PRHORA, PRFECH) VALUES ('$nsecu', '$tipodocu', '$nrodocumento', '$primerape', '$segape', '$apecasa', '$prinom', '$segno', '$sexo', '$pais', '$fechanac', '$estado', '$dirfirman', '$tel1', '$fax', '$region', '$casilla', '$localidad', '$actividad', '$profesion', '$lugartrabajo', '$cargo', '$dirlaboral', '$telaboral', '$faxlaboral', '$director', '$accionista', '$cartaley', '$barriofirmante', '$tel2', '$cel1', '$cel2', '$mail', '$vinculo', '$fechanac2', '$user', '$hora', '$fecha')";

$puta = odbc_exec($cn, $insertar) or die (odbc_error());

esta es la sentencia completa, pero el error es solo en barriofirmane, si escribo asi: OLEARY pasa sin problemas
  #11 (permalink)  
Antiguo 04/08/2009, 14:21
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Urgente, problema al querer grabar esta palabra

Debes hacerlo una de estas forma

Código PHP:
Ver original
  1. $barriofirmante = trim($_POST['barriofirmante']);
  2. $barriofirmante = strtoupper($barriofirmante); 
  3. $barriofirmante = addslashes($barriofirmante);

o

Código php:
Ver original
  1. $barriofirmante = trim($_POST['barriofirmante']);
  2. $barriofirmante = strtoupper($barriofirmante); 
  3. $barriofirmante = htmlentities($barriofirmante, ENT_QUOTES);
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #12 (permalink)  
Antiguo 04/08/2009, 14:25
 
Fecha de Ingreso: junio-2009
Mensajes: 89
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: Urgente, problema al querer grabar esta palabra

no hay caso!!
  #13 (permalink)  
Antiguo 04/08/2009, 14:28
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Urgente, problema al querer grabar esta palabra

dale echo $barriofirmante a ver como te imprime el valor de la variable

Código PHP:
Ver original
  1. $barriofirmante = trim($_POST['barriofirmante']);
  2. $barriofirmante = strtoupper($barriofirmante);  
  3. $barriofirmante = addslashes($barriofirmante);
  4. echo $barriofirmante;
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #14 (permalink)  
Antiguo 04/08/2009, 14:34
 
Fecha de Ingreso: junio-2009
Mensajes: 89
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: Urgente, problema al querer grabar esta palabra

O\\\'LEARY == esto me sale
  #15 (permalink)  
Antiguo 04/08/2009, 14:40
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Urgente, problema al querer grabar esta palabra

Estas escribiendo tambien \ en la base de datos. Puede ser por varias cosas pero verifica que en tu php.ini no tengas activado magic_quotes_gpc. Si lo esta cambia el valor a Off. Si esta off de casualidad tienes algun codigo de addslashes() antes que este verificando y modificando de nuevo esa variable?
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #16 (permalink)  
Antiguo 04/08/2009, 14:43
 
Fecha de Ingreso: junio-2009
Mensajes: 89
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: Urgente, problema al querer grabar esta palabra

el magic_quotes_gpc lo tenia prendido, lo apague y sigue dando el mismo problema
  #17 (permalink)  
Antiguo 04/08/2009, 14:47
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Urgente, problema al querer grabar esta palabra

Perdona que pregunte pero, ¿le diste un restart a apache? Si es asi vuelve a hacer de nuevo lo que te indique del echo y escribe lo que te sale
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #18 (permalink)  
Antiguo 04/08/2009, 14:48
 
Fecha de Ingreso: junio-2009
Mensajes: 89
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: Urgente, problema al querer grabar esta palabra

Solucionado.
La sentencia cierra cuando encuentra solo un ', entonces le carguÉ, o''leary, y grabo tranquilamente, o'leary en la db,
gracias de todas formas
  #19 (permalink)  
Antiguo 04/08/2009, 14:51
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Urgente, problema al querer grabar esta palabra

Debes verificar bien tu codigo porque no vaya a ser que en un futuro te ocacione peores problemas dejarlo asi
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #20 (permalink)  
Antiguo 04/08/2009, 15:08
 
Fecha de Ingreso: junio-2009
Mensajes: 89
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: Urgente, problema al querer grabar esta palabra

ahora como hago para saber identificar si existe un " O'LEARY " y para reemplazarlo por "O''LEARY"
  #21 (permalink)  
Antiguo 04/08/2009, 15:38
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Urgente, problema al querer grabar esta palabra

str_replace("'", "''", $cadena);
__________________
- León, Guanajuato
- GV-Foto
  #22 (permalink)  
Antiguo 04/08/2009, 19:36
 
Fecha de Ingreso: septiembre-2008
Mensajes: 350
Antigüedad: 15 años, 7 meses
Puntos: 31
Respuesta: Urgente, problema al querer grabar esta palabra

Hola, si solo quieres que tu db acepte solo esta palabra O'LEARY estaria bien usar reemplazo ("'", '"');
pero si vas a permitir que se inserte txt especialmente en ingles (Don't Walk, Moorcook's, "He said, 'Hurry up.'" etc.) seria mejor que usaras otra opción
como esta etc

Ejemplo:
Código PHP:
$htmltag "O'LEARY";
$htmltag str_replace ("'""[K]"$htmltag);
echo 
$htmltag
ese se usaría para introducir

y este se usaría para devolver la comillas una ves que sale de la db

Ejemplo:
Código PHP:
$htmltag "O[K]LEARY";
$htmltag str_replace ("[K]""'"$htmltag);
echo 
$htmltag
o Simplemente esto
Código PHP:
mysql_real_escape_string($cadena), 

mysql_real_escape_string()
__________________
╬-----╬
║☺₧☻║
╬-----╬
  #23 (permalink)  
Antiguo 05/08/2009, 00:34
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Urgente, problema al querer grabar esta palabra

thezzin, yo tambien iba a sugerir mysql_real_escape_string(), pero vi que no se trata de MySQL, sino de SQL que para escapar un apostrofe ' requiere que se codifique doble '' (Ojo, son dos comillas sencillas y no una doble)
__________________
- León, Guanajuato
- GV-Foto
  #24 (permalink)  
Antiguo 05/08/2009, 06:20
 
Fecha de Ingreso: junio-2009
Mensajes: 89
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: Urgente, problema al querer grabar esta palabra

Gracias a todos, quedo solucionado..
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 18:38.