Ver Mensaje Individual
  #1 (permalink)  
Antiguo 28/09/2013, 07:02
dankko
Invitado
 
Mensajes: n/a
Puntos:
Insertar multiples registros con checkbox

Hola, estoy desarollando una aplicación para una tienda online.

En la zona de admin, tengo una sección para subir productos...
Esos productos están relacionados con multiples tablas.

Tengo unos checkbox, que contienen varias opciones, las cuales pueden ir varias tildadas o sólo una, pero siempre tiene que llevar al menos una.

Mi problema es que no se como realizar ese insert. Lo estoy intentando de esta manera con un foreach, pero lo que hace es hacer como máximo 2 insert, y en la columna "compatible", en vez de añadir un valor distinto cada vez que añade un producto compatible, lo que hace es darle el mismo valor, es decir, si marco la casilla modelo 1, modelo 2 y modelo 3, Lo unico que me ingresa es:

Máximo de 2 insert
En la casilla compatible, a esos dos insert lo que hace es ponerle el mismo compatible (debería ser 1 y 2), es decir, sale 1 en los dos.


Código PHP:
Ver original
  1. <?php
  2. //conexión con la base de datos
  3. $conexion = conecta_base_datos();
  4. if($_POST) { //echo "he recibido los datos y procederé a insertarlos";
  5.     //primero se deben hacer algunas validaciones
  6. if ($_POST["nombre_producto"]==""){
  7.     echo "No he recibido el nombre del producto...";
  8. }elseif($_POST["id_subgeneral"]==""){
  9.     echo "No he recibido la categoría del equipo...";
  10. }else{
  11.     echo "He recibido datos correctos y procedo a insertarlos...";
  12.  
  13. $elec_array = $_POST['compatible'];
  14. if ($elec_array=='')
  15. {
  16.     $query = "INSERT INTO productos (nombre_producto,id_subgeneral,id_fabricante,compatible) VALUES('" . $_POST["nombre_producto"] . "','" . $_POST["id_subgeneral"] . "','" . $_POST["id_fabricante"] . "','')";
  17.     $result = mysql_query($query);
  18. }
  19. else
  20. {
  21.     foreach ($elec_array as $one_elec)
  22.     {
  23.     $source .= $one_elec.", ";
  24.     }
  25.     $elec = substr($source, 0, -2);
  26.     echo $elec;
  27.     $query = "INSERT INTO productos (nombre_producto,id_subgeneral,id_fabricante,compatible) VALUES('" . $_POST["nombre_producto"] . "','" . $_POST["id_subgeneral"] . "','" . $_POST["id_fabricante"] . "','" . $elec . "')";
  28.     $result = mysql_query($query);
  29. }
  30.  
  31.     //$ssql ="INSERT INTO productos (nombre_producto,id_subgeneral,id_fabricante,compatible)  values ('" . $_POST["nombre_producto"] . "','" . $_POST["id_subgeneral"] . "','" . $_POST["id_fabricante"] . "','" . $compatible . "')";
  32.         if (mysql_query($query)){
  33.             echo "<h4 class='alert_success'>¡Producto insertado correctamente!</h4>";
  34.             //print "<meta http-equiv=Refresh content=\"2 ; url=./\">";
  35.         }else{
  36.             echo"<h4 class='alert_error'>Hubo un error al insertar los datos</h4>";
  37.             echo mysql_error();
  38.         }
  39.     }
  40.         }else{
  41.     ?>
  42.    
  43.     <form action="<?php echo $_SERVER['PHP_SELF']?>" method="post">
  44.         <fieldset>
  45.             <label>Nombre producto: </label>
  46.             <input type="text" name="nombre_producto">
  47.         </fieldset>
  48.         <fieldset>
  49.             <label>Categoría:</label>
  50.                 <select name="id_subgeneral">
  51.                     <?php
  52.                     $ssql = "select * from cat3_subgeneral";
  53.                     $rs = mysql_query ($ssql);
  54.                     while ($fila = mysql_fetch_array($rs)){
  55.    
  56.                         echo "<option value=" . $fila["id_subgeneral"] . ">" .$fila["nombre_subgeneral"] . "</option>";
  57.                     }
  58.                     mysql_free_result ($rs);
  59.                     ?>
  60.                 </select>
  61.         </fieldset>
  62.         <fieldset>
  63.             <label>Fabricante:</label>
  64.                 <select name="id_fabricante">
  65.                     <?php
  66.                     $ssql = "select * from fabricante";
  67.                     $rs = mysql_query ($ssql);
  68.                     while ($fila = mysql_fetch_array($rs)){
  69.    
  70.                         echo "<option value=" . $fila["id_fabricante"] . ">" .$fila["nombre_fabricante"] . "</option>";
  71.                     }
  72.                     mysql_free_result ($rs);
  73.                     ?>
  74.                 </select>
  75.         </fieldset>
  76.      
  77.         <fieldset>
  78.             <label>Coches compatibles:</label>
  79.                 <?php
  80.                 $conexion = conecta_base_datos();
  81.                 $ssql = "SELECT *
  82.                 FROM modelo
  83.                 INNER JOIN marcas ON marcas.id_marca = modelo.id_marca";
  84.                 $rs = mysql_query($ssql);
  85.                 while ($fila = mysql_fetch_array($rs)){
  86.        
  87.                     echo '<br><input type="checkbox" name="compatible[]" value="' . $fila["id_modelo"] . '">' . utf8_encode($fila["nombre_modelo"]) . ' - ' . utf8_encode($fila["nombre_marca"]) . '<br>';
  88.        
  89.                 }
  90.                 ?>
  91.         </fieldset>
  92.         <fieldset>
  93.             <input type="submit" value="Enviar">
  94.         </fieldset>
  95.     </form>
  96.  
  97.  <?php
  98. }
  99.  //Cerrar conexión con la base de datos, porque si no, al entrar demasiada gente, MYSQL se cae
  100.  mysql_close($conexion);
  101.  ?>

Este es el código.

También arroja otro error:

Notice: Undefined variable: source in C:\wamp\www\proyectos\...\admin\enviar-producto.php on line 26

Donde la variable indefinida es la variable que defino para usar el foreach:

$one_elec

La estructura de las tablas que aparecen:

modelo{id_modelo, nombre_modelo,id_marca}
marcas{id_marca,nombre_marca}
cat3_subcategoria{id_subcategoria,nombre_categoria }
productos{id_producto,nombre_producto,id_subcatego ria,compatible}

Donde la columna compatible, sería el valor de id_modelo.

Alguien sabe como podría solucionar esto?