Comunidad de diseño web y desarrollo en internet online

¿Qué error es éste?

Citar            
MensajeEscrito el 06 Ene 2009 08:36 pm
Hola, estoy creando un formulario php q se comunica con una bbdd. En dicho formulario, al modificar los datos del usuario y enviarlos a la bbdd, me sale el siguiente mensaje de error:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE id =1' at line 1


El code para enviar es éste:

Código :

if(isset($_POST['submit'])){

   //nos conectamos a mysql

   $cnx = conectar ();



   $sql = "UPDATE usuarios SET ";

   $sql .= "nombre ='".$_POST['nombre']."',";

   $sql .= "apellidos ='".$_POST['apellidos']."',";

   

   $sql .= " WHERE id =".$_POST['id'];

   $res = mysql_query($sql) or die(mysql_error());

   echo "Registro actualizado.<br><a href='listado.php'>regresar</a>";

   mysql_close($cnx);

   exit;

}



Según entiendo, el error me dice q hay algún problema con la versión mysql no?? Estoy en lo cierto? Si es así... cómo puedo solucionarlo?

Mil gracias por vuestra ayuda.

Por Hapki

Claber

268 de clabLevel



 

firefox
Citar            
MensajeEscrito el 06 Ene 2009 08:55 pm
te falta una ' al principio del where='1'

te recomiendo q lo escribas asi

Código :

if(isset($_POST['submit'])){

   //nos conectamos a mysql

   $cnx = conectar ();



   $sql = "UPDATE usuarios SET nombre ='".$_POST['nombre']."', apellidos ='".$_POST['apellidos']."'" WHERE id ='".$_POST['id']."'";

   $res = mysql_query($sql) or die(mysql_error());
   
   echo "Registro actualizado.<br><a href='listado.php'>regresar</a>";

   mysql_close($cnx);

   exit;

}


a mi parecer saludos

Por talcual

686 de clabLevel



 

Colombia

firefox
Citar            
MensajeEscrito el 06 Ene 2009 08:56 pm
No, el error dice que hay un error de sintáxis en la consulta de MySQL... A la final tu consulta queda armada así:

Código :

UPDATE usuarios SET nombre='Elano', apellidos='James', WHERE id=69
Como puedes ver antes del WHERE hay una coma (,) y eso genera el error, debes quitar esa coma en la línea:

Código PHP :

$sql .= "apellidos ='".$_POST['apellidos']."',";
Elimina esa coma del final y listo...

Saludos...

Por KB-27

Claber

301 de clabLevel



 

My very secret HQ

firefox
Citar            
MensajeEscrito el 06 Ene 2009 08:59 pm
yo recomendaria revisar esa consulta esta apta para ataque XSS saludos y borra las comillas dobles q coloque sin querer antes del where saludos

Por talcual

686 de clabLevel



 

Colombia

firefox
Citar            
MensajeEscrito el 06 Ene 2009 09:34 pm
Os agradezco vuestra tan pronta respuesta....

Pero estoy empezando a estudiar ésto... y he hecho lo que me decíis pero me da error de sintaxis al quitar la coma...probé a quitar solo la coma y no tocar ninguna comilla, y seguía el erro anterior, así que lo modifiqué quitando las comillas dobles, quedando así:

Código :

$sql .= "sexo ='" .$_POST['sexo']';


Por cierto, antes era apellido, pero mientras contestábais he ido complentando algo, por eso ahora cambia un poquito.
El code de nuevo es éste:

Código :

$sql="UPDATE usuarios SET ";
   $sql .= "nombre ='" .$_POST['nombre']."',";
   $sql .= "apellidos ='" .$_POST['apellidos']."',";
   $sql .= "nacimiento ='" .$_POST['nacimiento']."',";
   $sql .= "sexo ='" .$_POST['sexo']';
   
   $sql .= "WHERE id='".$_POST['id'];


Y ahora me da error de sintaxis, en la última fila. Y he probado varias combinaciones, y cuándo no aparece el error de arriba, me aparece el error de sintaxis... ya no sé que hacer exactamente. Con tantas comillas me he liado.

Por cierto, talcual, probé a ponerlo todo en una misma línea como me aconsejastes, pero tb me da error de sintaxis, y... hay algún problema de hacerlo como lo estoy haciendo? es que para mi es más fácil visualmente hablando, para corregir "cositas".

Y aprovecho para preguntaros, el tema de las comillas, tanto dobles como simples... entiendo su función por separado, según he estudiado, las dobles "procesan" lo que hay entre ellas, y las simples "escriben" tal cual lo que hay dentro de ellas. Pero aqui tantos dobes y simples juntas, me despito un poco con su funcionamiento. Se supone que las dobles comillas simples primeras, es para "apellidos" (por ejemplo) pero no entiendo, la comilla simple antes de cerrar la doble, que hace exactamente? y luego las últimas comillas son para la coma??

Mil gracias por vuestro tiempo y ayuda.

Por Hapki

Claber

268 de clabLevel



 

firefox
Citar            
MensajeEscrito el 06 Ene 2009 09:35 pm
es q te falta una comilla en el where por eso te sale un error saludos

Por talcual

