Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: araque615 en 12 Septiembre 2015, 00:16 am



Título: Error con formulario
Publicado por: araque615 en 12 Septiembre 2015, 00:16 am
Buenas, soy un user nuevo, y necesito vuestra ayuda ya que al foro que voy está caído, como cosa rara, tengo un código el cual quiero que si dejan un campo vacío salga error, pero lo pruebo y en vez de salir el mensaje, no sale nada, acá el código.

Código
  1. <?php
  2. $html = true;
  3. require_once '../includes/core.php';
  4. $function->session("yes");
  5. $function->hk_access();
  6. $page = "2";
  7. $page_name = "Ajustes";
  8. $tinymce = true;
  9. require_once 'templates/navi.php';
  10.  
  11. $newsid = $function->filter($_GET['username']);
  12. if($_GET['do'] == "created"){
  13. $name = $function->filter($_POST['username']);
  14. $credits = $function->filternews($_POST['credits']);
  15. $vip_points = $function->filternews($_POST['vip_points']);
  16. $motto = $function->filter($_POST['motto']);
  17. $staff_pin = $function->filternews($_POST['staff_pin']);
  18. $referidos = $function->filternews($_POST['referidos']);
  19. $real_name = $function->filter($_POST['real_name']);
  20. $mail = $function->filter($_POST['mail']);
  21.  
  22. //CHECKS
  23. $name_check = $function->name_check($name);
  24. $credits_check = $function->credits_check($credits);
  25. $vip_points_check = $function->vip_points_check($vip_points);
  26. $motto_check = $function->motto_check($motto);
  27. $staff_pin_check = $function->staff_pin_check($staff_pin);
  28. $referidos_check = $function->referidos_check($referidos);
  29. $real_name_check = $function->real_name_check($real_name);
  30. $mail_check = $function->mail_check($mail);
  31. if(empty($name) || empty($credits) || empty($vip_points) || empty($motto) || empty($staff_pin) || empty($referidos) || empty($real_name) || empty($mail)){ $message = "No has rellenado todos los campos."; }
  32.  
  33. //fin de checks
  34.  
  35. mysql_query("UPDATE users SET credits = '{$credits}', vip_points = '{$vip_points}', motto = '{$motto}', staff_pin = '{$staff_pin}', referidos = '{$referidos}', real_name = '{$real_name}', mail = '{$mail}' WHERE username = '{$name}'");
  36. $message = "<div id=\"good\">Cambios efectuados correctamente <img src=\"". PATH_I ."/manage/images/check.gif\"></div> ";
  37. $_SESSION['RESULT_HK'] = $message;
  38. }
  39.  
  40.  
  41. ?>
Código
  1. <div id="column_2">
  2.  
  3. <div id="box">
  4. <div class="box_title blue">Creando una noticia</div>
  5. <div class="in_box">
  6.  
  7. <form action="<?php echo PATH_HK; ?>/credits.php?do=created" method="post" name="theAdminForm" id="theAdminForm">
  8.  
  9. <table width='100%' cellspacing='0' cellpadding='5' align='center' border='0'>
  10. <tr>
  11. <td class='tablerow1'  width='40%'  valign='middle'><b>Usuario</b><div class='graytext'></div></td>
  12. <td class='tablerow2'  width='60%'  valign='middle'><input type='text' name='username' size='30' class='textinput'></td>
  13. </tr>
  14.  
  15. <tr>
  16. <td class='tablerow1'  width='40%'  valign='middle'><b>Creditos</b><div class='graytext'></div></td>
  17. <td class='tablerow2'  width='60%'  valign='middle'><input type='text' name='credits' size='30' class='textinput'></td>
  18. </tr>
  19.  
  20. <tr>
  21. <td class='tablerow1'  width='40%'  valign='middle'><b>Puntos</b><div class='graytext'></div></td>
  22. <td class='tablerow2'  width='60%'  valign='middle'><input type='text' name='vip_points' size='30' class='textinput'></td>
  23. </tr>
  24.  
  25. <tr>
  26. <td class='tablerow1' width='40%' valign='middle'><b>Misión</b><div class='graytext'></div></td>
  27. <td class='tablerow2'  width='60%'  valign='middle'><input type='text' name='motto' size='30' class='textinput'></td>
  28. </tr>
  29.  
  30. <tr>
  31. <td class='tablerow1' width='40%' valign='middle'><b>Pin de seguridad</b><div class='graytext'></div></td>
  32. <td class='tablerow2'  width='60%'  valign='middle'><input type='text' name='staff_pin' size='30' class='textinput'></td>
  33. </tr>
  34.  
  35. <tr>
  36. <td class='tablerow1' width='40%' valign='middle'><b>Referidos</b><div class='graytext'></div></td>
  37. <td class='tablerow2'  width='60%'  valign='middle'><input type='text' name='referidos' size='30' class='textinput'></td>
  38. </tr>
  39.  
  40. <tr>
  41. <td class='tablerow1' width='40%' valign='middle'><b>Twitter</b><div class='graytext'></div></td>
  42. <td class='tablerow2'  width='60%'  valign='middle'><input type='text' name='real_name' size='30' class='textinput'></td>
  43. </tr>
  44.  
  45. <tr>
  46. <td class='tablerow1' width='40%' valign='middle'><b>Email</b><div class='graytext'></div></td>
  47. <td class='tablerow2'  width='60%'  valign='middle'><input type='text' name='mail' size='30' class='textinput'></td>
  48. </tr>
  49.  
  50. <tr>
  51. </tr><tr><td align="center" class="tablesubheader" colspan="2"><input type="submit" name="submit" value="Guardar" class="realbutton" accesskey="s"></td></tr>
  52.  
  53.  
  54. </div>
  55. </form>
  56.  
  57. </div>
  58.  
  59. </div>
  60. </div>
  61. <div id="footer"><?php echo $info['footer']; ?></div>
  62.  
  63. </body>
  64. </html>

