Foros del Web » Programando para Internet » PHP »

Porque falla un UPDATE ?????

Estas en el tema de Porque falla un UPDATE ????? en el foro de PHP en Foros del Web. Me falla el Update y no se porque.... el codigo fuente es: if (array_key_exists('_Form_Guardar', $_POST)) { $busq = array("'",'"'); $reemp = array("/'",'/"'); $cDescrp = str_replace ...
  #1 (permalink)  
Antiguo 12/05/2006, 12:10
 
Fecha de Ingreso: mayo-2006
Mensajes: 59
Antigüedad: 11 años, 6 meses
Puntos: 0
Porque falla un UPDATE ?????

Me falla el Update y no se porque....
el codigo fuente es:
if (array_key_exists('_Form_Guardar', $_POST)) {
$busq = array("'",'"');
$reemp = array("/'",'/"');
$cDescrp = str_replace ($busq,$reemp,$_POST['cDescripcio']);
$cTextoA = str_replace ($busq,$reemp,$_POST['cTexto1']);
$cTextoB = str_replace ($busq,$reemp,$_POST['cTexto2']);
$strSQL = "UPDATE SORTIDES SET SRDESCRIPCIO='$cDescrp',SRALTACUM='".$_POST['nAltura']."'";
$strSQL = $strSQL . ",SRDISTANCIA='".$_POST['nDistancia']."',SRALTMAX='".$_POST['nAltMax']."'";
$strSQL = $strSQL . ",SRALTMIN='".$_POST['nAltMin']."',SRPENDMAX='".$_POST['nPendiente']."'";
$strSQL = $strSQL . ",SRTEMPS='".$_POST['cTemps']."',SREXPLC='$cTextoA',SREXPLC2='$cTextoB' ";
$strSQL = $strSQL . " WHERE SRSORTIDA = '" . $_POST[cIdSortida] . "'";
mysql_query($strSQL, $mysql_link);
echo "<p>".$strSQL."</p>";



Y un ejemplo del resultado en texto:
UPDATE SORTIDES SET SRDESCRIPCIO='Titulo',SRALTACUM='772',SRDISTANCIA= '41',SRALTMAX='',SRALTMIN='267',SRPENDMAX='17',SRT EMPS='2.24',SREXPLC='Expicacion larga',SREXPLC2='' WHERE SRSORTIDA = '060225AA'
  #2 (permalink)  
Antiguo 12/05/2006, 12:16
 
Fecha de Ingreso: abril-2006
Mensajes: 268
Antigüedad: 11 años, 7 meses
Puntos: 2
Pero, ¿te da algun mensaje de error?. Podrias probar hacer la consulta de esta forma:

Código PHP:
<?
mysql_query
($strSQL$mysql_link) or die(mysql_error());
?>
para que te muestre el mensaje de error (si es que hay).

Saludos.
  #3 (permalink)  
Antiguo 12/05/2006, 12:18
 
Fecha de Ingreso: mayo-2006
Mensajes: 59
Antigüedad: 11 años, 6 meses
Puntos: 0
Impresionante la velocidad de respuesta.

Pruebo ya.

Gracias.
  #4 (permalink)  
Antiguo 12/05/2006, 12:24
 
Fecha de Ingreso: mayo-2006
Mensajes: 59
Antigüedad: 11 años, 6 meses
Puntos: 0
El valor real de SREXPLC='Expicacion larga'

es ......

-02-06 can Roca, Bosc del Maringallo, Can Macia, La Puda, Ca n'Alzina, Castellolli,seguim el torrent del Castell, Canmps i Obaga de cal Llucia, Obaga del Castell, Cal Bruguest, Can Martorell, El vivencs, La Pobla, Hostal Robert, Cami de la Pobla, Cami dels Moletons, Can Tito Poliesportiu de Can Tito.

Y el eror que da es ....
You have an error in your SQL syntax near 'Alzina, Castellolli,seguim el torrent del Castell, Canmps i Obaga de cal Llucia,' at line 1
????????????????????
  #5 (permalink)  
Antiguo 12/05/2006, 12:29
 
Fecha de Ingreso: mayo-2006
Mensajes: 59
Antigüedad: 11 años, 6 meses
Puntos: 0
Gracias Notwen ya lo cogi el error esta en n'Alzina

Aunque esto tendria que estar soventado con las primeras lineas.
$busq = array("'",'"');
$reemp = array("/'",'/"');
$cDescrp = str_replace ($busq,$reemp,$_POST['cDescripcio']);
$cTextoA = str_replace ($busq,$reemp,$_POST['cTexto1']);
$cTextoB = str_replace ($busq,$reemp,$_POST['cTexto2']);
$strSQL = "UPDATE SORTIDES SET SRDESCRIPCIO='$cDescrp'
  #6 (permalink)  
Antiguo 12/05/2006, 12:35
 
Fecha de Ingreso: abril-2006
Mensajes: 268
Antigüedad: 11 años, 7 meses
Puntos: 2
Es que estas insertando un valor que contiene una comilla simple ('), que es el caracter que se utilizar para determinar el fin de la cadena. Para poder insertar este caracter tendrías que anteponerle una \ para que no se considere como el fin de la cadena. Esto lo podés hacer con las funciones mysql_real_escape_string() o AddSlashes(). Deberias aplicar alguna de estas funciones a los datos antes de ser insertados (de esta manera también estas mejorando la seguridad, evitando ataques como los de "inyeccion de sql"

Saludos.
  #7 (permalink)  
Antiguo 12/05/2006, 12:46
 
Fecha de Ingreso: mayo-2006
Mensajes: 59
Antigüedad: 11 años, 6 meses
Puntos: 0
En realidad aplicaba str_replace, pero como puedes ver en el mensaje 5, no estaba aplicando la barra correcta.

Ya me funciona

Gracias Notwen, me has sido de gran ayuda.

saludos
  #8 (permalink)  
Antiguo 12/05/2006, 12:52
 
Fecha de Ingreso: abril-2006
Mensajes: 268
Antigüedad: 11 años, 7 meses
Puntos: 2
Seria mejor que utilizaras las funciones que te indique, auque en principio parezca que realizan la misma función. En especial te recomiendo que utilices
mysql_real_escape_string() ya que es una función específica para bases de datos mysql.
Saludos.
  #9 (permalink)  
Antiguo 12/05/2006, 13:37
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Iniciado por Notwen
Seria mejor que utilizaras las funciones que te indique, auque en principio parezca que realizan la misma función. En especial te recomiendo que utilices
mysql_real_escape_string() ya que es una función específica para bases de datos mysql.
Saludos.
Pinyo22

Hazle caso .. dicha función específica no sólo vela por "escapar" tus "slashess" .. tambien otro tipo de caracteres de control que podría darte problemas de SQL.

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 12/05/2006, 14:27
 
Fecha de Ingreso: mayo-2006
Mensajes: 59
Antigüedad: 11 años, 6 meses
Puntos: 0
Os reitero mi agradecimiento pues novato y utilizo esta fucion porque la primera que encontre

Gracias a ambos
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 15:12.