Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    7

    Aggiornamento mysql con ajax

    Buongiorno a tutti,
    Avrei la necessità di effettuare aggiornamenti asinscroni su db mysql con input type interno ad un cliclo while e di fatto il record aggiornato è sempre il primo :
    Faccio così:
    <?
    // Connessione
    $q=mysql("$NOME_DBASE","SELECT * FROM tabella order by ID") or die(mysql_error());
    while ($row = mysql_fetch_row($q)) {
    $ID=$row['0'];
    $QUANTITA=$row['1'];
    ?>
    <input name="quantita" type="text" value="<? echo $QUANTITA;?>" size="3" maxlength="5" class="button2" onchange="salvatra();" id="quantita" >

    <script>
    function salvatra(){
    $('#loader').show();
    var QQ=$('#quantita').val();
    var IDRIGO='<? echo $ID; ?>';

    //ESECUZIONE DELLA CHIAMATA AJAX
    $.ajax(
    {
    type: 'POST',
    url: '<? echo "insert.php"; ?>',
    data: {QQ:QQ, N:IDRIGO},
    success: function(data){
    if(data.error==1){
    alert("Errore");
    }else{
    alert("Registrazione ok "+IDRIGO);
    }
    $('#loader').show();
    $('#invia').attr('disabled',false);
    },
    complete: function(data){},
    failure: function(data){
    alert("Errore nella chiamata ajax");
    $('#loader').hide();
    $('#invia').attr('disabled',false);
    }
    });

    <script>
    <? } ?>

    ======================

    Grazie

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    gli id devono essere univoci, se hai più id uguali nella pagina viene preso in considerazione solo il primo elemento con quell'id

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    7
    Quote Originariamente inviata da Vindav Visualizza il messaggio
    gli id devono essere univoci, se hai più id uguali nella pagina viene preso in considerazione solo il primo elemento con quell'id
    ma id è univoco, nel senso che in php stampo a video ed è così rigo per rigo.
    Probabilmente quando chiamo la funzione il ciclo è già chiuso e memorizzo la variabile solo il primo elemento?

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    no che non è univoco, usi sempre lo stesso id, basta guardare il codice generato da php.

    edit: inoltre il ciclo php va chiuso dopo l'input

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    7
    Scusa,

    $q=mysql("$NOME_DBASE","SELECT * FROM tabella order by ID") or die(mysql_error());
    while ($row = mysql_fetch_row($q)) {
    $ID=$row['0'];
    echo $ID;
    }

    $ID è univoco


    edit: inoltre il ciclo php va chiuso dopo l'input ... è vero ma tante prove

    forse faccio un pò di confusione con l'id dell'input

    come lo faresti tu
    Grazie


  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    stai facendo confusione, se tu guardi il codice generato della pagina( tasto destro-> vedi html/sorgente) vedrai che tutti gli input hanno lo stesso id, questo crea problemi al tuo script in quanto il metodo getElementById o l'equivalente jquery $('#id') recupera solo il primo elemento con quell'id. Detto questo puoi anche fregartene e fare riferimeno alla classe invece che all'id, diversamente dall'id la classe puo anche essere ripetuta su più elementi html. Ecco come lo farei io:

    codice:
    <? 
    // Connessione
    $q=mysql("$NOME_DBASE","SELECT * FROM tabella order by ID") or die(mysql_error());
        while ($row  =  mysql_fetch_row($q)) {
       $ID=$row['0'];
       $QUANTITA=$row['1'];
    ?>
      <input name="quantita" type="text" value="<? echo  $QUANTITA;?>" size="3" maxlength="5" class="button2">
    <? } ?>
    
    <script>
    $(".button2").change(function(){
                $('#loader').show();
                var QQ=$(this).val();
                var IDRIGO='<? echo $ID; ?>';
                        
                            //ESECUZIONE DELLA CHIAMATA AJAX
                $.ajax(
                    {
                        type: 'POST',
                        url: '<? echo "insert.php"; ?>',
                        data: {QQ:QQ, N:IDRIGO},
                        success: function(data){
                            if(data.error==1){
                                alert("Errore");
                            }else{
                                alert("Registrazione ok "+IDRIGO);
                            }
                            $('#loader').hide();
                            $('#invia').attr('disabled',false);
                        },
                        complete: function(data){},
                        failure: function(data){
                            alert("Errore nella chiamata ajax");
                            $('#loader').hide();
                            $('#invia').attr('disabled',false);
                        }
                });
    });
    <script>

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2004
    Messaggi
    7
    Perfettissimo, unica cosa è che se lo lascio fuori dal ciclo l' IDRIGO è l'ultimo record trovato se lo metto dentro il ciclo chiaramente modifica ogni riga che abbia .button2

    Ho fatto cosi:

    <input name="quantita" type="text" value="<? echo $QUANTITA;?>" size="3" maxlength="5" class="<? echo $ID; ?>">


    <script>
    $(".<? echo $ID; ?>
    ").change(function(){


    dentro il ciclo per avere id chiamata univoca

    Non so se la cosa sia perfettamente "legale" ma funziona.

    Ti ringrazio tantissimo per la dritta

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    hai ragione non mi ero accorto della variabile $id nel js, cmq come hai fatto non è coretto perche se inserisci lo script dentro il ciclo quest'ultimo viene ripetuto piu volte. Una soluzione migliore potrebbe essere questa:

    codice:
    <? 
    // Connessione
    $q=mysql("$NOME_DBASE","SELECT * FROM tabella order by ID")ordie(mysql_error());
        while($row  =  mysql_fetch_row($q)){
       $ID=$row['0'];
       $QUANTITA=$row['1'];
    ?>
      <input name="quantita" type="text" value="<? echo  $QUANTITA;?>" size="3" maxlength="5" class="button2" id="<? echo $ID; ?>"><?}?>
    
    <script>
    $(".button2").change(function(){
                $('#loader').show();
                var QQ=$(this).val();
                var IDRIGO=$(this).prop("id");
                        
                            //ESECUZIONE DELLA CHIAMATA AJAX
                $.ajax(
                    {
                        type: 'POST',
                        url: '<? echo "insert.php";?>',
                        data: {QQ:QQ, N:IDRIGO},
                        success: function(data){
                            if(data.error==1){
                                alert("Errore");
                            }else{
                                alert("Registrazione ok "+IDRIGO);
                            }
                            $('#loader').hide();
                            $('#invia').attr('disabled',false);
                        },
                        complete: function(data){},
                        failure: function(data){
                            alert("Errore nella chiamata ajax");
                            $('#loader').hide();
                            $('#invia').attr('disabled',false);
                        }
                });
    });
    <script>

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.