comment
IRC Chat
play_arrow
Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

[SOLUCIONADO] Problema al guardar usuarios.

  • 7 Respuestas
  • 2425 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado iatsm

  • *
  • Underc0der
  • Mensajes: 175
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« en: Octubre 24, 2013, 09:46:30 pm »
Buenas muchachos, ando haciendo un proyecto para la universidad con un registro de usuarios por un código php y una base de datos, pero tengo algunos problemas (no tengo conocimientos del lenguaje como tal).

Bien he leído y leído el código para buscar el problema pero no encuentro nada (por eso acudo a su ayuda).

El código es el siguiente:

Código: PHP
  1. <?php
  2.        include ("funciones.php");
  3.        $vNombre=$_POST['vNombre'];
  4.            $vEmail=$_POST['vEmail'];
  5.            $vClave=$_POST['vClave'];
  6.            $vNickname=$_POST['vNickname'];
  7.            $Query=("insert into usuarios (`Nombre`,`Email`,`Clave`,`Nickname`)values(`$vNombre`, `$vEmail`, `$vClave`, `$vNickname`,)");
  8.            print("$Query");
  9.         if ($guardar=No tienes permisos para ver links. Registrate o Entra con tu cuenta($Query,$conexion))
  10.         {
  11.         print("Usuario Registrado");
  12.                 No tienes permisos para ver links. Registrate o Entra con tu cuenta('Location: Index.html');
  13.         }
  14.         else
  15.         {
  16.                 print(`Error al guardar el usuario`);
  17.         }
  18. ?>
  19.  

Pero no me guarda los datos ingresados por el usuario (registro) en la base de datos, y me genera el siguiente error: "#1064 - 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 ')Error al guardar el usuario' at line 1"

Si bien ya leo que es un error de la sintax no sé cual podría ser, espero que me puedan ayudar un saludo.
« Última modificación: Julio 14, 2014, 12:32:58 am por Expermicid »

יהוה
Diseño Gráfico - Informática.

Conectado arthusu

  • *
  • Underc0der
  • Mensajes: 550
  • Actividad:
    8.33%
  • Reputación 2
  • Yo solo se que no se nada - Socrátes
    • Ver Perfil
    • Arthusu BLOG
  • Skype: arthusuxD
« Respuesta #1 en: Octubre 25, 2013, 01:01:30 pm »
Pon la consulta asi:
$Query="INSERT INTO usuarios (Nombre,Email,Clave,Nickname) VALUES ('".$vNombre."','".$vEmail."','".$vClave."','".$vNickname."')";
y me avisas si te arroja un error salu2 :P
Pentest - Hacking & Security Services

Contact me: arthusu@gmail.com

Desconectado overxfl0w13

  • *
  • Underc0der
  • Mensajes: 26
  • Actividad:
    0%
  • Reputación 0
  • Hola1
    • Ver Perfil
  • Skype: overxfl0w13
« Respuesta #2 en: Octubre 25, 2013, 08:08:59 pm »
Código: PHP
  1. <?php
  2. include_once("funciones.php");
  3. $vNombre=$_POST['vNombre'];
  4. $vEmail=$_POST['vEmail'];
  5. $vClave=$_POST['vClave'];
  6. $vNickname=$_POST['vNickname'];
  7. $Query=("insert into usuarios (Nombre,Email,Clave,Nickname) values ($vNombre, $vEmail, $vClave, $vNickname)");
  8. print("$Query");
  9. if($guardar=No tienes permisos para ver links. Registrate o Entra con tu cuenta($Query,$conexion))
  10. {
  11.     print("Usuario Registrado");
  12.     No tienes permisos para ver links. Registrate o Entra con tu cuenta('Location: Index.html');
  13. }
  14. else
  15. {
  16.     print("Error al guardar el usuario");
  17. }
  18. ?>
  19.  


Prueba eso, además filtra los parámetros y usa PDO, corta la ejecución del script si pasa algo raro, desactiva errores de php y lo que se te vaya ocurriendo para protegerte,¿no querrás que te hagan nada no?.

Un saludo :)
« Última modificación: Octubre 25, 2013, 08:30:04 pm por overxfl0w13 »