Mod: Temas sobre PHP van al subforo de PHP.


Título: Re: Error con formulario
Publicado por: Thryks en 12 Septiembre 2015, 00:28 am
Porqué no pruebas con un if y isset? Algo así:
 ;-)
Código
  1. if (!isset($_GET['$idarecoger']) || empty($_GET['$idarecoger'])) {
  2. //Codigo de error
  3. }
  4. else  {
  5. //Código a ejecutar en caso de que exista
  6. }

Pruébalo y nos cuentas. Saludos


Título: Re: Error con formulario
Publicado por: araque615 en 12 Septiembre 2015, 00:33 am
No lo entiendo, podrías aplicarlo con el código que he dado? por fa, más o menos me doy una idea, pero no logro ver...


Título: Re: Error con formulario
Publicado por: Thryks en 12 Septiembre 2015, 00:36 am
Claro, perdona

Código
  1. //CHECKS
  2. $name_check = $function->name_check($name);
  3. $credits_check = $function->credits_check($credits);
  4. $vip_points_check = $function->vip_points_check($vip_points);
  5. $motto_check = $function->motto_check($motto);
  6. $staff_pin_check = $function->staff_pin_check($staff_pin);
  7. $referidos_check = $function->referidos_check($referidos);
  8. $real_name_check = $function->real_name_check($real_name);
  9. $mail_check = $function->mail_check($mail);
  10. //------Esto de abajo--------
  11. if((!isset($name) || empty($name)) || (!isset($credits) || empty($credits))){ $message = "No has rellenado todos los campos."; }
  12. //---------------- Y así con los demás campos-------------
  13. //fin de checks

PD: Lo he editado que se me abían olvidado los simbolos de distinto


Título: Re: Error con formulario
Publicado por: araque615 en 12 Septiembre 2015, 00:49 am
Sigue igual, podríamos hablar por skype? censurado ese es mi skype


Mod: Prohibido dar datos personales como correo o cuentas de mensajería.


Título: Re: Error con formulario
Publicado por: Thryks en 12 Septiembre 2015, 01:08 am
Perdon, con el sueño no lograba encontrar el fallo, yo creo que es una tonteria, es que en el empty le falta unos parentesis más, reemplaza el codigo así:
Código
  1. if((empty($name)) || (empty($credits)) || (empty($vip_points)) || (empty($motto)) || (empty($staff_pin)) || (empty($referidos)) || (empty($real_name)) || (empty($mail))){ $message = "No has rellenado todos los campos."; }

Pruebalo y nos cuentas.
PD: Si no funciona así incluso intenta en vez de comprobar las variables definidas comprobar el get desde el form es decir algo así:

