Foros del Web » Programando para Internet » PHP »

Como tomar más de un dato de una lista

Estas en el tema de Como tomar más de un dato de una lista en el foro de PHP en Foros del Web. Buenas, este es mi primer foro y soy nuevo programando en PHP y tengo una con respecto a un sistema que estoy desarrollando para un ...
  #1 (permalink)  
Antiguo 10/09/2015, 11:23
 
Fecha de Ingreso: septiembre-2015
Mensajes: 2
Antigüedad: 8 años, 6 meses
Puntos: 0
Como tomar más de un dato de una lista

Buenas, este es mi primer foro y soy nuevo programando en PHP y tengo una con respecto a un sistema que estoy desarrollando para un proyecto universitario. El proyecto es para una clínica la cual desea contar con sistema de facturación, manejo de usuarios y manejo de expedientes.

El problema se encuentra en la sección de generar factura en donde sabemos que las facturas pueden tener más de un artículo asociado, de manera que mi bases de datos en MySQL tiene una tabla factura la cual está ligada a una tabla inventario en donde están almacenados los articulos. Seguidamente cree una lista dinamica en HTML el cual carga los articulos segun el contenido de la tabla inventario, para que el usuario pueda seleccionar el valor que el necesita, esto se hizo asi ya que el cliente puede agregar artículos constantemente.

El siguiente código fue creado para realizar la acción explicada anteriormente:

Aquí se cargan los datos y al seleccionar uno este va a ser almacenado en la bases de datos existoamente lo cual esta bien, pero necesito poder agregar N datos al sistema ya que es para generar un factura, se me ocurre es crear un foreach para tomar los valores seleccionados y que sean almacenados en un array para que seguidamente sea almacenado en MySQL en una variable de tipo BLOB o TEXT, he intentado esto pero no me ha funcionado ya que no se como conectar eso al codigo de abajo y despues almacenarlo.

Código:
<p>
    <label>ART&Iacute;CULO:</label>
    <select name="inventario"id=" id_articulo" size="5" multiple="multiple">
    <option value=" ">SELECCIONE UNA OPCIÓN</option>
      <?php
          $server     = 'localhost'; //servidor
          $username   = 'root'; //usuario de la base de datos
          $password   = ''; //password del usuario de la base de datos
          $database   = 'proyect_db'; //nombre de la base de datos
           
          $conexion = @new mysqli($server, $username, $password, $database);

          if ($conexion->connect_error) //verificamos si hubo un error al conectar, recuerden que pusimos el @ para evitarlo
          {
              die('Error de conexión: ' . $conexion->connect_error); //si hay un error termina la aplicación y mostramos el error
          }

          $sql="SELECT * from tbl_inventario";
          $result = $conexion->query($sql); //usamos la conexion para dar un resultado a la variable
           
          if ($result->num_rows > 0) //si la variable tiene al menos 1 fila entonces seguimos con el codigo
          {
              $combobit="";
              while ($row = $result->fetch_array(MYSQLI_ASSOC)) 
              {
                  $combobit .=" <option value='".$row['id_articulo']."'>".$row['nombre_articulo']."</option>"; //concatenamos el los options para luego ser insertado en el HTML	
              }
          }
          else
          {
              echo "No hubo resultados";
          }
          $conexion->close(); //cerramos la conexión
        ?>
        <?php echo $combobit; ?>
    </select>
  </p>
También no se de que manera este valor es almacenado yala variable $id_articulo se almacena por medio de un $_POST[] en el cual va ser añadido el id de la lista que cree en el código de arriba de la selección de artículo