Desconectado alexander1712

  • *
  • Underc0der
  • Mensajes: 850
  • Actividad:
    0%
  • Reputación -2
    • Ver Perfil
    • El blog del programador
    • Email
« Respuesta #3 en: Octubre 26, 2013, 02:15:55 am »
No tienes permisos para ver links. Registrate o Entra con tu cuenta
Código: PHP
  1. <?php
  2. include_once("funciones.php");
  3. $vNombre=$_POST['vNombre'];
  4. $vEmail=$_POST['vEmail'];
  5. $vClave=$_POST['vClave'];
  6. $vNickname=$_POST['vNickname'];
  7. $Query=("insert into usuarios (Nombre,Email,Clave,Nickname) values ($vNombre, $vEmail, $vClave, $vNickname)");
  8. print("$Query");
  9. if($guardar=No tienes permisos para ver links. Registrate o Entra con tu cuenta($Query,$conexion))
  10. {
  11.     print("Usuario Registrado");
  12.     No tienes permisos para ver links. Registrate o Entra con tu cuenta('Location: Index.html');
  13. }
  14. else
  15. {
  16.     print("Error al guardar el usuario");
  17. }
  18. ?>
  19.  


Prueba eso, además filtra los parámetros y usa PDO, corta la ejecución del script si pasa algo raro, desactiva errores de php y lo que se te vaya ocurriendo para protegerte,¿no querrás que te hagan nada no?.

Un saludo :)

 ???

no comprendo como puedes sugerir desactivar display errors a alguien que está recién comenzando, quieres que programe a ciegas?

filtrar los parametros si, usar ¿PDO? por lo menos podrías haber explicado que pdo tiene un consumo mayor que mysql improve y que la rama de funciones mysql_ está obsoleta, yo uso pdo pero no por eso ando diciendo a todo el mundo "usa pdo" mysqli es más eficiente, quizá requiera un poco más de esfuerzo a la hora de imponer seguridad, y pdo su ventaja eran las consultas prearmadas.

ok, dejando ese comentario de lado seguiré...

el caracter ` es diferente al caracter ' uno es apóstrofe y otro es acento francés, el primero lo puedes usar para especificar campos por ejemplo, y el segundo lo puedes utilizar para especificar textos o valores que contengan caracteres (no es necesario para numeros enteros o decimales).

Código: No tienes permisos para ver links. Registrate o Entra con tu cuenta
$Query= "insert into usuarios (`Nombre`,`Email`,`Clave`,`Nickname`) values( '{$vNombre}', '{$vEmail}', '{$vClave}', '{$vNickname}' )";
quité la última coma que no era necesaria y cambié algunos ` por '.

deberías siempre primero quitar los espacios, imaginate que se me ocurriera poner simples espacios de nombre, eso sería un serio problema no?, para eso puedes hacer esto:

Código: No tienes permisos para ver links. Registrate o Entra con tu cuenta
$vNombre=trim($_POST['vNombre']);
eso soluciona el tema de los espacios quitando espacios al principio y al final solo dejando los caracteres. (no borra los espacios en medio aclaro)

luego te recomiendo revisar cosas como por ejemplo que realmente se halla ingresado algo en el campo nombre, poniendo por ejemplo

Código: No tienes permisos para ver links. Registrate o Entra con tu cuenta
if(empty($vNombre)) die('El campo nombre debe completarse');
luego deberías también pensar en ponerle una medida de seguridad para evitar inyecciones sql, como por ejemplo:

Código: No tienes permisos para ver links. Registrate o Entra con tu cuenta
$vNombre = mysql_real_escape_string($vNombre);
o alguien del foro había sugerido utilizar ctypealnum si no me equivoco.