Código
  1. if((empty($_POST['idcampoform'])){
  2. echo 'Campo vacio';
  3. }
  4. else {
  5. echo 'Codigo a ejecutar';
  6. }
  7.  


Título: Re: Error con formulario
Publicado por: araque615 en 12 Septiembre 2015, 01:15 am
Ninguna de las dos


Título: Re: Error con formulario
Publicado por: Thryks en 12 Septiembre 2015, 01:19 am
Ninguna de las dos
Prueba a aislar el codigo que te he dado y usarlo con otro form y otras variables aver si el error está en el codigo que te he dado o en lo demás porque sinceramente yo lo he probado en mi equipo con un formulario mio y funciona perfectamente, es muy raro, sino tienes la opción de meterlo en un ide y que te diga que re falla y simo pues espera a que algun profesional del foro te.conteste porque yo x lo que veo estoy bastante verde en esto.


Título: Re: Error con formulario
Publicado por: araque615 en 12 Septiembre 2015, 01:28 am
Podrías pasarme el form que tu usas?


Título: Re: Error con formulario
Publicado por: 0roch1 en 12 Septiembre 2015, 01:46 am
Porqué no pruebas con un if y isset? Algo así:

Código
  1. if (!isset($_GET['$idarecoger']) || empty($_GET['$idarecoger'])) {
  2. //Codigo de error
  3. }
  4. else  {
  5. //Código a ejecutar en caso de que exista
  6. }

No puedes hacer $_GET['$idarecoger'] en todo caso tendría que ser así a menos de que el campo en realidad tenga el caracter $, creo que te haz confundido y haz querido decir $_GET['idarecoger'].



Perdon, con el sueño no lograba encontrar el fallo, yo creo que es una tonteria, es que en el empty le falta unos parentesis más, reemplaza el codigo así:

Código
  1. if((empty($name)) || (empty($credits)) || (empty($vip_points)) || (empty($motto)) || (empty($staff_pin)) || (empty($referidos)) || (empty($real_name)) || (empty($mail))){ $message = "No has rellenado todos los campos."; }
Pruebalo y nos cuentas.
PD: Si no funciona así incluso intenta en vez de comprobar las variables definidas comprobar el get desde el form es decir algo así:
Código:
if((empty($_POST['idcampoform'])){
echo 'Campo vacio';
}
else {
echo 'Codigo a ejecutar';
}

Creo que lo estás confundiendo, en tu primer ejemplo usaste GET y en este último usas POST.


Intenta con lo siguiente.

index.htm
Código
  1. <!doctype html>
  2. <meta charset="utf-8">
  3. <title>Formulario</title>
  4. </head>
  5. <form id="formulario" name="formulario" action="guardar.php" method="GET" >
  6. <input type="text" name="input1" id="input1"/>
  7.    </br>
  8.    <button id="enviar" type="submit">Guardar</button>
  9. </form>
  10. </body>
  11. </html>
  12.  

guardar.php
Código
  1. <?php
  2.  
  3. if(isset($_GET['input1'])){ //isset — Determina si una variable está definida y no es NULL
  4. echo "<br>La variable \$_GET['input1'] esta definida";
  5. if(!empty($_GET['input1'])) { //empty — Determina si una variable está vacía
  6. echo "<br>La variable \$_GET['input1'] no esta vacia";
  7. }else {
  8. echo "<br>La variable \$_GET['input1'] esta vacia";
  9. }
  10. }else {
  11. echo "<br>La variable \$_GET['input1'] no esta definida";
  12. }
  13. ?>
  14.  


Título: Re: Error con formulario
Publicado por: araque615 en 12 Septiembre 2015, 02:12 am
Yo no entender, no se puede simplemente hacerlo en el mismo código? Sin necesidad de crear otro archivo?


Título: Re: Error con formulario
Publicado por: 0roch1 en 12 Septiembre 2015, 02:27 am
Si puedes pero

1. Como comentó Thryks aísla el código para que lo comprendas.
2. Es mejor práctica tener archivos separados: el archivo desde donde envías la información y el archivo donde recibes la información.

Comenta exactamente que es lo que sucede con un "no funciona" no podemos ayudarte mucho.
Qué hace?, qué no hace?, qué errores muestra?, qué comportamiento tiene?.



Título: Re: Error con formulario
Publicado por: Thryks en 12 Septiembre 2015, 12:35 pm
No puedes hacer $_GET['$idarecoger'] en todo caso tendría que ser así a menos de que el campo en realidad tenga el caracter $, creo que te haz confundido y haz querido decir $_GET['idarecoger'].



Creo que lo estás confundiendo, en tu primer ejemplo usaste GET y en este último usas POST.


Intenta con lo siguiente.

index.htm
Código
  1. <!doctype html>
  2. <meta charset="utf-8">
  3. <title>Formulario</title>
  4. </head>
  5. <form id="formulario" name="formulario" action="guardar.php" method="GET" >
  6. <input type="text" name="input1" id="input1"/>
  7.    </br>
  8.    <button id="enviar" type="submit">Guardar</button>
  9. </form>
  10. </body>
  11. </html>
  12.  

guardar.php
Código
  1. <?php
  2.  
  3. if(isset($_GET['input1'])){ //isset — Determina si una variable está definida y no es NULL
  4. echo "<br>La variable \$_GET['input1'] esta definida";
  5. if(!empty($_GET['input1'])) { //empty — Determina si una variable está vacía
  6. echo "<br>La variable \$_GET['input1'] no esta vacia";
  7. }else {
  8. echo "<br>La variable \$_GET['input1'] esta vacia";
  9. }
  10. }else {
  11. echo "<br>La variable \$_GET['input1'] no esta definida";
  12. }
  13. ?>
  14.  


Cierto 0roch1 en la primera me equivoque poniendo el simbolo $ y en la segunda use post y en la primera get porque escribí el código en ese momento y no tuve en cuenta como se pasaba el form sino que quería que araque entendiese la forma de comprobar que estuviese vacío o no pero tienes razón ya que podría haber causado errores, siento la equivocación. Gracias por el apunte.


Título: Re: Error con formulario
Publicado por: araque615 en 12 Septiembre 2015, 15:07 pm
Si puedes pero

1. Como comentó Thryks aísla el código para que lo comprendas.
2. Es mejor práctica tener archivos separados: el archivo desde donde envías la información y el archivo donde recibes la información.

Comenta exactamente que es lo que sucede con un "no funciona" no podemos ayudarte mucho.
Qué hace?, qué no hace?, qué errores muestra?, qué comportamiento tiene?.



De acuerdo, si borro desde el comentario CHECKS hasta el comentario FIN DE CHECKS y voy a la web, sale así

http://prntscr.com/8fgupe

y si vuelvo agregar el código entre los dos comentarios, al momento de darle guardar, sale así.

http://prntscr.com/8fgv18


Título: Re: Error con formulario
Publicado por: someRandomCode en 12 Septiembre 2015, 16:05 pm
Donde tenes definida la funcion name_check y de mas? no sera que alguna de ellas tiene un die() ? o que te estan retornando un error y PHP deja de correr el script por la gravedad del mismo?


Título: Re: Error con formulario
Publicado por: araque615 en 12 Septiembre 2015, 16:37 pm
Donde tenes definida la funcion name_check y de mas? no sera que alguna de ellas tiene un die() ? o que te estan retornando un error y PHP deja de correr el script por la gravedad del mismo?

Cierto xddddd, se me olvidó hacer la function, pues estaba haciéndola ahorita que leí tu mensaje, me quedaría así?

Código
  1. public function credits_check($a) {
  2. $a = $this->filter($a);
  3. if(empty($a)) { $error = "Campo vacío"; }
  4. return $error;
  5.  
  6. }


Título: Re: Error con formulario
Publicado por: someRandomCode en 12 Septiembre 2015, 16:41 pm
De que clase heredarias? porque tenes que definir un filtro para esa clase, sino mas vale si lo que queres es prevenir SQL injection es mas comodo que uses mysql_real_escape_string, si es que la cadena no esta vacia. (aunque en rigor de verdad, mysql_real_escape_string no va a fallar si la cadena esta vacia)
Es cuestion de que adaptes tu logica, la posta a dia de hoy es usar PDO


Título: Re: Error con formulario
Publicado por: araque615 en 12 Septiembre 2015, 16:48 pm
De que clase heredarias? porque tenes que definir un filtro para esa clase, sino mas vale si lo que queres es prevenir SQL injection es mas comodo que uses mysql_real_escape_string, si es que la cadena no esta vacia. (aunque en rigor de verdad, mysql_real_escape_string no va a fallar si la cadena esta vacia)
Es cuestion de que adaptes tu logica, la posta a dia de hoy es usar PDO

Ya, pero yo no manejo PDO


Título: Re: Error con formulario
Publicado por: #!drvy en 12 Septiembre 2015, 16:59 pm
Pues aprendelo que es bien facil.
http://php.net/manual/es/book.pdo.php

Saludos


Título: Re: Error con formulario
Publicado por: araque615 en 12 Septiembre 2015, 17:00 pm
Pues aprendelo que es bien facil.
http://php.net/manual/es/book.pdo.php

Saludos

Pero aunque sea podrías hacerme el favor de corregir el problema en mi actual código? :C


Título: Re: Error con formulario
Publicado por: #!drvy en 12 Septiembre 2015, 17:32 pm
Código
  1. function check_empty(array $args, $method='get'){
  2.    foreach($args as $arg){
  3.        switch($method){
  4.            case 'post':
  5.                if(empty($_POST[$arg])){ return false; }
  6.                break;
  7.  
  8.            case 'get': default:
  9.                if(empty($_GET[$arg])){ return false; }
  10.                break;
  11.        }
  12.    }
  13.  
  14.    return true;
  15. }

La pones al principio de tu script. Luego antes de usar las variables GET/POST (en la linea 10 del codigo que pusiste en el primer post) defines que campos quieres que sean obligatorios.

Código
  1. $check = array('username','credits','vip_points');
  2.  
  3. if(!check_empty($check, 'post')){
  4.    echo 'No has completado alguno de los campos obligatorios.';
  5.    return null;
  6. }

Con return null; te aseguras que no se ejecute el resto del código.


Ese es el problema de tu actual código. Lo de sanitizar las variables te lo vas a tener que estudiar porque no es cosa de poner código hecho a tuti plen. Hay mucho en Google.

Saludos