686 de clabLevel



 

Colombia

firefox
Citar            
MensajeEscrito el 06 Ene 2009 09:36 pm
talcual, perdona, escribimos los post a la vez, y te acabo de leer... te importaría explicarme q son los ataques XSS?? Soy muy nueva en esto....

Por Hapki

Claber

268 de clabLevel



 

firefox
Citar            
MensajeEscrito el 06 Ene 2009 09:45 pm
He puesto después de cerrar el corchete del Where, una comilla doble, luego probé con una simple, luego probé don dos comillas dobles, y por último probé con " ' " (dos dobles y en medio una simple) ... Ya no sé que más poner.... pero el error de sintaxis me lo sigue dando :(

Por Hapki

Claber

268 de clabLevel



 

firefox
Citar            
MensajeEscrito el 06 Ene 2009 11:16 pm
Por si sirve, el error q me sale es éste:

Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in /var/ejemplo.php on line 16


:(

Por Hapki

Claber

268 de clabLevel



 

firefox
Citar            
MensajeEscrito el 07 Ene 2009 01:29 am
Hola Hapki, realmente desde mi punto de vista es mejor que armes la consulta en una sola instrucción ya que dicha consulta es muy sencilla, quedaría así:

Código PHP :

$sql = "UPDATE usuarios SET nombre='{$_POST['nombre']}', apellidos='{$_POST['apellidos']}', nacimiento='{$_POST['nacimiento']}',  sexo='{$_POST['sexo']}' WHERE id={$_POST['id']}";
Por lo visto entendiste muy bien la diferencia de usar comillas simples y dobles en PHP, pero ahora te muestro algo más:

Código PHP :

<?php
   $var = "Mundo";
   $arr = array("Elano","James");
   
   echo "Hola $var";// --> Hola Mundo
   echo 'Hola $var';// --> Hola $var
   echo "Hola $arr[0]";// --> Da error de PHP
   echo "Hola {$arr[0]}";// --> Hola Elano
?>
Como puedes ver no puedes meter en un string una arreglo así como así porque da error, para poder agregar al string el contenido de una posición del arreglo tienes que encerrarlo entre llaves { }, eso te explica lo que hice en el primer código, pues $_POST es un arreglo que contiene todos los elementos que mandaste por ese método...

Ahora con respecto a tu enredo con las comillas simples o dobles, primero que nada, lo que te expliqué anteriormente es para que te saltes el fastidio (desde mi punto de vista) de estar concatenando un string utilizando el operando punto (.) ya que tienes que estar abriendo y cerrando comillas, poniendo puntos, realmente me parece un dolor de balls... Lo otro que quizás te pudo enredar es que si en la BD tienes en una tabla un campo char, varchar, text, o cualquier tipo de dato que se maneje como un string cuando vayas a hacer referencia a su contenido tienes que hacerlo con comillas simples, tomando como ejemplo tu consulta:

Código :

UPDATE usuarios SET nombre='Elano' WHERE id=1; -- Correcto

UPDATE usuarios SET nombre=Elano WHERE id=1; -- Incorrecto
Lo más lógico es que el campo nombre sea varchar, por lo que al asignarle Elano (sin las comillas simples) MySQL te dará un error... Partiendo de esto último ya sabrás si en el primer código que escribí le tienes que poner comillas simples o no a id, ya que muy bien puede ser integer o varchar... Espero haber sido de ayuda... Saludos...

Por KB-27

Claber

301 de clabLevel



 

My very secret HQ

msie7
Citar            
MensajeEscrito el 07 Ene 2009 09:30 pm
:alabado: Mil gracias por esa gran clase... ahora lo tengo todo muy claro :D

Y gracias tb por solucionarme el problema... que ya no sabía que más probar... ahora todo está perfecto.

Lo dicho... mil gracias!!!

Por Hapki

Claber

268 de clabLevel



 

firefox
Citar            
MensajeEscrito el 08 Ene 2009 12:51 am
bueno chica mira los ataques XSS son un tipo de tecnica de hacking con la cual insertan codigo malicioso en la base de datos con el fin de modificar datos , borrar tablas y una cantidad de cosas mas bueno esto se previene si sabemos usar las " ' " y con una funcion anti XSS de las q se encuentran en el foro como en mi web como en google saludos

Por talcual

686 de clabLevel



 

Colombia

firefox
Citar            
MensajeEscrito el 08 Ene 2009 01:30 pm
XSS - Inyección SQL

Lo que dice talcual es Inyección SQL... En el Link está muy bien explicado que es, como y cuando se es vulnerable, pero de igual manera puedes googlear un poco y ver métodos para evitarla, lo cual es sencillo de lograr...

Saludos...

Por KB-27

Claber

301 de clabLevel



 

My very secret HQ

firefox
Citar            
MensajeEscrito el 08 Ene 2009 07:09 pm
Gracias de nuevo por la info.... la verdad es q después de preguntar, ya estuve indagando sobre el tema, y encontré bastante información... por eso no insistí con la pregunta.... pero se agradece que os hayáis molestado en contestar a ella, toda ayuda es poca.

Lo dicho, gracias por todo.

Por Hapki

Claber

268 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.