arthusu tendría razón si no ubiese usado el concatenador (.) con el (") que incluye parsear el texto, no tiene sentido usar concatenadores y ubiese usado la combinación de especificador de literal con concatenador (') y (.) o en su defecto directamente usar (") y para mejorar su efectividad con el concatenador ({)

saludos! y espero que te sea de ayuda.
« Última modificación: Octubre 26, 2013, 02:23:04 am por Harkonnen »

Desconectado overxfl0w13

  • *
  • Underc0der
  • Mensajes: 26
  • Actividad:
    0%
  • Reputación 0
  • Hola1
    • Ver Perfil
  • Skype: overxfl0w13
« Respuesta #4 en: Octubre 26, 2013, 08:14:02 am »
Si estuviese comenzando tendrías toda la razón pero es un proyecto para la universidad y si quieres nota te lo tienes que ganar. No le digo que lo haga ya, si no que tenga en cuenta todo eso a la hora de hacerlo.

$Query= "insert into usuarios (`Nombre`,`Email`,`Clave`,`Nickname`) values( '{$vNombre}', '{$vEmail}', '{$vClave}', '{$vNickname}' )";

Toda esa parafernalia de apóstrofes, "acentos franceses" que llamas tú (a los valencianos y catalanes les ofenderá 8)), y corchetes son inútiles. Las dobles comillas te permiten concatenar variables sin necesidad de cortar y juntar con un . (evalúan la expresión) y por tanto evitarte tanto '{}' que sobra.

¿La rama de funciones mysql_ no estaba obsoleta? ¿Porqué le recomiendas usar mysql_real_escape_string?. Que use en su defecto mysqli_real_escape_string ¿no? que no lo está.

Respecto a PDO ¿a qué te refieres con consumo?, esto no es una lavadora, tendrá un mayor coste temporal o espacial (consumo espacial o temporal, si,bueno) pero no consumo a secas. Es cierto que tiene un menor rendimiento, pero no es orientado únicamente a mysql y  a la hora de cambiar de tecnología esta homogeneidad se paga. ¿Qué quieres, centrarte en la eficiencia? Usa mysqli, por eso quedó obsoleto mysql.

No me apetece escribir más un saludo  ;D
« Última modificación: Octubre 26, 2013, 02:34:32 pm por overxfl0w13 »

Desconectado iatsm

  • *
  • Underc0der
  • Mensajes: 175
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« Respuesta #5 en: Octubre 26, 2013, 03:20:26 pm »
Gracias por responder muchachos, no entrare en detalles, pero encontré la solución y les dejo el código que utilicé (creo que no esta demás) y repito, gracias por responder.

Código: PHP
  1. <?php
  2. include ("funciones.php");
  3. $vNombre=$_POST['vNombre'];
  4. $vEmail=$_POST['vEmail'];
  5. $vClave=$_POST['vClave'];
  6. $vNickname=$_POST['vNickname'];
  7.  
  8. if ($vNombre==NULL or $vEmail==NULL or $vClave==NULL or $vNickname==NULL)
  9. {
  10.     echo "<script>alert('atencion campos incompletos'); header ('location: Registro.html');</script>";
  11. }
  12. else
  13. $validar=No tienes permisos para ver links. Registrate o Entra con tu cuenta ("INSERT INTO usuarios(Nombre,Email,Clave,Nickname)
  14.              values('$vNombre','$vEmail','$vClave','$vNickname')");
  15. if ($validar ==0){                       
  16. echo 'Error en los datos.';
  17. }else{
  18.  
  19. echo No tienes permisos para ver links. Registrate o Entra con tu cuenta ('location: Menu.html');
  20. }
  21. ?>
  22.  
« Última modificación: Marzo 27, 2014, 05:22:08 pm por Expermicid »

יהוה
Diseño Gráfico - Informática.

Desconectado 2Fac3R

  • *
  • Underc0der
  • Mensajes: 237
  • Actividad:
    0%
  • Reputación 0
  • Why be a king, when you can be a god
    • Ver Perfil
    • Escuela de Hackers & Programación
  • Skype: rockeg_18
  • Twitter: @2Fac3R
« Respuesta #6 en: Octubre 26, 2013, 04:55:27 pm »
Yo usaría empty() para hacer las comprobaciones en el if.

Como bien te dijeron, se recomienda que ya no se use mysql_ porque ya está obsoleta, yo te recomendaría PDO, aunque si te piensas centrar siempre en manejar datos con mysql, pues está la MySQLi.

Zalu2
Escuela de Hackers & Programación.
No tienes permisos para ver links. Registrate o Entra con tu cuenta

Desconectado alexander1712

  • *
  • Underc0der
  • Mensajes: 850
  • Actividad:
    0%
  • Reputación -2
    • Ver Perfil
    • El blog del programador
    • Email
« Respuesta #7 en: Octubre 26, 2013, 08:54:10 pm »
No tienes permisos para ver links. Registrate o Entra con tu cuenta
Yo usaría empty() para hacer las comprobaciones en el if.

Como bien te dijeron, se recomienda que ya no se use mysql_ porque ya está obsoleta, yo te recomendaría PDO, aunque si te piensas centrar siempre en manejar datos con mysql, pues está la MySQLi.

Zalu2

2fac3R tiene razón.

sobre el empty() por la simple razón que queda más estético "si está vacía la variable $variable" que "si la variable $variable es igual a nada", no obstante va a opinión y gusto del desarrollador.

además quiero aclarar una cosa, las constantes deben ser Definidas para una mejor lectura del código en mayusculas, no obstante, como se puede leer en la documentación de php, constantes del lenguaje tales como true, false, y null deben estar en minúsculas.

el echo revisalo porque el envío de cabeceras está mal xD

saludos!

EDITO:

no había visto la respuesta de overxfl0w13.

Citar
Si estuviese comenzando tendrías toda la razón pero es un proyecto para la universidad y si quieres nota te lo tienes que ganar. No le digo que lo haga ya, si no que tenga en cuenta todo eso a la hora de hacerlo.

$Query= "insert into usuarios (`Nombre`,`Email`,`Clave`,`Nickname`) values( '{$vNombre}', '{$vEmail}', '{$vClave}', '{$vNickname}' )";

Toda esa parafernalia de apóstrofes, "acentos franceses" que llamas tú (a los valencianos y catalanes les ofenderá 8)), y corchetes son inútiles. Las dobles comillas te permiten concatenar variables sin necesidad de cortar y juntar con un . (evalúan la expresión) y por tanto evitarte tanto '{}' que sobra.

