Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2021
    Messaggi
    4

    Ho dei form stampati tramite ciclo while, come posso salvare le informazioni al suo interno con jquery

    Ciao a tutti, premetto di essere alle prime armi con Php ma soprattutto con jQuery.
    Sto stampando in un ciclo while diversi form che serviranno per inserire e salvare le presenze lavorative, per far questo ho bisogno di differenziare il campo ID e ho pensato di usare l'id del database.
    Tuttavia nel momento in cui creo la variabile "form" in JS che utilizzerò poi per la validazioni e per inserire i dati nel Database non posso mettere l'id dinamico perchè prende sempre l'ultimo.
    Come posso fare per salvare un form alla volta?
    spero di essere stato chiaro. Grazie mille in anticipo a chi mi aiuterà.
    ---HTML---
    <td style="text-align: center;">
    <form action="#" id="form_add_presenze<?= $id ?>" method="POST" class="form-inline">
    <input type="hidden" name="idtab_dipendente" value="<?= $id ?>" />
    <div class="input-group">
    <input type="text" style="width: 105px" readonly class="form-control date-picker" name="data" placeholder="dd-mm-yyyy" id="data" value="<? echo $oggi; ?>" />
    </div>
    <div class="form-group">
    <select class="form-control" name="ore_lavoro" id="ore_lavoro" style="width: 105px; margin: 0 10px 0 10px;">
    .......
    </select>
    </div>
    <a href="javascript:void(0);" type="submit" onclick="$('#form_add_presenze<?= $id ?>').submit();" style="padding: 3px;" class="btn green button-submit">
    Salva
    </a>
    </form>
    </td>

    ---JS---
    var form = $('#form_add_presenze');
    ....validazione....
    $('#insert_presenze').modal('hide');

    var form_data = new FormData(form);

    $.ajax({
    type: "POST",
    url: "functions/insert_presenze.php",
    data: form_data,
    dataType: "json",
    processData: false,
    contentType: false,
    success: function(data) {

  2. #2
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,691
    Ciao e benvenuto, a grandi linee, dovresti inserire lo script di validazione dentro una funzione che puoi richiamare, ad esempio, al click dei submit (o, meglio, sull'evento submit dei vari form). Alla funzione puoi quindi passare, come argomento, l'id del form o il riferimento del form stesso (usando this), in modo da poterlo "identificare" dentro la funzione.


    Un esempio di massima in jQuery:

    codice HTML:
    <form action="#" method="POST" class="form-inline">
       <input type="hidden" name="idtab_dipendente" value="1"/>
       [Form 1: altri controlli]
       <input type="submit" value="Salva">
    </form>
    
    <form action="#" method="POST" class="form-inline">
       <input type="hidden" name="idtab_dipendente" value="2"/>
       [Form 2: altri controlli]
       <input type="submit" value="Salva">
    </form>
    
    
    <script>
       $('.form-inline').submit(validazioneForm);   // Applico un listener per tutti i form selezionati tramite una classe
       
       function validazioneForm(event){
          event.preventDefault();                   // Inibisco l'azione submit di default
          
          const form = this;                        // In questo contesto il "this" fa riferimento al form relativo 
                                                    // all'evento submit a cui è applicata questa funzione come listener
          
          const form_data = new FormData(form);     // Resto del codice, chiamata AJAX
          $.ajax(/* ... */);
       }
    </script>


    PS:

    Senza offesa, quel poco di codice che hai riportato mi sembra impostato in modo alquanto "artigianale" e presenta qualche errore di validazione:

    - vedo che vai a costruire i form dentro dei <td>, voglio sperare che non si tratti di un layout tabellare;

    - vedo che stai usando parecchio stile in linea sui tag; è buona pratica invece tenere separate, per quanto possibile, la presentazione (style) dalla struttura html, magari organizzando meglio il css, così da avere un codice più pulito;

    - vedo che stai definendo i gestori di evento direttamente sui tag (vedi onclick="..."); anche in questo caso, come per la presentazione, è buona pratica tenere separata l'azione dalla struttura, magari impostando meglio l'applicazione di listener via JavaScript/jQuery;

    - non è consentito l'uso del valore "submit" per l'attributo "type" negli elementi <a>, questo genera un errore di validazione; perché non usare invece un button o un input con type=submit?

    - gli "id" html devono necessariamente essere univoci; se il ciclo crea più form nella stessa pagina e con la stessa struttura di quello postato, assicurati di non ripetere id uguali (vedi id="data" e id="ore_lavoro"), se fosse così avresti degli errori di validazione; magari è preferibile usare delle classi così da poter applicare meglio anche lo style in modo separato.
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2021
    Messaggi
    4
    Grazie mille per il tuo aiuto, adesso ho risolto!
    comunque hai perfettamente ragione sulla qualità di scrittura del codice, putroppo mi è stato passato così e non dovevo assolutamente fare altro che aggiungere questa impostazione, senza fare altri cambiamenti (io lo avrei riscritto tutto).. ci ho messo giorni a capirlo e a destreggiami per fare alcune modifiche

  4. #4
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,691
    adesso ho risolto!
    Bene

    sulla qualità di scrittura del codice, putroppo mi è stato passato
    Ti capisco


    Buon proseguimento
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

Tag per questa discussione

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.