Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    INSERT/Update form multiriga

    Salve

    Sto cercando di realizzare un form dove attraverso un pulsante add si possono inserire pi� righe per poi fare l'inserimento multiplo di ci� che si � inserito e devo avere la possibilit� di andare ad aggiornare i campi gi� presenti nel db.

    Questo � il codice che ho fatto fino ad ora, riesco ad aggiungere un singolo record, ma mi da errore sull'inserimento multiplo e se voglio fare l'update funziona solo sull'ultimo campo inserito, mentre dovrei poter modificare tutti i campi dei vari record.


    codice:
    function datazione() {
        global $conn;
        $id = $_GET['id'];
        $out='<table id="data" class="table display">';
        $out.='<thead>';
        $out.='<tr><th>Generica</th><th>Specifica</th><th>Da</th><th>Secolo</th><th>A</th><th>Secolo</th><th>Descrizione</th><th>Definizione</th></tr>';
        $out.='</thead>';
        $out.='<tbody>'; 
        $sql = 'SELECT *, secoli1.secolo AS data_in, secoli2.secolo AS data_fin, prefisso1.pref AS pref_in, prefisso2.pref AS pref_fin, datazione.id AS iddata FROM datazione  ';
        $sql .= 'INNER JOIN siti_archeo ON datazione.id_sito = siti_archeo.id ';
        $sql .= 'INNER JOIN data_gen ON datazione.id_data_gen = data_gen.id ';
        $sql .= 'INNER JOIN data_spec ON datazione.id_data_spe = data_spec.id ';
        $sql .= 'INNER JOIN prefisso AS prefisso1 ON datazione.id_pref1 = prefisso1.id ';
        $sql .= 'INNER JOIN prefisso AS prefisso2 ON datazione.id_pref2 = prefisso2.id ';
        $sql .= 'INNER JOIN secoli AS secoli1 ON datazione.id_sec_in = secoli1.id ';
        $sql .= 'INNER JOIN secoli AS secoli2 ON datazione.id_sec_fin = secoli2.id ';
        $sql .= 'INNER JOIN ogtd ON datazione.id_ogtd = ogtd.id ';
        $sql .= 'INNER JOIN ogtt ON datazione.id_ogtt = ogtt.id ';
        $sql .= 'WHERE datazione.id_sito = '.$id.' ORDER BY iddata ASC';
        $stmt = $conn->prepare($sql);
        $stmt->execute();
      $out.='<form name="info_datazione" action="?azione=salva_datazione" method="post" enctype="multipart/form-data">';
        $out.='<input type="hidden" id="id" name="id" value="'.$id.'">';
        $out.='<input type="hidden" id="azione" name="azione" value="salva_datazione">';
        while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
        $out.='<input type="hidden" id="iddata" name="iddata" value="'.$row['iddata'].'">';
        $out.='<tr>';
        $out.='<td>'.$row['iddata'].'</td>';
        $out.='<td><select id="data_gen" name="data_gen">
        <option value="'.$row['id_data_gen'].'" selected="selected">'.$row['n_data_gen'].'</option>
        '.data_gen ().'
        </select> </td>';
        $out.='<td><select id="data_spec" name="data_spec">
        <option value="'.$row['id_data_spe'].'" selected="selected">'.$row['n_data_spec'].'</option>
        '.data_spec ().'
        </select> </td>';
        $out.='<td><select id="pref" name="pref">
        <option value="'.$row['id_pref1'].'" selected="selected">'.$row['pref_in'].'</option>
        '.prefisso ().'
        </select> </td>';
        $out.='<td><select id="secolo" name="secolo">
        <option value="'.$row['id_sec_in'].'" selected="selected">'.$row['data_in'].'</option>
        '.secoli ().'
        </select> </td>';
        $out.='<td><select id="pref_a" name="pref_a">
        <option value="'.$row['id_pref2'].'" selected="selected">'.$row['pref_fin'].'</option>
        '.prefisso ().'
        </select> </td>';
        $out.='<td><select id="secolo_a" name="secolo_a">
        <option value="'.$row['id_sec_fin'].'" selected="selected">'.$row['data_fin'].'</option>
        '.secoli ().'
        </select> </td>';
        $out.='<td><select id="ogtd" name="ogtd">
        <option value="'.$row['id_ogtd'].'" selected="selected">'.$row['nome_ogtd'].'</option>
        '.ogtd ().'
        </select> </td>';
        $out.='<td><select id="ogtt" name="ogtt">
        <option value="'.$row['id_ogtt'].'" selected="selected">'.$row['nome_ogtt'].'</option>
        '.ogtt ().'
        </select> </td>';
        $out.='</tr>';
        }
        $out.='</tbody>';
        $out.='</table>';
        $out.='<div class="col-md-12 col-xs-12">';
        $out.='<div class="col-md-6 col-xs-12"><input name="sub" type="submit"  value="Salva cronologia"/> </div>';
        $out.='<div class="col-md-6 col-xs-12"><input type="button" id="addnew" name="addnew" value="Aggiungi cronologia" /><input type="hidden" id="items" name="items" value="1" /> </div>  ';
        $out.='</div>';
        $out.='</form>';
        return($out);
    }
    e l'action salva
    codice:
    function salva_datazione() {
    global $conn; 
    $iddata = $_POST['iddata'];
     $id = $_POST['id'];    
     $items = $_POST['items'];
         for($r = 1; $r < $items; $r++)  {
           $data_gen = $_POST['data_gen'.$r];
           $data_spec = $_POST['data_spec'.$r];
           $pref = $_POST['pref'.$r];
           $secolo = $_POST['secolo'.$r];
           $pref_a = $_POST['pref_a'.$r];
           $secolo_a = $_POST['secolo_a'.$r];
           $ogtd = $_POST['ogtd'.$r];
           $ogtt = $_POST['ogtt'.$r];
             $sql = 'INSERT INTO datazione (id_sito, id_data_gen, id_data_spe, id_pref1, id_sec_in, id_pref2, id_sec_fin, id_ogtd, id_ogtt) VALUES('.$id.', '.$data_gen.', '.$data_spec.', '.$pref.', '.$secolo.', '.$pref_a.', '.$secolo_a.', '.$ogtd.', '.$ogtt.')  ';
            $stmt = $conn->prepare($sql);
            $stmt->execute();
         }
    if ($iddata == $iddata ){
    $data_gen = $_POST['data_gen'];
    $data_spec = $_POST['data_spec'];
    $pref = $_POST['pref'];
    $secolo = $_POST['secolo'];
    $pref_a = $_POST['pref_a'];
    $secolo_a = $_POST['secolo_a'];
    $ogtd = $_POST['ogtd'];
    $ogtt = $_POST['ogtt'];
        $sql='UPDATE datazione SET id_sito=:id, id_data_gen =:data_gen, id_data_spe =:data_spec, id_pref1 =:pref, id_sec_in =:secolo, id_pref2 =:pref_a, id_sec_fin =:secolo_a, id_ogtd =:ogtd, id_ogtt =:ogtt';
            $sql .=' WHERE datazione.id=:iddata ';
            $stmt = $conn->prepare($sql);
            $stmt->bindParam(':iddata',$iddata,PDO::PARAM_INT);
            $stmt->bindParam(':id',$id,PDO::PARAM_INT);
            $stmt->bindParam(':data_gen',$data_gen,PDO::PARAM_INT);
            $stmt->bindParam(':data_spec',$data_spec,PDO::PARAM_INT);
            $stmt->bindParam(':pref', $pref, PDO::PARAM_INT);
            $stmt->bindParam(':secolo', $secolo, PDO::PARAM_INT);
            $stmt->bindParam(':pref_a', $pref_a, PDO::PARAM_INT);
            $stmt->bindParam(':secolo_a', $secolo_a, PDO::PARAM_INT);
            $stmt->bindParam(':ogtd', $ogtd, PDO::PARAM_INT);
            $stmt->bindParam(':ogtt', $ogtt, PDO::PARAM_INT);
            $stmt->execute();
        
        }
     }
    questo � il javascript per aggiungere pi� righe al form

    codice:
    <script type="text/javascript">
    //<![CDATA[
     $(document).ready(function() {
      var currentItem = 1;
      $('#addnew').click(function(){
       currentItem++;
       $('#items').val(currentItem);
    var strToAdd = '<?php echo '<tr><td><select id="data_gen'.item().'" name="data_gen'.item().'"><option value="" selected="selected"></option>'.data_gen ().'</select></td><td><select id="data_spec'.item().'" name="data_spec'.item().'"><option value="" selected="selected"></option>'.data_spec ().'</select></td><td><select id="pref'.item().'" name="pref'.item().'"><option value="" selected="selected"></option>'.prefisso ().'</select></td><td><select id="secolo'.item().'" name="secolo'.item().'"><option value="" selected="selected"></option>'.secoli ().'</select></td><td><select id="pref_a'.item().'" name="pref_a'.item().'"><option value="" selected="selected"></option>'.prefisso ().'</select></td><td><select id="secolo_a'.item().'" name="secolo_a'.item().'"><option value="" selected="selected"></option>'.secoli ().'</select></td><td><select id="ogtd'.item().'" name="ogtd'.item().'"><option value="" selected="selected"></option>'.ogtd ().'</select></td><td><select id="ogtt'.item().'" name="ogtt'.item().'"><option value="" selected="selected"></option>'.ogtt ().'</select></td></tr>'?>';
       $('#data').append(strToAdd);
       
      });
     });
    
    //]]>
    </script>
    In questo modo quando aggiungo una riga e compilo il form e salvo mi salva il dato nel db, non funziona per� l'inserimento multiplo. E per quanto riguarda l'aggiornamento mi aggiorna solo l'ultimo campo inserito


    Per l'azione di salvataggio ho provato anche cosi, ma non funziona proprio

    codice:
    function salva_datazione() {
    global $conn;
    $id = $_POST['id']; 
    $iddata = $_POST['iddata'];
    $data_gen = $_POST['data_gen'];
    $data_spec = $_POST['data_spec'];
    $pref = $_POST['pref'];
    $secolo = $_POST['secolo'];
    $pref_a = $_POST['pref_a'];
    $secolo_a = $_POST['secolo_a'];
    $ogtd = $_POST['ogtd'];
    $ogtt = $_POST['ogtt'];
    $sql = 'INSERT INTO datazione (id, id_sito, id_data_gen, id_data_spe, id_pref1, id_sec_in, id_pref2, id_sec_fin, id_ogtd, id_ogtt) VALUES(:iddata, :id, :data_gen, :data_spec, :pref, :secolo, :pref_a, :secolo_a, :ogtd, :ogtt)
        ON CONFLICT (id) DO UPDATE SET id_sito=:id, id_data_gen =:data_gen, id_data_spe =:data_spec, id_pref1 =:pref, id_sec_in =:secolo, id_pref2 =:pref_a, id_sec_fin =:secolo_a, id_ogtd =:ogtd, id_ogtt =:ogtt';
            $stmt = $conn->prepare($sql);
            $stmt->bindParam(':iddata',$iddata,PDO::PARAM_INT);
            $stmt->bindParam(':id',$id,PDO::PARAM_INT);
            $stmt->bindParam(':data_gen',$data_gen,PDO::PARAM_INT);
            $stmt->bindParam(':data_spec',$data_spec,PDO::PARAM_INT);
            $stmt->bindParam(':pref', $pref, PDO::PARAM_INT);
            $stmt->bindParam(':secolo', $secolo, PDO::PARAM_INT);
            $stmt->bindParam(':pref_a', $pref_a, PDO::PARAM_INT);
            $stmt->bindParam(':secolo_a', $secolo_a, PDO::PARAM_INT);
            $stmt->bindParam(':ogtd', $ogtd, PDO::PARAM_INT);
            $stmt->bindParam(':ogtt', $ogtt, PDO::PARAM_INT);
            $stmt->execute();
    }

  2. #2
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Quasi sicuramente sbagli con i nomi degli input. Io farei così:

    codice:
    function datazone(){
         ...
         $sql = ..
         ...
         while($row = ...) {
            ...
            <select name="update[<?php echo $row['iddata'] ?>]['data_gen']" id="data_gen">
               <option>...</option>
                ...
            </select>
     
           <select name="update[<?php echo $row['iddata'] ?>]['data_spec']" id="data_spec">
               <option>...</option>
                ...
            </select>
           ...
         }
     }
    Nuovo item:
    codice:
    ...
     var currentItem = 0;
     $('#addnew').click(function(){
        currentItem++;
        var row = '<tr><td><select id=...  name=\'insert[' +currentItem +  '][data_gen]\' ><option> .... ';
        $('#data').append(row);
     }
    Salvataggio:

    codice:
    ...
     foreach($_POST['update'] as $id => $values){
         $sql = 'UPDATE datazione set data_ge = :data_gen, .... WHERE iddat = :iddata ';
         ...
         $stmt->bindParam(':iddata', $id, PDO::PARAM_INT);
         $stmt->bindParam(':data_gen', $values['data_gen'], PDO::PARAM_INT);
         ...
     }
     
     foreach($_POST['insert'] as  $values){
         $sql = 'INSERT INTO datazione(id, ...) VALUES (:data_gen, .... )';
         ...
         $stmt->bindParam(':data_gen', $values['data_gen'], PDO::PARAM_INT);
         ...
     }
    PS: Non ho capito come mai i dati tipo data_gen, li prendi da una join ma poi li salvi sulla tabella
    Ultima modifica di boots; 14-07-2020 a 08:55

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.