Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: jdc en 5 Diciembre 2011, 23:16 pm



Título: No puedo encontrar el error alguien lo ve? (actualizando registro en db con php)
Publicado por: jdc en 5 Diciembre 2011, 23:16 pm
No puedo encontrar el error, alguien lo ve?

Código
  1. <?php
  2.  
  3. $usuario = @$_POST['editUser'];
  4. $pass = @$_POST['editPass'];
  5. $tipo = @$_POST['editTipo']; //int
  6. $sede = @$_POST['editSede']; //int
  7. $hash = md5($usuario.$pass);
  8. $id = @$_POST['idetable']; //int
  9.  
  10. $query = mysql_query("UPDATE `sistema`.`usuarios` SET `usuario` = \'$usuario\', `passwd` = \'$hash\', `tipo` = \'$tipo\', `sede` = \'$tipo\' WHERE `usuarios`.`id` =\'$id\';", $link);
  11. ?>
  12.  

Gracias ñ_ñ


Título: Re: No puedo encontrar el error alguien lo ve? (actualizando registro en db con php)
Publicado por: Shell Root en 6 Diciembre 2011, 02:03 am
Lo mismo de siempre, imprime la query y verifica su contenido.
Código
  1. $sql = "UPDATE `sistema`.`usuarios` SET `usuario` = \'$usuario\', `passwd` = \'$hash\', `tipo` = \'$tipo\', `sede` = \'$tipo\' WHERE `usuarios`.`id` =\'$id\';";
  2. print $sql;


Título: Re: No puedo encontrar el error alguien lo ve? (actualizando registro en db con php)
Publicado por: jdc en 6 Diciembre 2011, 02:40 am
Doh toda la razon...

UPDATE `sistema`.`usuarios` SET `usuario` = \'\', `passwd` = \'fe703d2586565a194907f\', `tipo` = \'1\', `sede` = \'1\' WHERE `usuarios`.`id` =\'5\';



  • No esta recibiendo usuario
  • tengo que usar \" para las strings y nada para los enteros no?

A ver pruebo y te cuento


Título: Re: No puedo encontrar el error alguien lo ve? (actualizando registro en db con php)
Publicado por: jdc en 6 Diciembre 2011, 03:27 am
Lo mismo de siempre, imprime la query y verifica su contenido.
Código
  1. $sql = "UPDATE `sistema`.`usuarios` SET `usuario` = \'$usuario\', `passwd` = \'$hash\', `tipo` = \'$tipo\', `sede` = \'$tipo\' WHERE `usuarios`.`id` =\'$id\';";
  2. print $sql;

Gracias Shell Root quedo funcionando todo ok :) te pasaste!

Código
  1. <?php
  2.  
  3. $usuario = @$_POST['editUser'];
  4. $pass = @$_POST['editPass'];
  5. $tipo = @$_POST['editTipo']; //int
  6. $sede = @$_POST['editSede']; //int
  7. $hash = md5($usuario.$pass);
  8. $id = @$_POST['idetable']; //int
  9.  
  10. $query = mysql_query("UPDATE `sistema`.`usuarios` SET `usuario` = \"$usuario\", `passwd` = \"$hash\", `tipo` = \"$tipo\", `sede` = \"$tipo\" WHERE `usuarios`.`id` =\"$id\";", $link);
  11. ?>
  12.  

En la Query habia problema de comillas y ademas habia un error mio, al tener un campo como disabled no enviaba los datos y cuando comparaba si estaba vacio siempre me daba true xD

Gracias otra vez :p


Título: Re: No puedo encontrar el error alguien lo ve? (actualizando registro en db con php)
Publicado por: s00rk en 6 Diciembre 2011, 22:31 pm
Por que no usar simples comillas como ' , asi te ahorras las \ ?


"UPDATE `sistema`.`usuarios` SET `usuario` = '$usuario', `passwd` = '$hash', `tipo` = '$tipo', `sede` = '$tipo' WHERE `usuarios`.`id` ='$id';"

Las \, son comunmente usadas cuando tu tu string empieza por el mismo tipo de comillas y quiere imprimir ejemplo:

echo "hola como estas \"juan\"";
echo 'hola como estas \'juan\'';
echo "hola como estas 'juan'";
echo 'hola como estas "juan"';

Si empieza con " dentro de la cadena puedes poner ' directamente sin poner \ a menos que decees poner " ocuparas poner \ puesto que iniciaste con  " , bueno espero haberme explicado jejeje


Título: Re: No puedo encontrar el error alguien lo ve? (actualizando registro en db con php)
Publicado por: jdc en 9 Diciembre 2011, 21:10 pm
Gracias, de hecho ya lo habia hecho ñ_ñ solo puse esto para mostrar como habia quedado funcionando, en mi sistema ya esta con comilla simple sin \


Título: Re: No puedo encontrar el error alguien lo ve? (actualizando registro en db con php)
Publicado por: WHK en 10 Diciembre 2011, 14:00 pm
Y que pasa si realmente necesitas insertar un $?, además por asuntos de seguridad, evitar pasar clases y esas cosas me acostumbré a usar siempre comillas simples ya que ahi el código arbitrario no funciona, o sea:

echo "$algo"; imprime la variable
echo '$algo'; imprime $algo

De hecho habia un bug que permitia ejecución de código arbitrario en vbuletin por causa de esto.
Además recuerda que desde php no vale de nada enviar punto y coma ";" porque no puedes hacer multiples querys, recuerda que ya no estás en el phpmyadmin.

Así lo haría yo:
Código
  1. <?php
  2. if(
  3. isset($_POST['editUser']) and
  4. isset($_POST['editPass']) and
  5. isset($_POST['editTipo']) and
  6. isset($_POST['editSede']) and
  7. isset($_POST['idetable'])
  8. ){
  9. if($query = mysql_query('
  10. if exists (
  11. select id from `usuarios` where id = '.(int)$_POST['idetable'].' limit 1
  12. )
  13. update `usuarios` set
  14. `usuario` = "'.mysql_real_escape_string($_POST['editUser']).'",
  15. `passwd` = "'.md5($_POST['editUser'].$_POST['editPass']).'",
  16. `tipo` = '.(int)$_POST['editTipo'].',
  17. `sede` = '.(int)$_POST['editSede'].'
  18. where `id` = '.(int)$_POST['idetable'].'
  19. ', $link))
  20. echo 'Editado!';
  21. else
  22. echo 'El usuario que se desea editar no existe.';
  23. }
  24. ?>