IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Passer l’indice d’une boucle PHP à une fonction JavaScript


Sujet :

JavaScript

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2014
    Messages : 162
    Points : 73
    Points
    73
    Par défaut Passer l’indice d’une boucle PHP à une fonction JavaScript
    Bonjour,

    J’ai une fonction PHP qui récupère une liste de fichiers contenues dans un serveur et ma question se situe au niveau du bouton de suppression du fichier.
    J’utilise JavaScript pour faire un appel AJAX et envoyer l’ID et le nom du fichier.

    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    <?php
    // Connexion à la base de données…
    $result = $bdd->query('SELECT id, fileName, fileSize FROM table WHERE userId="'.$userId.'"');
     
    	while($data = $result->fetch()){
     
    ?>
     
    	<tr>
    		<td id="file_name">
    			<?php echo $data['fileName']; ?>
    		</td>
    		<td>
    			<?php echo $data['fileSize']; ?>
    		</td>
    		<td id="file_delete">
    			<button type="button" onclick="deleteCurrentFile(<?php echo json_encode($data['id']); ?>, <?php echo json_encode($data['fileName']); ?>)" > Supprimer </button>
    		</td>
    	</tr>
     
    <?php
    	}
     
    	$result->closeCursor();
    ?>

    Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    // Fonction appelant le code de suppression du fichier
    function deleteCurrentFile(id, fileName) {
    	$.post( "deletefile.php", { id : id, fileName : fileName } )
    		.done( function() {
    			alert("Suppression effectuée.");
    		})
    		.fail( function() {
    			alert("Une erreur est survenue lors de la suppression du fichier.");
    		})
    		.always( function() {
    			alert("Fin de l'opération.");
    		});
    }

    Ici, j’utilise un onclick dans une balise HTML. Je pense que ce n’est pas une bonne solution, mais c’est la seule que j’ai trouvé pour passer le bon argument (le bon fichier à supprimer) à la fonction JavaScript. D’ailleurs, la structure de mon code JavaScript n’est pas assez propre et je ne sais même pas si elle est correcte puisque le sript plante, mais je n’ai encore compris où.
    J’ai vu (FAQ) que je pourrais créer le tableau listant les fichiers en JavaScript, mais je voudrais garder l’utilisation du PHP car il me semble qu’elle propose plus de sécurité.

  2. #2
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    16 959
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 16 959
    Points : 44 122
    Points
    44 122
    Par défaut
    Bonjour,
    la première chose à faire est de regarder le code HTML généré, CTR +U, ensuite regarde dans la console les erreurs qu'il peut y avoir, F12.

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2014
    Messages : 162
    Points : 73
    Points
    73
    Par défaut
    Bonjour,

    Ma question est plus : comment récupérer le bon fichier, par le lien généré en PHP, avec JavaScript et grâce à la méthode onclick (mais pas le onclick d’une balise HTML)

    Pour ce qui est de mon erreur, pour l’instant, ce n’est pas très important, puisque j’aimerais ne pas conserver cette façon de faire ;*ça ne vaut pas forcément de résoudre ce problème.

    Merci

  4. #4
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 093
    Points : 6 754
    Points
    6 754
    Par défaut
    Tu devrais suivre les conseils de NoSmoking, il te les prodigue pour une bonne raison : en examinant le code généré, tu vois à quoi ressemble réellement ton attribut onclick ; et en ouvrant la console JavaScript, tu vois les messages d’erreur. NoSmoking a dû deviner qu’il y avait des erreurs de syntaxe JS.

    J’ai une question : pourquoi json_encode ? Il me semble que ce qui sort de ta BDD ce sont des types primitifs (int et string). Tu n’as pas d’objet à sérialiser, donc pas besoin de json_encode a priori. Ou alors je fais une mauvaise supposition sur le type de tes données. Ne voulais-tu pas plutôt utiliser htmlspecialchars ?

    Puisque tu as l’air d’envisager une solution plus « propre », je te propose d’utiliser addEventListener. Cela dit, tu dois toujours relier les données à tes balises HTML. Pour ça je te propose d’utiliser des attributs data-. Quelle différence ça fait par rapport à un attribut onclick ?

    D’abord, tu factorises le code JS : une seule fonction te permet de gérer toutes les lignes de ton tableau. En prime, ça te permet de servir le code JS dans un fichier statique séparé du HTML et donc profiter de la mise en cache.

    Ensuite, tu supprimes un niveau d’interprétation. Dans la situation actuelle, tu as ton script PHP qui génère du code qui sera d’abord interprété comme du code HTML (un attribut), puis interprété une seconde fois comme du code JS (onclick). Ça augmente le risque d’avoir des problèmes avec les délimiteurs (guillemets, etc.) et les séquences d’échappement. En mettant tes données dans des attributs data-, elles seront seulement interprétées comme du code HTML ; le DOM se chargera ensuite de les fournir à ton script JS sous forme de chaînes.

    J’ai une dernière remarque à propos de ta requête SQL. Je ne sais pas si tu as sécurisé ta variable $userId, mais tu pourrais utiliser une requête préparée. Ça te demandera juste une ou deux lignes de code en plus, et ça te permettra de prévenir des erreurs futures. C’est une bonne habitude à prendre
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  5. #5
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2014
    Messages : 162
    Points : 73
    Points
    73
    Par défaut
    Merci pour ces réponses
    J’ai affiché le code source et il y avait effectivement des erreurs (entres-autres des guillemets manquants).

    Je vais me renseigner sur addEventListener et les attributs data- et voir si c’est ce que je recherche

Discussions similaires

  1. Boucle dans une fonction javascript
    Par edward carnby dans le forum jQuery
    Réponses: 5
    Dernier message: 01/10/2012, 19h54
  2. Passer en paramètre un tableau php dans une fonction javascript
    Par hartecel dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 17/07/2008, 15h17
  3. Réponses: 1
    Dernier message: 15/04/2008, 18h36
  4. Passer un tableau PHP en argument dans une fonction javascript ?
    Par The Molo dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 18/05/2007, 12h31
  5. [PHP-JS] passage d'une variable php à une fonction javascript
    Par pimpmyride dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 07/04/2006, 16h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo