Insert/update form multiriga

di il
1 risposte

Insert/update form multiriga

Salve sono nuova del forum e sono neofita di php.

Sto cercando di realizzare un form dove attraverso un pulsante add si possono inserire piú righe per poi fare l'inserimento multiplo di quello 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.


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

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();
    
    }
 }

il javascript per aggiungere più righe al form

<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>

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

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();

1 Risposte

Devi accedere o registrarti per scrivere nel forum
1 risposte