¿La rama de funciones mysql_ no estaba obsoleta? ¿Porqué le recomiendas usar mysql_real_escape_string?. Que use en su defecto mysqli_real_escape_string ¿no? que no lo está.

Respecto a PDO ¿a qué te refieres con consumo?, esto no es una lavadora, tendrá un mayor coste temporal o espacial (consumo espacial o temporal, si,bueno) pero no consumo a secas. Es cierto que tiene un menor rendimiento, pero no es orientado únicamente a mysql y  a la hora de cambiar de tecnología esta homogeneidad se paga. ¿Qué quieres, centrarte en la eficiencia? Usa mysqli, por eso quedó obsoleto mysql.

No me apetece escribir más un saludo  ;D

inútiles? LOL, son parte de un standard, si a ti te gusta hacer las cosas como se te da la gana, por mi bien, pero deberías saber que existen normas, que especifícan como hacer las cosas bien, para SQL (refiriendome únicamente a lo que a SQL le corresponda, vease acentos franceses, o apóstrofes y dejando de lado el tema de las llaves {}) lo que tu dices que son inútiles son cosas que están establecidas por un motivo, aunque reitero, si te gusta hacer las cosas como se te da la gana en vez de bien, pues no hay problema, aunque si se lo vas a comentar a alguien que recién empieza deberías conciderar decirle todo, y no lo que te gusta hacer a ti.

Citar
Las dobles comillas te permiten concatenar variables sin necesidad de cortar y juntar con un . (evalúan la expresión) y por tanto evitarte tanto '{}' que sobra.

si las comillas dobles te permiten parsear los textos, no obstante las llaves colaboran con el motor zend a la hora de interpretar cosas por del estilo, yo siempre digo que a la gente que trabaja en desarrollar y mejorar php no están aburridos y hacen las cosas porque tienen ganas, siempre hay un por qué, quizá a ti te parezca que las cosas están por que si, o no tengas el suficiente conocimiento, pero lo que ocurre es que las llaves están para algo.

me tomé la libertad y el tiempo de escribir todo esto, porque aunque te parezca que las cosas no sirven para nada, en realidad todo tiene su función.

sobre el mysql_real_escape_string, si en eso tienes razón, pero no lo dije porque venía usando mysql_ y ya le había aconcejado cambiar por por ejemplo mysqli_ ¿por qué repetiría tanto lo mismo? ¿para cada cosa que digo tengo que explicar lo obvio también así no te quedan dudas?

