Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2006
    residenza
    Svizzera
    Messaggi
    32

    Problema con passaggio variabile da php a javascript

    Ciao a tutti,

    ho una lista (usando come framework Semantic UI) così composta:

    Codice PHP:
                            <div class="ui middle aligned divided celled list">
                                <?php do{?>
                                <div class="item">
                                    <div class="right floated content">
                                        <div class="ui button circular icon deleteFILE">
                                            <i class="icon erase"></i>
                                        </div>
                                    </div>
                                    <i class="large file pdf outline middle aligned icon"></i>
                                    <div class="content">
                                        <a class="header" href="view_docu.php?DocId=<?php echo $rs_get_docu['DocumentId'];?>">
                                            <?php echo $rs_get_docu['FileName'];?>
                                        </a>
                                        <div class="description">
                                            <?php echo $rs_get_docu['CreatorDateEU'];?> - <?php echo $rs_get_docu['FileType']." - ".$rs_get_docu['FileSize']." kb";?>
                                        </div>
                                    </div>
                            </div>
                                <script>//cancella file
                $(document).on('click', '.ui.button.circular.icon.deleteFILE', function (e) {
                    e.preventDefault();
                    $('.ui.modal.deleteFILE').modal({ onApprove: function () { window.location.replace("../edit/deleteFile.php?DocId=<?php echo $rs_get_docu['DocumentId'];?>&alertId=<?php echo $alertId;?>"); } }).modal('show');
                });</script>
                                

                                <?php } while ($rs_get_docu sqlsrv_fetch_array($sql_get_docu))?>


                            </div>
    Il problema è che lo script funziona ma cancella solo il primo (o l'ultimo record), immagino ciò succeda perché la variabile "
    codice:
    $rs_get_docu['DocumentId']
    " non cambia per ogni riga della lista.

    Come posso fare a passare la variabile corretta al pezzo di codice javascript?

    Grazie per l'aiuto

    Mau

  2. #2
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,771
    Ciao,

    immagino ciò succeda perché la variabile " codice:
    $rs_get_docu['DocumentId']
    " non cambia per ogni riga della lista.
    Più o meno come dici ma, più precisamente, un selettore jQuery, come il tuo, restituisce una collezione di elementi e, su questi, viene eseguito un ciclo per applicare vari eventuali metodi, come il click nel tuo caso.

    In altre parole, il ciclo avviene già via jQuery con un solo script, quindi è concettualmente sbagliato inserire quello script dentro il ciclo PHP perché, in tal caso, per ogni elemento si va a creare una esecuzione multipla della funzione applicata al click e chiaramente genera il problema che lamenti. Nel tuo caso va ad aprire un modal che presumo sia istanziabile una sola volta (altrimenti ti si aprirebbero tanti modal quanti sono gli elementi in questione); ad ogni modo è presumibile che questo sia relativo all'ultima funzione eseguita per quel click "multiplo", cioè quella relativa all'ultimo id del tuo ciclo PHP.

    Per risolvere devi spostare quello script fuori dal ciclo PHP.

    A questo punto potresti recuperare l'id direttamente via JavaScript; cioè prelevandolo, ad esempio, dall'attributo href dell'elemento cliccato (per riferirsi a tale elemento, la parola chiave è "this") per applicarlo quindi alla variabile DocId da passare in get.

    Noto però che vai a passare anche un'altra variabile relativa a $alertId, che non ho idea di cosa sia e dove tu l'abbia definita nel tuo PHP. Se anche questa è una variabile che dipende dal ciclo PHP, bisogna capire se puoi recuperarla come l'altra o se sia necessario, in questo caso, passarla in qualche modo da PHP.

    Per recuperare i parametri dall'href potresti adoperare una soluzione tipo quella proposta qui: http://stackoverflow.com/questions/1...href-in-jquery

    Ma, per tagliare la testa al topo, sarebbe meglio usare una soluzione più elegante: da PHP inserisci, le variabili che ti servono, dentro degli attributi data- per ogni singolo elemento <a> ; a quel punto potrai recuperarli facilmente da jQuery.

    Ad esempio, in PHP (dentro il ciclo) costruisci gli elementi <a> in questo modo:
    codice:
    <a class="header" href="view_docu.php?DocId=<?php echo $rs_get_docu['DocumentId'];?>" data-doc-id="<?php echo $rs_get_docu['DocumentId'];?>" data-alert-id="...." >....
    A questo punto potrai recuperare questi dati, dentro la funzione click, in questo modo:
    codice:
    $(document).on('click', '.ui.button.circular.icon.deleteFILE', function (e) {
      e.preventDefault();
      var docId = $(this).data('doc-id');
      var alertId = $(this).data('alert-id');
    Quindi passare queste variabili al resto del tuo script, con una cosa del genere:
    codice:
    window.location.replace("../edit/deleteFile.php?DocId="+docId+"&alertId="+alertId); } }).modal('show');
    Ricorda che lo script deve essere comunque tolto dal ciclo PHP. Potrai metterlo dopo il ciclo o nell'head del documento o alla fine del body; l'importante è che ti sia chiaro il motivo per cui non può essere come lo hai impostato tu.

    Buon lavoro.
    Ultima modifica di KillerWorm; 18-11-2016 a 21:54
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2006
    residenza
    Svizzera
    Messaggi
    32
    Quote Originariamente inviata da KillerWorm Visualizza il messaggio
    Ciao,

    Ad esempio, in PHP (dentro il ciclo) costruisci gli elementi <a> in questo modo:
    codice:
    <a class="header" href="view_docu.php?DocId=<?php echo $rs_get_docu['DocumentId'];?>" data-doc-id="<?php echo $rs_get_docu['DocumentId'];?>" data-alert-id="...." >....
    A questo punto potrai recuperare questi dati, dentro la funzione click, in questo modo:
    codice:
    $(document).on('click', '.ui.button.circular.icon.deleteFILE', function (e) {
      e.preventDefault();
      var docId = $(this).data('doc-id');
      var alertId = $(this).data('alert-id');
    Quindi passare queste variabili al resto del tuo script, con una cosa del genere:
    codice:
    window.location.replace("../edit/deleteFile.php?DocId="+docId+"&alertId="+alertId); } }).modal('show');
    Buon lavoro.
    Ciao, innanzitutto grazie per l'ottima spiegazione. Ho provato a fare come hai suggerito nel quote sopra. Ma ciò non passa i valori. Nell'url i dati vengono segnati così: deleteFile.php?DocId=undefined&alertId=undefined

    Cosa sbaglio?

    Ciao Mau

  4. #4
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,771
    Se quelle variabili risultano undefined potrebbe dipendere da Javascript o da HTML o da PHP.. impossibile capire dove sta il problema senza vedere l'intero contesto.

    Quello che posso consigliarti è di provare a fare qualche verifica andando a ritroso per verificare dove nasce il problema.

    Tieni presente che l'attributo data- è HTML5, quindi bisogna verificare che tu possa utilizzarlo nel tuo progetto.

    Il primo punto, quindi, è: Stai usando HTML5?

    Se la risposta è no, allora bisogna cambiare metodo.

    Se la risposta è sì, allora vai avanti con le verifiche lato client. Sulla web console (F12), del tuo browser, verifica intanto che non ci siano errori sintattici sul codice JavaScript o altre segnalazioni particolari.

    Se non ci sono errori, prova a mettere qualche alert (o console.log, come meglio preferisci), qua e là, per capire fin dove le variabili risultano undefined.

    Se sono undefined fin dall'inizio, allora il problema passa a PHP.
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

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 © 2025 vBulletin Solutions, Inc. All rights reserved.