Código:
        $desc_factura = htmlspecialchars(trim($_POST['desc_factura']));
	$cedula_usuario = htmlspecialchars(trim($_POST['cedula_usuario']));
	$id_proveedor = htmlspecialchars(trim($_POST['id_proveedor']));
        $id_articulo = htmlspecialchars(trim($_POST['id_articulo']));
	$fecha_pago = htmlspecialchars(trim($_POST['fecha_pago']));
        $subtotal = htmlspecialchars(trim($_POST['subtotal']));
        $total = htmlspecialchars(trim($_POST['total']));
        $saldo = htmlspecialchars(trim($_POST['saldo']));
        $id_estado_deuda = htmlspecialchars(trim($_POST['id_estado_deuda']));
	
	$objcxp=new cxp;
	if ( $objcxp->insertar(array($desc_factura,$cedula_usuario,$id_proveedor,$id_articulo,$fecha_pago,$subtotal,$total,$saldo,$id_estado_deuda)) == true){
		echo 'Datos guardados';
	}else{
No se si esto es posible en PHP, no se si debo de utilizar algún tipo de Javascript para poder hacer esto posible, como comentaba anteriormente no tengo experiencia en esto y lo que he logrado crear ha sido con tutoriales y guias que he visto, pero a este punto no he encontrado información relacionada a mi pregunta de manera que me he estancado en el proyecto.

Mi duda principal es como puedo tomar más de un valor en una lista para que luego sean almacenados.

Agradecería cualquier tipo de ayuda, guía, código de ejemplo, video entre otros, para aclarar esta duda.

Gracias de antemano,
Saludos
  #2 (permalink)  
Antiguo 10/09/2015, 11:43
Avatar de xfxstudios  
Fecha de Ingreso: junio-2015
Ubicación: Valencia - Venezuela
Mensajes: 2.448
Antigüedad: 8 años, 9 meses
Puntos: 263
Respuesta: Como tomar más de un dato de una lista

ok amigo, lo que yo haria seria ir creando lineas dinamicamente a medida que necesite agrear articulos a mi factura, eso con jquery, luego las almacenaria en 2 tablas diferentes, por ejemplo, tabla factura y detalle factura, al momento de recuperarla haria un while que muestre los datos de detalle factura en la factura en pantalla.

tabla donde se generan las filas dinamicas
Código HTML:
Ver original
  1. <form action="guarda_factura.php" method="POST" enctype="multipart/form-data"><table id="tablatracking">
  2.         <tbody>
  3.          <tr>
  4.                 <td align="left"><input onclick="agregarArticulo()" type="button" value="Agregar Articulo" id="boton_agregar" class="btn btn-success"></td>
  5.           </tr>
  6.             <tr>
  7.               <td width="100" id="titulo">Articulo</td>
  8.               <td width="50"></td>
  9.                 <td width="33"></td>
  10.                 <td width="33"></td>
  11.             </tr>
  12.         </tbody>
  13.     </table>
  14.     <input type="submit" value="Registrar" id="boton_enviar" class="btn btn-warning" />
  15.   </form>

script que genera las filas al hacer clic en el boton:
Código Javascript:
Ver original
  1. // <![CDATA[
  2.  
  3. var posicionCampo = 1;
  4.  
  5.  
  6. function agregarArticulo() {
  7.  
  8.     nuevaFila = document.getElementById("tablatracking").insertRow(-1);
  9.  
  10.     nuevaFila.id = posicionCampo;
  11.  
  12.     nuevaCelda = nuevaFila.insertCell(-1);
  13.  
  14.     nuevaCelda.innerHTML = "<td><input type='text' size='50' name='Articulo[" + posicionCampo + "]' value='' placeholder=' Articulo...' required /></td>";
  15.    
  16.    
  17.     posicionCampo++;
  18.  
  19. }
  20.  
  21.  
  22. function eliminarUsuario(obj) {
  23.  
  24.     var oTr = obj;
  25.  
  26.     while(oTr.nodeName.toLowerCase() != 'tr') {
  27.  
  28.         oTr=oTr.parentNode;
  29.  
  30.     }
  31.  
  32.     var root = oTr.parentNode;
  33.  
  34.     root.removeChild(oTr);
  35.  
  36. }


con esto los recibo y los guardo en la base de datos:

Código PHP:
Ver original
  1. $articulo = array();
  2.  
  3. foreach($_POST['articulo'] as $key=>$value)
  4.     $articulo[]= $value;
  5.      
  6.  for($i=0; $i<count($articulo); $i++)
  7.  {
  8.  
  9. $result = $db->query("INSERT INTO detalle_factura (articulo) VALUE('$articulo[$i]')");

toda la data que ves alli es de muestra, adapta el codigo a tus variables
__________________
[email protected]
HITCEL
  #3 (permalink)  
Antiguo 10/09/2015, 12:54
 
Fecha de Ingreso: julio-2011
Mensajes: 220
Antigüedad: 12 años, 8 meses
Puntos: 72
Respuesta: Como tomar más de un dato de una lista

Cita:
Iniciado por asolano016 Ver Mensaje
Mi duda principal es como puedo tomar más de un valor en una lista para que luego sean almacenados.
cuando se envía un formulario PHP no recibe el atributo id, recibe el atributo name, en el caso de tu lista sería $_POST["inventario"]
Al tratase de un select múltiple lo que se debe hacer es agregar corchetes al atributo name de esta manera se enviarán todos los valores seleccionados como un array el cual se podrá recorrer con un bucle.

Código HTML:
Ver original
  1. <select name="inventario[]" id="id_articulo" size="5" multiple="multiple">
  #4 (permalink)  
Antiguo 10/09/2015, 13:30
 
Fecha de Ingreso: septiembre-2015
Mensajes: 2
Antigüedad: 8 años, 6 meses
Puntos: 0
Respuesta: Como tomar más de un dato de una lista

Les agradezco a ambos por la ayuda, gracias por la idea xfxstudios voy a tratar de implementarla en el sistema y te agradezco la aclaración lubtufano ahora se lo que jala es el name, muchas gracias

Etiquetas: dato, fecha, html, mysql, select, sql, tabla, tomar, usuarios, variable
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:07.