Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it L'avatar di Fayble
    Registrato dal
    May 2002
    Messaggi
    141

    Update MySQL con jQuery

    Ciao a tutti,
    utilizzo jQuery per fare un UPDATE su una tabella MySQL, utilizzando ajax (http://docs.jquery.com/Ajax/jQuery.ajax).

    Al fine di visualizzare il risultato dell'operazione di UPDATE, ho utilizzato "beforeSend", "error" e "success" correttamente, ma non capisco se e come è possibile sapere quando la query non ha fatto alcuna modifica (si ricade nel "success")!

    E' possibile?


  2. #2
    Utente di HTML.it L'avatar di m4rko80
    Registrato dal
    Aug 2008
    residenza
    Milano
    Messaggi
    2,654
    Con ajax esegui del php diciamo e nel succes puoi vedere l'esito della pagina php nel formato ch vuoi, guardando la documentazione jquery puoi avere dati di tipo string html o altro(non ricordo a memoria). Dovresti quindi tu dalla pagina php chiamata fare un contrllo per l'update e ad esempio un echo 'OK' se tutto buon fine. A quel punto nel succes il dato tornato sarebbero appunto quello. E' un idea poi vedi tu.

  3. #3
    Utente di HTML.it L'avatar di Fayble
    Registrato dal
    May 2002
    Messaggi
    141
    Grazie per la risposta. Il problema è che un UPDATE che non ha errori, restituisce un valore "success" anche se non aggiorna alcuna riga.

    A me serve verificare che l'UPDATE aggiorni realmente il dato. Lo scenario è una semplice tabella web con N righe che visualizzano le N righe di una tabella MySQL. La tabella si chiama ORDINI, ha tre campi: ID, nome e prenota.

    La tabella web ha, per ogni riga, il pulsante (immagine) "prenota", che è la chiamata AJAX che fa "UPDATE ordini SET prenota = username_che_prenota WHERE id=id_riga AND prenota = 0" (beforeSend => visualizza immagine di loading, success => visualizza immagine "cancella prenotazione"). A e B caricano la tabella, A prenota gli ID 3, 5 e 8; B vede la stessa tabella e prenota 2 (OK), 4 (OK) e 5 (già prenotato da A!). In questo ultimo caso, però, poichè la query da success (non è sbagliata ma non fa nulla: UPDATE ordini SET prenota=B WHERE id=5 AND prenota = 0; ma prenota non è 0 ma A), B crede di aver prenotato la riga (appare il pulsante per cancellare la prenotazione), invece devo dirgli (alert o immagine che evidenzia il warning) che è stata già prenotata.

    Qualche idea? Grazie.


  4. #4
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    e' lato server che devi farti restituire altro

  5. #5
    Utente di HTML.it L'avatar di Fayble
    Registrato dal
    May 2002
    Messaggi
    141
    Xinod, grazie per la risposta. Potresti cortesemente esemplificarla?
    Cioè, concretamente, cosa sbaglio, cosa manca, cosa mi sfugge?


  6. #6
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    In questa sezione non si discute di linguaggi lato server o sql... ti sposto su PHP, che vedo tu frequenti.
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

  7. #7
    Utente di HTML.it L'avatar di r1cky`
    Registrato dal
    Feb 2007
    Messaggi
    432
    Codice PHP:
    <?php

    $query
    mysql_query(....);
    if(
    mysqli_affected_rows($query) > 0)
        echo 
    'OK';
        else
        echo 
    'Errore';
        
    ?>
    codice js:

    codice:
     $.ajax({
       type: "POST",
       url: "some.php",
       data: "name=John&location=Boston",
       dataType: "text",
       success: function(msg){
         alert(msg);
       }
     });
    Ciao!

  8. #8
    Utente di HTML.it L'avatar di Fayble
    Registrato dal
    May 2002
    Messaggi
    141
    Grazie per la risposta. Funziona tutto quasi perfettamente adesso, quasi perché IE 7 e 8 presentano un "bug" col codice che segue:
    Codice PHP:
    $('a.prenota_id').live("click",(function(e) {
        
    e.preventDefault();
        var 
    parent = $(this).parent();
        var 
    ImgSrcValue = $(this).children().attr('src');
        
        
    // [IMG] Codice che "decide" quale immagine mostrare dopo la chiamata ajax
        // Se prenoti seleziona ImgA, se elimini prenotazione seleziona ImgB
        // [/IMG]
        
        
    $.ajax({
            
    type'get',
            
    url'script.php',
            
    data'task=prenota&id=' parent.attr('id').replace('prenota_',''),
            
    dataType'html',
            
    beforeSend: function() {
                
    parent.html('[img]/img/ajax-loader.gif[/img]');
            },
            
    error: function() {
                
    parent.html('[img]/img/remove.png[/img]');
            },
            
    success: function(data) {
                var 
    serverData = $("#serverData"data).html();
                if (
    serverData)
                    $(
    '#op_' parent.attr('id').replace(prenota_','')).hide('blind','slow',alert(serverData));
                else parent.html('
    [url="?task=prenota&amp;id=' + parent.attr('id').replace('prenota_','') + '"][img]' + imgSrc +'[/img][/url]');                        
                                                }
        });
    })); 
    Il "bug" è alla riga:
    Codice PHP:
    var serverData = $("#serverData"data).html(); 
    Succede che l'immagine ajax-loader.gif si "ferma" e solo muovendo il mouse si carica l'immagine successiva. Poichè tutto deve poter funzionare in assenza di Javascript, viene restituita una discreta quantità di codice HTML.
    All'interno del quale, se la query di UPDATE fallisce perché un altro utente ha prenotato un istante prima, genero anche il div serverData e recupero l'ALERT, che è il messaggio del server.

    Pare che discrete quantità di html restituite inducano il freeze su IE, non su FF, Opera, Chrome e Safari. Qualcun sa se siste un altro modo di ottenere lo stesso risultato evitando il bug, magari ottimizzando il codice o utilizzando una logica diversa?

    Grazie.

  9. #9
    Utente di HTML.it L'avatar di r1cky`
    Registrato dal
    Feb 2007
    Messaggi
    432
    Io sinceramente non ho ben capito cosa fa questa riga...

    Codice PHP:
    var serverData = $("#serverData"data).html(); 

  10. #10
    Utente di HTML.it L'avatar di Fayble
    Registrato dal
    May 2002
    Messaggi
    141
    Dunque...

    "data" è la risposta html della chiamata ajax, "serverData" è un div che creo nella pagina HTML restituita, quando la richiesta di prenotazione non può essere eseguita poiché già effettuata da un altro operatore.
    Cioè, mediante PHP, dopo aver fatto una query che rivela che la prenotazione è stata già fatta, creo in un punto opportuno della pagina:
    Codice PHP:
    <div id="#serverData">Prenotazione già effettuata da NOME COGNOME</div
    Quindi la riga serve a estrapolare "Prenotazione già effettuata da NOME COGNOME" dall'HTML restituito. Se esiste il div serverData, il div op_ID viene nascosto (non puoi più prenotare!).


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.