[PHP] Inserimento di più righe non funziona come mi aspetto...

gandalf1959

Utente Attivo
21 Nov 2013
208
1
18
Buongiorno a tutti.
Panorama:
database di ricette, diviso nelle tabelle:
- ricette (informazioni generali sulla ricetta, titolo, persone, campi statistici vari...)
- ricette_lezioni (se la ricetta viene utilizzata all'interno di una lezione di cucina inserisco il codice della lezione)
- ricette_ingredienti
- ricette_procedimenti
- ricette_foto

L'inserimento avviene attraverso diverse pagine in successione.Ogni pagina aggiorna una tabella.
Ho un problema sulle due pagine che gestiscono gli ingredienti.
La prima pagina è un form che permette di inserire le righe mano a mano che mi servono (visto che il numero di ingredienti nelle ricette non è definibile in partenza).
La pagina è la seguente (pagina1.php):
PHP:
<?php
session_start();
//se non c'è la sessione registrata
mb_internal_encoding('UTF-8');
if (!$_SESSION['autorizzato']) {
  echo "<h1>Area riservata, accesso negato.</h1>";
  echo "Per effettuare il login clicca <a href='index.php'><font color='blue'>qui</font></a>";
  die;
}
 
//Altrimenti Prelevo il codice identificatico dell'utente loggato

$cod = $_SESSION['cod']; //id cod recuperato nel file di verifica

$codicericetta = $_GET['codicericetta'];
$titolo = $_GET['titolo'];
?>
<!doctype html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Inserimento ingredienti</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
    <script type='text/javascript'>
    $(document).ready(function() {
        var currentItem = 1;
        AddRow(currentItem);

        $('#addnew').click(function(){
            currentItem++;
            AddRow(currentItem);
        });

        $('#removelast').click(function(){
            if (currentItem > 1) {
                var rowID = '#row'+currentItem
                $(rowID).remove();
                currentItem--;
                $('#items').val(currentItem);
            }
        });

        function AddRow(currentItem)
        {
            var strToAdd = NewRow(currentItem)
            $('#data').append(strToAdd);
            $('#items').val(currentItem);
        };

        function NewRow(currentItem)
        {
            text
='<tr id="row'+currentItem+'">'
+'<td><input name="idricetta[]" type="text" size="5" value="<? echo $codicericetta; ?>" readonly="readonly" /></td>'
+'<td><input name="ingrediente[]" type="text" size="50" /></td>'
+'<td><input name="quantita[]" type="text" size="4" /></td>'
+'<td><select name="misura[]">'
+'<option value="===" selected="selected">scegli unit&agrave; di misura</option>'
+'<option value="Kg">Kg</option>'
+'<option value="Gr">Gr</option>'
+'<option value="Lt">lt</option>'
+'<option value="ml">ml</option>'
+'<option value="N">N.</option>'
+'<option value="Bicchiere">Bicchiere/i</option>'
+'<option value="Cucchiai grandi">Cucchiai/o grande</option>'
+'<option value="Cucchiaino">Cucchiaino/i</option>'
+'<option value="Spicchi">Spicchio/i</option>'
+'<option value="Mazzetto">Mazzetto/i</option>'
+'<option value="Filetti">Filetto/i</option>'
+'<option value="Fette">Fetta/e</option>'
+'<option value="dl">dl</option>'
+'<option value="QB">QB</option>'
+'</select>'
+'</td>'
+'</tr>';
            return text;
        };
    });
    </script>
  </head>
  <body>
    <form name='myform' method='POST' action="pagina2.php">
      <table class="dd" width="100%" id="data">
        <tbody>
        </tbody>
      </table>
      
      <input type="hidden" name="items"      id="items"      value="0" />
      <input type="hidden" name="titolo"      id="titolo"      value="<? echo $titolo; ?>" />
      <input type="button" name="addnew"     id="addnew"     value="Add new item" />
      <input type="button" name="removelast" id="removelast" value="Remove last item" />
      <input type="submit" name="submit"                     value="Submit Values" />
      
    </form>
  </body>
</html>

Questa pagina prende un paio di dati dalla precedente (codice ricetta e titolo) e invia alla successiva le righe inserite.
Ecco il codice della pagina "ricevente" (pagina2.php):
PHP:
<?php
if(!empty($_POST['submit']))
{
    // ho ricevuto i dati perchè è stato cliccato il bottone 'Submit Values' della pagina 1

    // qui devo mettere il trattamento dei dati ricevuti ricordando che,

    $items = $_POST['items'];  // numero delle righe presenti
    $titolo = $_POST['titolo'];

    echo "ho ricevuto " . $items . " righe<br /><br />";

  //  $numricetta = $_POST['numricetta'];

    include 'connect3.php';

    for($r = 0; $r < $items; $r++)
    {
        $idricetta = $_POST['idricetta'][$r];
        $ingrediente = $_POST['ingrediente'][$r];
        $quantita    = $_POST['quantita'][$r];
        $misura      = $_POST['misura'][$r];

        echo "riga : " . $r . " ricetta : " . $idricetta . " ingrediente : " . $ingrediente . " quantita : " . $quantita . " misura : " . $misura . "<br /><br />";


        $connessione->query("INSERT INTO ricette_ingredienti VALUES ('', '$idricetta','$ingrediente', '$quantita', '$misura')");
        $connessione->close();
    }
}
else
{
    echo "NON HO RICEVUTO DATI CON il bottone 'Submit Values !'";
    die();
}

echo "<html>";
echo "Numero ricetta: " . $idricetta . "<br>";
echo "Titolo: ". $titolo . "<br>";
echo "<form method='post' action='inserimentoricette2.php'>";
echo "<input name='idricetta' type='hidden' size='10' value='$idricetta' />";
echo "<input name='titoloric' type='hidden' size='10' value='$titolo' />";
echo "<input name='conferma' type='submit' id='conferma' value=' Inserire il Procedimento >> ' />";
echo "</form>";
echo "</html>";
?>

Problema:
Nella tabella ricette_ingredienti trovo solo la prima riga...

Dove sbaglio?

Grazie per i suggerimenti
 
qui scrivi la riga e chiudi la connessione
PHP:
        $connessione->query("INSERT INTO ricette_ingredienti VALUES ('', '$idricetta','$ingrediente', '$quantita', '$misura')");
        $connessione->close();
meglio spostare la chiusura della connessione all'esterno e a seguire il "for"
 
In effetti così è tutto a posto...
E pensare che ho letto e riletto il tutto 200 volte...

Grazie.
 

Discussioni simili