Citar
Respecto a PDO ¿a qué te refieres con consumo?, esto no es una lavadora, tendrá un mayor coste temporal o espacial (consumo espacial o temporal, si,bueno) pero no consumo a secas. Es cierto que tiene un menor rendimiento, pero no es orientado únicamente a mysql y  a la hora de cambiar de tecnología esta homogeneidad se paga. ¿Qué quieres, centrarte en la eficiencia? Usa mysqli, por eso quedó obsoleto mysql.

con consumo me refiero específicamente a consumos de recursos del hábitat o plataforma en la que se encuentra en ejecución el código, me sorprende que estando en una conversación de informática no puedas comprender un concepto tan básico como el "consumo", pero bien, solo me limitaré a explicar en brevedad y citando una de las definiciones de sistema operativo, "El sistema operativo es un gestor de los recursos físicos de una computadora, tales como dispositivos de e/s", si tomamos en cuenta esto, con consumo me refiero al consumo de tiempo que hace sobre dispositivos, y espacio de almacenamiento físico (no, no hablo de un disco rigido, hago la aclaración porque aparentemente es necesaria).

sobre el resto, si es verdad, pero si vas a decirle a alguien que use algo, deberías empezar explicando por que, como por ejemplo "porque pdo tiene mejor soporte para como por ejemplo PgSQL" por decir algo, o las razones, no deberías decir simplemente "usa tal cosa" porque así es como la mayoría programa sin saber ni lo que hace ni por qué lo hace.

solo quiero dejar una última aclaración, sea un proyecto para una universidad o para lo que fuere, deshabilitar display error es una estupidez siempre y cuando estén en la face de desarrollo, si se encuentra en producción, es muy aconcejable deshabilitar display error.

En todo caso podrías sugerir que diseñe un código que evalúe el estado del proyecto en base a por ejemplo una variable de entorno alojada en el .htacess o en un archivo de inicialización, o lo que se decee, para deshabilitar o habilitar display error dependiendo si se encuentra en producción o desarrollo.

en fin, isammuel es diseñador, si revisas un poco el foro lo notarás, no tiene sentido decirle que desactive display errors o baje el nivel de errores cuando está empezando a programar, o está en face desarrollo como ahora.

si entiendo que lo digas a futuro, pero aclaralo, porque sino no se entiende.

Citar
No me apetece escribir más un saludo  ;D

de eso no tengo nada que decir xD

ahora si, un saludo!

PD: creo que el tema está solucionado, me pareció pertinente hacer las aclaraciones para que cualquier lector, pueda entender, aquí no solo hay gente que sabe, y me parece una buena práctica siempre explicar las cosas por las que uno decide hacer algo o sugiere algo en específico, por más que estemos equivocados aveces, eso ayuda a autocorregirnos y a otras personas a poder aprender más.
Por eso es que cuando alguien dice cosas como "usa esto" o "haz esto" me gusta presionarle para que explique las razones.
« Última modificación: Octubre 26, 2013, 10:12:08 pm por Harkonnen »

 

¿Te gustó el post? COMPARTILO!



[SOLUCIONADO] ¿Kali Linux o Kali Linux Ligth ?

Iniciado por worq

Respuestas: 2
Vistas: 7640
Último mensaje Noviembre 21, 2017, 12:28:54 pm
por Codig0Bit
[SOLUCIONADO] ¿Como publicar un software como software libre?

Iniciado por FuriosoJack

Respuestas: 2
Vistas: 1641
Último mensaje Mayo 23, 2017, 07:24:22 am
por HATI
[SOLUCIONADO] Multiuploader de imagenes con mysql, hosting de imagenes con mysql

Iniciado por graphixx

Respuestas: 4
Vistas: 2232
Último mensaje Marzo 26, 2013, 05:42:58 pm
por Xt3mP
[SOLUCIONADO] Linux Mint, errores, errores y mas errores...

Iniciado por n1sendev

Respuestas: 12
Vistas: 3001
Último mensaje Noviembre 22, 2017, 06:50:55 am
por RuidosoBSD
[SOLUCIONADO] Problem al instalar Windows "cualquier windows"

Iniciado por Made

Respuestas: 7
Vistas: 3029
Último mensaje Septiembre 03, 2012, 04:53:08 pm
por Made