Problema con checkbox

Iniciado por Angel Zero, 15 Octubre 2011, 07:05 AM

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

Angel Zero

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.
Zero

madpitbull_99

Intenta con la función filter_input_array().

Código (php) [Seleccionar]
$aDatos = filter_input_array(INPUT_POST);

Supongamos que tienes el siguiente formulario HTML:


Código (html4strict) [Seleccionar]
<form method="post" action="<?= $_SERVER['PHP_SELF']; ?>">

  <input type="text" name="email" />
  <input type="text" name="sevendigits" />
  <input type="text" name="zerototwenty" />

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

  <input type="hidden" name="validurl" value="http://elhacker.net" />

  <input type="submit" value="Submit" />
 
</form>


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

Código (php) [Seleccionar]
$email = $_POST['email'];
$sevendigits = $_POST['sevendigits'];
$zerototwenty = $_POST['zerototwenty'];
// ... and so on.

if(empty($email)){
  // Empty email, show error or do something else.
  return;
}

if(!empty($sevendigits)){
  if(preg_match("/^(\d{7})$/",$sevendigits)){
    $sevendigits = intval($sevendigits);
  }
  else {
    // Not seven digits
  }
}
else {
  // Error, sevendigits wasn't submitted.
}

// ... and so on, you get the idea.


Y con la función filter_input_array():

Código (php) [Seleccionar]
<?php

// Works only in PHP 5.2.0 or later.

$filter = array(

   
// This ensures that $_POST['email'] is actually a
   // valid email address.
   
'email' => FILTER_VALIDATE_EMAIL,

   
// This filter verifies that $_POST['sevendigits'] is
   // exactly a seven digit number using a regular expression.
   
'sevendigits' => array('filter'  => FILTER_VALIDATE_REGEXP,
                          
'options' => array('regexp' => '/^\d{7}$/')
                          ),

   
// Make sure that $_POST['zerototwenty'] is a number
   // 0 to 20 using the min_range and max_range specs.
   
'zerototwenty' => array('filter'  => FILTER_VALIDATE_INT,
                           
'options' => array('min_range' => 0,
                                              
'max_range' => 20)
                           ),

   
// Verify that the incoming $_POST['checkboxes'] from
   // the checkbox list is actual an array like we expect.
   
'checkboxes' => array('filter' => FILTER_VALIDATE_INT,
                         
'flags'  => FILTER_REQUIRE_ARRAY,
                         ),
   
   
// Make sure that the hidden URL field is a valid
   // properly formatted URL.
   
'validurl' => FILTER_VALIDATE_URL,

   
// ----- A few other filter examples not included
   // ----- in the <form> sample above.  I just felt like
   // ----- experimenting with a few other filters.
 
   // This field must be a boolean type.  If mustbeboolean is
   // "true", "1", "TRUE" or some other value that represents
   // true then this will be true.  Otherwise, it will be false.
   
'mustbeboolean' => array('filter' => FILTER_VALIDATE_BOOLEAN),

   
// Encode a URL that we need encoded from $_POST['encodeurl']
   
'encodeurl' => array('filter' => FILTER_SANITIZE_ENCODED),

   
// This dosen't exist in the form, I'm just using it to show
   // what the result will be when an input doesn't exist.
   
'doesnotexist' => FILTER_VALIDATE_INT

);

// Filter and sanitize the incoming $_POST[] with the filter above.
$inputs filter_input_arrayINPUT_POST$filter );

// Here's an example of checking if $_POST['email'] made it
// past our FILTER_VALIDATE_EMAIL filter.
if( empty($inputs['email']) ) {
   echo 
"Empty or invalid email entered.";
}

?>



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



«Si quieres la paz prepárate para la guerra» Flavius Vegetius


[Taller]Instalación/Configuración y Teoría de Servicios en Red

Hurubnar

#2
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 (php) [Seleccionar]
    <?php
    $res 
    mysql_connect ("mysql.webcindario.com""usuario""pass");
    If (
    $res==0){
    echo (
    "Ha habido un error");
    }

    $b mysql_select_db("el_DB_que_usaras");
    if (
    $b==0){
    // Si hay un error aparecera el siguiente mensaje
    echo ("Ha habido un error");
    }
    ?>


    Crearemos la tabla que guardará en un futuro la información que le enviemos (creartabla.php):
    Código (php) [Seleccionar]
    <?php
    include("conex.php"); //necesitamos llamar al archivo que establece la conexión

    $rs mysql_query ("CREATE TABLE nombre_de_tabla( 
    valor0 VARCHAR(30) NOT NULL, 
    valor1 VARCHAR(10) NOT NULL)"
    ,$res);

    If (
    $rs==0){
    // Si hay un error aparecera el siguiente mensaje
    echo "Ha habido un error";
    }
    ?>


    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 (php) [Seleccionar]
    <html>
    <head>
    <title>Titulo de la página</title>
    </head>

    <body>
    <form action="inicio.php" method=post>
    <table>
    <tr>
    <td>Valor 0:</td>
    <td><input type=text name="vherri"></td>
    </tr>
    <tr>
    <td>Valor 1</td>
    <td><input type=text name="vpk"></td>
    </tr>
    <tr>
    <td></td>
    <td><input type=submit name="to" value="Entrar">
    </tr>
    <tr>
    </tr>
    </table>
    </form>
    </body>
    </html>

    <?php
    // Establecemos la conexion
    include("conex.php");

    $sarr mysql_query("INSERT INTO nombre_de_tabla (valor0, valor1) values ('$vherri', '$vpk')"$res);
    if(
    $sarr==0){
    // Si hay un error aparecera el siguiente mensaje
    echo "Ha habido un error";
    }
    ?>


    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

Angel Zero

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".


y en esta muestro la pagina donde se hace el registro de los vehiculos, y como se verian los checkbox


Muchas gracias por la ayuda ;)
Zero

Hurubnar

#4
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 (html4strict) [Seleccionar]
S&Iacute

Un saludo,
atte. Herio

Hurubnar

#5
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 (php) [Seleccionar]
    <?php
    $res 
    mysql_connect ("mysql.webcindario.com""usuario""pass");
    If (
    $res==0){
    echo (
    "Ha habido un error");
    }
     
    $b mysql_select_db("el_DB_que_usaras");
    if (
    $b==0){
    // Si hay un error aparecera el siguiente mensaje
    echo ("Ha habido un error");
    }
    ?>


    Contenido de cheek.php:
    Código (php) [Seleccionar]
    <html>
    <body>

    <form action="cheeck.php" method=post>
    <table>
    <tr>
    <td>Valor 0</td>
    <td><input type="checkbox" name="val0" VALUE="Aire" />Aire</td>
    </tr>
    <tr>
    <td></td>
    <td><input type=submit name="to" value="Entrar">
    </tr>
    </table>
    </form>

    </body>
    </html>

    <?php
    // Establecemos la conexion.
    include("conex.php");

    // Comprobamos si el CheckBox de "Aire" esta seleccionado.
    if ($val0 != ""){

    // Si "Aire" esta seleccionado introduciremos su valor en la tabla
    $sarr mysql_query("INSERT INTO nombre_de_tabla (valor0) values ('$val0')"$res);
    if($sarr==0){
    // Si hay un error aparecera el siguiente mensaje
    echo "Ha habido un error";
    }
    }
    ?>



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

Angel Zero

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.

Citaraccesorios: aire, pintura, vasos,

sera posible? Gracias por la ayuda :D
Zero

Hurubnar

CitarBueno, 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

Angel Zero

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.
Zero

Hurubnar

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