Foro de elhacker.net

Programación => Desarrollo Web => Mensaje iniciado por: Angel Zero en 15 Octubre 2011, 07:05 am



Título: Problema con checkbox
Publicado por: Angel Zero en 15 Octubre 2011, 07:05 am
hola a todos, espero esten bien :D.

He logrado crear el checkbox, pero lo que no he podido lograr, es que la informacion se guarde en la base de datos, necesito ayuda con esto.

Citar
<td class="small" align="right">Descripcion de accesorios:</td><td class="informacion" align="left">
   
   <form action=registrar.php method=post>   
   
   <input type="checkbox" name="accesorios" value="aire" > Aire
   <input type="checkbox" name="accesorios" value="pintura" > pintura
        <input type="checkbox" name="accesorios" value="portavasos" > portavasos
        <input type="checkbox" name="accesorios" value="rines" > rines
   </form>
   
   </td>
   
   </tr>
este es el codigo que puse para que el checkbox saliera.

Citar
<?php
//1. Crear conexión a la Base de Datos
$conexion = mysql_connect("localhost","root","");
if (!$conexion) {
die("Fallo la conexión a la Base de Datos: "  . mysql_error());
}
//2. Seleccionar la Base de Datos a utilizar
$seleccionar_bd = mysql_select_db("redmotor_redmotor", $conexion);
if (!$seleccionar_bd) {
die(“Fallo la selección de la Base de Datos: ” . mysql_error());
}
//3. Tomar los campos provenientes del Formulario
$aire = $_POST['accesorios'];
//4. Insertar campos en la Base de Datos (No inserto el id_empleado ya que se genera automaticamente)
$insertar = mysql_query(“INSERT INTO empleados (aire)
VALUES (‘{$accesorios}’);
if (!$insertar) {
die(“Fallo en la insercion de registro en la Base de Datos: ” . mysql_error());
}
//4. Cerrar conexión a la Base de Datos
mysql_close($conexion);
?>

no les voy a negar que no tengo idea de que hacer o como hacer el php, busque y encontre algunos, los edite segun lo que entiendo, pero aun asi no me funciona, les agradeceria toda la ayuda posible con esto.

Gracias.


Título: Re: Problema con checkbox
Publicado por: madpitbull_99 en 15 Octubre 2011, 10:01 am
Intenta con la función filter_input_array() (http://php.net/manual/es/function.filter-input-array.php).

Código
  1. $aDatos = filter_input_array(INPUT_POST);

Supongamos que tienes el siguiente formulario HTML:


Código
  1. <form method="post" action="<?= $_SERVER['PHP_SELF']; ?>">
  2.  
  3.  <input type="text" name="email" />
  4.  <input type="text" name="sevendigits" />
  5.  <input type="text" name="zerototwenty" />
  6.  
  7.  <input type="checkbox" name="checkboxes[]" value="cb1" />
  8.  <input type="checkbox" name="checkboxes[]" value="cb2" />
  9.  <input type="checkbox" name="checkboxes[]" value="cb3" />
  10.  
  11.  <input type="hidden" name="validurl" value="http://elhacker.net" />
  12.  
  13.  <input type="submit" value="Submit" />
  14.  
  15. </form>

Haciéndolo a la vieja usanza sería así:

Código
  1. $email = $_POST['email'];
  2. $sevendigits = $_POST['sevendigits'];
  3. $zerototwenty = $_POST['zerototwenty'];
  4. // ... and so on.
  5.  
  6. if(empty($email)){
  7.  // Empty email, show error or do something else.
  8.  return;
  9. }
  10.  
  11. if(!empty($sevendigits)){
  12.  if(preg_match("/^(\d{7})$/",$sevendigits)){
  13.    $sevendigits = intval($sevendigits);
  14.  }
  15.  else {
  16.    // Not seven digits
  17.  }
  18. }
  19. else {
  20.  // Error, sevendigits wasn't submitted.
  21. }
  22.  
  23. // ... and so on, you get the idea.

Y con la función filter_input_array():

Código
  1. <?php
  2.  
  3. // Works only in PHP 5.2.0 or later.
  4.  
  5. $filter = array(
  6.  
  7.   // This ensures that $_POST['email'] is actually a
  8.   // valid email address.
  9.   'email' => FILTER_VALIDATE_EMAIL,
  10.  
  11.   // This filter verifies that $_POST['sevendigits'] is
  12.   // exactly a seven digit number using a regular expression.
  13.   'sevendigits' => array('filter'  => FILTER_VALIDATE_REGEXP,
  14.                          'options' => array('regexp' => '/^\d{7}$/')
  15.                          ),
  16.  
  17.   // Make sure that $_POST['zerototwenty'] is a number
  18.   // 0 to 20 using the min_range and max_range specs.
  19.   'zerototwenty' => array('filter'  => FILTER_VALIDATE_INT,
  20.                           'options' => array('min_range' => 0,
  21.                                              'max_range' => 20)
  22.                           ),
  23.  
  24.   // Verify that the incoming $_POST['checkboxes'] from
  25.   // the checkbox list is actual an array like we expect.
  26.   'checkboxes' => array('filter' => FILTER_VALIDATE_INT,
  27.                         'flags'  => FILTER_REQUIRE_ARRAY,
  28.                         ),
  29.  
  30.   // Make sure that the hidden URL field is a valid
  31.   // properly formatted URL.
  32.   'validurl' => FILTER_VALIDATE_URL,
  33.  
  34.   // ----- A few other filter examples not included
  35.   // ----- in the <form> sample above.  I just felt like
  36.   // ----- experimenting with a few other filters.
  37.  
  38.   // This field must be a boolean type.  If mustbeboolean is
  39.   // "true", "1", "TRUE" or some other value that represents
  40.   // true then this will be true.  Otherwise, it will be false.
  41.   'mustbeboolean' => array('filter' => FILTER_VALIDATE_BOOLEAN),
  42.  
  43.   // Encode a URL that we need encoded from $_POST['encodeurl']
  44.   'encodeurl' => array('filter' => FILTER_SANITIZE_ENCODED),
  45.  
  46.   // This dosen't exist in the form, I'm just using it to show
  47.   // what the result will be when an input doesn't exist.
  48.   'doesnotexist' => FILTER_VALIDATE_INT
  49.  
  50. );
  51.  
  52. // Filter and sanitize the incoming $_POST[] with the filter above.
  53. $inputs = filter_input_array( INPUT_POST, $filter );
  54.  
  55. // Here's an example of checking if $_POST['email'] made it
  56. // past our FILTER_VALIDATE_EMAIL filter.
  57. if( empty($inputs['email']) ) {
  58.   echo "Empty or invalid email entered.";
  59. }
  60.  
  61. ?>
  62.  

Esta última función agrega una capa de seguridad/filtrado.


Título: Re: Problema con checkbox
Publicado por: Hurubnar en 15 Octubre 2011, 13:28 pm
Buenas Angel Zero, he supuesto lo que quieres hacer, pero como no me acuerdo de cómo iban los CheckBox, te lo hago con simples Text... Ya cambiarás tú lo demás.

  • Para hacerlo necesitarás un hosting que soporte PHP y MySQL (en el ejemplo uso miarroba.com)
  • Deberás poseer una base de datos en MySQL (en este caso mysql.webcindario.com)

Y seguir los siguientes pasos:
  • Conectarte a la Base de Datos
  • Crear tabla en la DB
  • Crear el documento que contiene los <input type="text" ... (en vez de CheckBox)
  • Enviar la información lograda en el doc. de los CheckBox a la tabla que hemos creado.

Establecemos la conexión con la Base de Datos (conex.php):
Código
  1. <?php
  2. $res = mysql_connect ("mysql.webcindario.com", "usuario", "pass");
  3. If ($res==0){
  4. echo ("Ha habido un error");
  5. }
  6.  
  7. $b = mysql_select_db("el_DB_que_usaras");
  8. if ($b==0){
  9. // Si hay un error aparecera el siguiente mensaje
  10. echo ("Ha habido un error");
  11. }
  12. ?>

Crearemos la tabla que guardará en un futuro la información que le enviemos (creartabla.php):
Código
  1. <?php
  2. include("conex.php"); //necesitamos llamar al archivo que establece la conexión
  3.  
  4. $rs = mysql_query ("CREATE TABLE nombre_de_tabla(
  5. valor0 VARCHAR(30) NOT NULL,
  6. valor1 VARCHAR(10) NOT NULL)",$res);
  7.  
  8. If ($rs==0){
  9. // Si hay un error aparecera el siguiente mensaje
  10. echo "Ha habido un error";
  11. }
  12. ?>

Por último crearemos el documento en el que introduciremos los datos que luego se guardarán en la Base de Datos (inicio.php):
Código
  1. <html>
  2. <head>
  3. <title>Titulo de la página</title>
  4. </head>
  5.  
  6. <body>
  7. <form action="inicio.php" method=post>
  8. <table>
  9. <tr>
  10. <td>Valor 0:</td>
  11. <td><input type=text name="vherri"></td>
  12. </tr>
  13. <tr>
  14. <td>Valor 1</td>
  15. <td><input type=text name="vpk"></td>
  16. </tr>
  17. <tr>
  18. <td></td>
  19. <td><input type=submit name="to" value="Entrar">
  20. </tr>
  21. <tr>
  22. </tr>
  23. </table>
  24. </form>
  25. </body>
  26. </html>
  27.  
  28. <?php
  29. // Establecemos la conexion
  30. include("conex.php");
  31.  
  32. $sarr = mysql_query("INSERT INTO nombre_de_tabla (valor0, valor1) values ('$vherri', '$vpk')", $res);
  33. if($sarr==0){
  34. // Si hay un error aparecera el siguiente mensaje
  35. echo "Ha habido un error";
  36. }
  37. ?>

Este último archivo (inicio.php) será la página que verá la gente, en el que introducirán dos valores (de máximo 30 y 10 caracteres, respectivamente) y enviarán los datos a la Base de Datos (para guardarlos) al pulsar el botón "Entrar".

Me ha costado lo mío escribir este sencillo código (soy un novato en PHP), no te lo hice con los CheckBox porque no me acuerdo de cómo se enviaban sus valores ni sé lo que quieres hacer con certeca (¿si está "checkeado" Aire o pintura qué valor quieres introducir en la tabla?).

Si explicas con esmero qué pretendes hacer, quizá te pueda ayudar con el código real y no con un ejemplo (como ahora).

Un saludo,
atte. Herio


Título: Re: Problema con checkbox
Publicado por: Angel Zero en 15 Octubre 2011, 17:12 pm
les mostrare graficamente que es lo que deseo hacer, pero claro esta que voy a probar con lo que me han dicho, aunque no entiendo mucho, tratare de leer y entender ;)

aca les dejo algunas imagenes con lo que se desea hacer, para que me puedan enterner mejor

en esta imagen muestro la base de datos del xammp, ese espacio es donde deberia de guardarse las seleccion de los chechbox, es decir, si le doy a "Aire" deberia de guardarse aire, y si le doy a pintura deberia de guardarse "Aire, pintura".
(http://img411.imageshack.us/img411/152/accesorios.png)

y en esta muestro la pagina donde se hace el registro de los vehiculos, y como se verian los checkbox
(http://img687.imageshack.us/img687/678/paginag.png)

Muchas gracias por la ayuda ;)


Título: Re: Problema con checkbox
Publicado por: Hurubnar en 15 Octubre 2011, 18:44 pm
Aquí te dejo una página que trata sobre el mismo tema en inglés (el envío de la información de los CheckBox seleccionados a una tabla en MySQL):
http://www.ozzu.com/programming-forum/mysql-php-and-checkboxes-t25807.html

Y en la segunda foto vi que tienes una opción "S<?>" cuando en realidad quieres decir "SÍ". Para solucionarlo, en vez de escribir "SÍ" escribe lo siguiente en el código HTML:
Código
  1. S&Iacute

Un saludo,
atte. Herio


Título: Re: Problema con checkbox
Publicado por: Hurubnar en 15 Octubre 2011, 19:10 pm
Buenas:
Ya te hice un ejemplo Angel Zero. Te queda modificar alguna opción (nombre_de_tala, usuario, pass, mysql.webcindario.com...).

Necesitas 2 archivos:
  • conex.php
  • cheek.php

    Contenido de conex.php:
    Código
    1. <?php
    2. $res = mysql_connect ("mysql.webcindario.com", "usuario", "pass");
    3. If ($res==0){
    4. echo ("Ha habido un error");
    5. }
    6.  
    7. $b = mysql_select_db("el_DB_que_usaras");
    8. if ($b==0){
    9. // Si hay un error aparecera el siguiente mensaje
    10. echo ("Ha habido un error");
    11. }
    12. ?>

    Contenido de cheek.php:
    Código
    1. <html>
    2. <body>
    3.  
    4. <form action="cheeck.php" method=post>
    5. <table>
    6. <tr>
    7. <td>Valor 0</td>
    8. <td><input type="checkbox" name="val0" VALUE="Aire" />Aire</td>
    9. </tr>
    10. <tr>
    11. <td></td>
    12. <td><input type=submit name="to" value="Entrar">
    13. </tr>
    14. </table>
    15. </form>
    16.  
    17. </body>
    18. </html>
    19.  
    20. <?php
    21. // Establecemos la conexion.
    22. include("conex.php");
    23.  
    24. // Comprobamos si el CheckBox de "Aire" esta seleccionado.
    25. if ($val0 != ""){
    26.  
    27. // Si "Aire" esta seleccionado introduciremos su valor en la tabla
    28. $sarr = mysql_query("INSERT INTO nombre_de_tabla (valor0) values ('$val0')", $res);
    29. if($sarr==0){
    30. // Si hay un error aparecera el siguiente mensaje
    31. echo "Ha habido un error";
    32. }
    33. }
    34. ?>


    Espero que te sirva, cualquier duda, ya sabes.
    atte. Herio


Título: Re: Problema con checkbox
Publicado por: Angel Zero en 15 Octubre 2011, 20:12 pm
Bueno, con este codigo logre hacer que el checkbox, me guardara en la ubicacion "accesorios" de mi base de datos

Citar
<td class="small" align="right">Descripcion de accesorios:</td><td class="informacion" align="left"><input type="checkbox" name="accesorios" value="Aire" />Aire</td></tr>

Ahora lo que necesito es poder poner mas de un checkbox, y que a su vez, me guarde en el mismo campo de "accesorios" valores diferentes y separados por comas.

Citar
accesorios: aire, pintura, vasos,

sera posible? Gracias por la ayuda :D


Título: Re: Problema con checkbox
Publicado por: Hurubnar en 15 Octubre 2011, 20:46 pm
Citar
Bueno, con este codigo logre hacer que el checkbox, me guardara en la ubicacion "accesorios" de mi base de datos

Citar
<td class="small" align="right">Descripcion de accesorios:</td><td class="informacion" align="left"><input type="checkbox" name="accesorios" value="Aire" />Aire</td></tr>

¿Con qué código? Éso que has escrito es código HTML, nada más.

Intenta explicarte mejor.  :-X


Título: Re: Problema con checkbox
Publicado por: Angel Zero en 16 Octubre 2011, 16:37 pm
pues si, es codigo html, pero eso logro ponerme la respuesta en la base de datos, ahora lo que intento es poner exactamente lo mismo, con diferentes cosas y que me guarde en el mismo lugar (accesorios)

Gracias.


Título: Re: Problema con checkbox
Publicado por: Hurubnar en 16 Octubre 2011, 17:05 pm
Es imposible que con solamente código HTML introduzcas datos en un DB, pero creo adivinar lo que estás haciendo... Quizás te ayude esta explicación: http://www.forosdelweb.com/f21/mysql-varios-valores-uno-109735/

Un saludo,
atte. Herio

PD Tienes nuevo MP


Título: Re: Problema con checkbox
Publicado por: madpitbull_99 en 16 Octubre 2011, 20:50 pm
Ya lo mencioné más arriba, para el tema de los checkbox el formulario se haría así:

  <input type="checkbox" name="checkboxes[]" value="cb1" />
  <input type="checkbox" name="checkboxes[]" value="cb2" />
  <input type="checkbox" name="checkboxes[]" value="cb3" />


¿Has intentado con eso?



Título: Re: Problema con checkbox
Publicado por: Hurubnar en 16 Octubre 2011, 21:29 pm
Citar
Ya lo mencioné más arriba
Cierto, no me he dado cuenta.

AZ, la cosa consiste en darles a todos los CheckBoxes el mismo nombre a la vez que un diferente valor, concatenar los valores con las comas e introducirlo en el DB. Aun y todo, si no entiendes bien HTML, PHP y/o MySQL quizás te sea difícil hacerlo...

Un saludo,
atte. Herio


Título: Re: Problema con checkbox
Publicado por: Angel Zero en 17 Octubre 2011, 16:15 pm
lo de los nombres diferentes ya lo he usado, y no me ha funcionado.

Citar
<input type="checkbox" name="accesorios" value="Aire" />Aire
<input type="checkbox" name="accesorios" value="Pintura" />Pintura
<input type="checkbox" name="accesorios" value="Vasos" />Vasos

Y este es el codigo php que me esta ingresando los datos a la base de datos, solo que estaba demasiado escondido y no lo habia encontrado.

Citar
$accesorios = mysql_real_escape_string($datos['accesorios']);
$consulta="INSERT INTO vehiculo (accesorios) VALUES ('$accesorios')";

me demore en contestar porque hasta hoy pude volver a tocar esto... lo del link lo lei y aun asi no he podido, les agradezco la ayuda ;)