Insertar ‘N’ veces de registros con los mismos Input

publicado por: Anonymous

Buenos Dias tengo un formulario donde los input se generan automáticamente con un for dependiendo de un numero asignado. En pocas palabras un formulario de 4 campos se genera n veces para ser guardada información para el mismo id.

El problema es que los input se generan con el mismo “name” y eso hace que al mandarlos a insertar solo se guarden una fila

La pregunta es como se le hace para meterlos a un arreglo y cambiarles el nombre al “name” del input para que se guarden los n numeros de inputs en una sola consulta

<?php  
    $cantidadI=3;
 ?>
<div id="contenedor">
    <form id="datos" action="inserta.php" method="post">
        <div id="tabla">
            <table>
                <?php for ($i=0; $i<=$cantidad; $i++) { 

                ?>
                <tr>
                    <td colspan="4" align="center">
                        Nombre:<input id="nombre" type="text" name="nombre[]" />
                    </td>
                </tr>
                <tr>
                    <td colspan="4" align="center">
                        No Fase:<input id="nofase" type="text" name="nofase[]" />
                    </td>
                </tr>
                <tr>
                    <td colspan="4" align="center">
                        Dias Duracion:<input id="diasdu" type="text" name="diasdu[]" />
                    </td>
                </tr>
                <tr>
                    <td colspan="4" align="center">
                        Precio:<input id="presio" type="text" name="presio[]" />
                    </td>
                </tr>
            <?php } ?>
            </table><br>
            </div>

        <input id="guarda" type="submit" value="Guardar" />
        <a href="#"><input id="cance" type="button" value="Cancelar" /></a>
    </form>
</div>

INSERT:

foreach ($_POST as $key => $values) {
$query = "INSERT INTO detalles(nombre, no_fase, dias_duracion, precio) VALUES ('".$values['nombre']."','".$values['nofase']."','".$values['diasdu']."','".$values['presio']."')";
mysql_query($query, $conexion);
}

Al hacer el print_r($_POST) me doy cuenta que solo toma

Array ( [nombre] => Array ( [0] => miguel [1] => miguel [2] => miguel ) [nofase] => Array ( [0] => 7 [1] => 7 [2] => 7 ) [diasdu] => Array ( [0] => 45 [1] => 45 [2] => 45 ) [presio] => Array ( [0] => 1236 [1] => 1236 [2] => 1236 ) )

solución

Una opción es crear un array multidimensional con el $i que utilizas en el for:

        <?php for ($i=0; $i<=3 ; $i++) { ?>
            <tr>
                <td colspan="4" align="center">
                    Nombre:<input id="nombre" type="text" name="usuario[<?= $i ?>][nombre]" />
                </td>
            </tr>
            <tr>
                <td colspan="4" align="center">
                    No Fase:<input id="nofase" type="text" name="usuario[<?= $i ?>][nofase]" />
                </td>
            </tr>
            <tr>
                <td colspan="4" align="center">
                    Dias Duracion:<input id="diasdu" type="text" name="usuario[<?= $i ?>][diasdu]" />
                </td>
            </tr>
            <tr>
                <td colspan="4" align="center">
                    Precio:<input id="presio" type="text" name="usuario[<?= $i ?>][presio]" />
                </td>
            </tr>
        <?php } ?>

Tendrías que modificar un poco tu forma de hacer el INSERT en la base de datos también:

foreach ($_POST['usuario'] as $key => $values) {
    $query = "INSERT INTO detalles(nombre, no_fase, dias_duracion, precio) VALUES ('".$values['nombre']."','".$values['nofase']."','".$values['diasdu']."','".$values['presio']."')";
    mysql_query($query, $conexion);
}

Por cierto te recomiendo que NO uses mysql_query, utiliza las funciones de mysqli.

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *