-2
votes

Comment puis-je exécuter un script PHP lorsqu'un utilisateur clique sur un lien sans rediriger vers cette page PHP particulière et téléchargez un fichier MP3 en même temps?

J'ai un fichier MP3 dont les téléchargements ne comptent et mettent à jour bien dans une base de données MySQL lorsque j'exécute mon script PHP en allant à l'adresse des scripts dans la barre d'adresse comme celle-ci https://groupkse.net/music_files/countdownloads.php?id=3 . Mon problème est que je souhaite exécuter ce script php sans rediriger mon navigateur à cet endroit, lorsqu'un lien est cliqué pour télécharger ce MP3. NB: Le MP3 est dans le même répertoire avec le comteDownloads.php et la page contenant le lien se trouve dans un répertoire différent, mais sur le même serveur, c'est-à-dire https://groupkse.net/songreleasehtml/megamuquaranine.php

code de CountDownloads.php est ci-dessous: P>

<a href="../music_files/mu_quarantine.mp3" download="file.mp3" title="Download song" class="downloadButton" id="dButton">Download MP3</a>


6 commentaires

Utilisez JavaScript et préventiveDefault ()


Bonjour Nikistag, je ne suis qu'à court-circuit dans ma carrière de programmation et je suis juste une sorte de pénétration de mon niveau intermédiaire! Alors, aimez-moi bien m'attiez-vous avec un court Code Snippet pour cette méthode JavaScript PêturdeFault ().


Hey Nikistag, gardant également à l'esprit qu'il y a deux choses impliquées; 1. Le fichier doit télécharger, ce qui est l'emplacement de la balise d'ancrage pointant et 2. Je souhaite que le script PHP se déclenche lorsque ce lien est cliqué.


Si vous êtes heureux avec l'ouverture du lien de téléchargement dans un autre onglet, l'ajout de cible = "_ vide" sera suffisant. Si vous souhaitez que le processus soit complet en arrière-plan, vous avez besoin de fonctionnalités Ajax.


Le téléchargement ne fonctionne pas comme prévu.


@nikistag je viens de mettre à jour la page. J'ai laissé une petite extension qui n'aurait pas dû être là dans ma balise d'ancrage.


3 Réponses :


1
votes
<script>
    document.getElementById("dButton").addEventListener("click", function(event){
        var xhttp;
        xhttp = new XMLHttpRequest();
        xhttp.onreadystatechange = function() {
        if (this.readyState == 4 && this.status == 200) {
            location.relod;
        }
        };
        xhttp.open("GET", document.getElementById("downloadCounter").value(), true);
        xhttp.send(); 
    });
</script>

2 commentaires

Merci Nikistag, mais voit aussi qu'il y a deux choses impliquées; 1. J'ai besoin du fichier à télécharger, ce qui est l'endroit où la balise d'ancrage pointe et 2. Je veux que le script PHP se déclenche lorsque ce lien est cliqué. Que puis-je ajouter au JavaScript afin qu'il tire ce script php dans le répertoire différent?


@Klemlloydmwenya Utilisez AJAX



1
votes

Pour exécuter un code PHP sans action réelle de la page nécessite AJAX comme indiqué par @nikistag; Les problèmes de sécurité sont secondaires selon maintenant. Pour les téléchargements de fichiers, cela peut être délicat et je conseillerais que vous allez avec l'attribut 'Télécharger' pour HTML5. Si de tels liens avec l'attribut de téléchargement sont cliqués, il téléchargera les types de fichiers majeurs déjà couverts. Trouver maintenant un moyen de créer ce lien dynamique; Vous pouvez facilement faire cela avec jQuery ou pure JS et effectuer un clic automatique lorsque votre bouton est cliqué sur votre bouton.

$(document).ready(function(){ 
     //safe to do your staff now,
});


0 commentaires

0
votes

Je pose les informations des réponses ci-dessus et j'ai proposé une solution qui fonctionne pour moi. J'espère que c'est une pratique qui est autorisée!

  1. a fait deux liaisons interdépendantes avec l'une d'elles invisible: li> OL>
                var dButton = document.getElementById("dButton"),
                    hidden_dLink = document.getElementById("downloadSong");
    
                    // Act on clicks to a elements
    
                    function downloadMP3() {
                        // Clicks the hidden anchor tag
                        hidden_dLink.click();   
                    }
    
                $(document).ready(function () {
                    $('#dButton').on('click', function () {   
    
                        $.ajax({
                            url: 'https://groupkse.net/music_files/countDownloads.php?id=3',
                            method: 'GET',
                            xhrFields: {
                                responseType: 'blob'
                            },
                            success: function (data) {
                                var a = document.createElement('a');
                                var url = window.URL.createObjectURL(data);
                                a.href = url;
                                a.download = 'file.mp3';
                                document.body.append(a);
                                a.click();
                                a.remove();
                                window.URL.revokeObjectURL(url);
                            }                   
                        });
                    });
                });
    


0 commentaires