Pages :
Bonjour à toutes et à tous ! Smiley smile

J'ai crée un tableau HTML qui, grâce au PHP, liste tous les utilisateurs de ma base de données. En face de chaque lignes se trouve un bouton de type submit qui permettrait de supprimer l'utilisateur de la BDD.
Le problème, c'est que pour que ça fonctionne, j'aurais besoin de gérer l’événement submit de ce bouton avant qu'il bascule vers la page d'action.
Quelqu'un sait-il comment je pourrais faire ? Ou faut-il que j'utilise une autre méthode comme AJAX dont j'ai entendu parler mais que je ne sais pas utiliser ?

Merci d'avance ! Smiley biggrin
Bonjour,

Tout dépend de ce que tu appelles "gérer" l'événement submit ?

Mais sinon bêtement en jQuery, ça donnerait ça :
$('form').submit(function() {
  // code…
})


Et en VanillaJS (que je ne connais pas beaucoup) ça devrait donner un truc du genre :
[].forEach.call(document.querySelectorAll('form'), function(el) {
  el.addEventListener('submit', function() {
    // code…
  })
})

Modifié par SolidSnake (28 Jun 2017 - 10:13)
Merci pour ta réponse SolidSnake Smiley cligne

Je n'ai pas du bien m'expliquer... Je sais déjà écrire des actions liées à un événement comme tu me l'a montré.

Ce que je souhaite, c'est que lorsque je clique sur le bouton submit de mon formulaire (événement submit), certaines actions soit effectuées en JavaScript AVANT que le formulaire soit envoyé vers le traitement PHP.
TooKi a écrit :
certaines actions soit effectuées en JavaScript AVANT que le formulaire soit envoyé vers le traitement PHP.


Quelles actions ? le Js et le Php n'ont pas le même but.
mvc, oui en quelque sorte puisque je fais ce site dans le cadre de mon stage de première année de BTS SIO.

JENCAL, enfaite, je voudrais que lorsque je clique sur l'un des boutons supprimer de mon tableau, JavaScript récupère les informations de la ligne pour les placer dans des inputs cachés que PHP pourra récupérer pour savoir quel utilisateur supprimer de la BDD.
Ok je vois, mais pourquoi les mettres en javascript dans des inputs caché ?

Si tu code ça en Ajax, lorsque tu cliques sur le boutton delete la ligne est delete en même pas 1 secondes sans recharger la pages.
Merci SolidSnake mais ce n'est pas vraiment ce que je cherche à faire.

Ah on y vient JENCAL Smiley ravi , c'est pour ça que j'ai demandé dans mon premier post si ma méthode était la bonne ou s'il fallait que j'utilise AJAX dont j'ai entendu parler mais que je ne sait pas utiliser... J'ai déjà regarder des tutos mais ils ne ciblent pas assez mon cas et j'ai du mal à les comprendre...
Si je te partage mon code, voudrais-tu me guider dans le codage AJAX ? (sans me mâcher tout le travail bien-sur) ^^
Cool ! Alors voici mon code

<form method="post"	action="gestionnaire_utilisateurs.php" id="setUsrForm"> 
	<table>
		<tr>
		    <th> Nom </th>
		    <th> Prénom </th>
		    <th> Action </th>
		</tr>

		<?php
			try
			{ 
			    // connexion à la base
			    $bdd = new PDO('mysql:host=localhost;dbname=conservatoire;charset=utf8', 'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));  
			}

			catch (Exception $e)
			{
			    die('Erreur : ' . $e->getMessage());
			}

			$utilisateursBDD = $bdd->query('SELECT * FROM utilisateurs WHERE Administrateur = 0');

			foreach ($utilisateursBDD as $i => $row) 
			{
		?>
				<tr id="<?php echo $i; ?>">
					<td class="sNames">
						<p class="sNamesView"><?php print $row['NomUtilisateur']; ?></p>
					</td>

					<td class="fNames">	
						<p class="fNamesView"><?php print $row['PrenomUtilisateur']; ?></p>						
					</td>

					<td>
						<button type="submit" name="delButton" title="Supprimer"></button>
					</td>
				</tr>							
		<?php			
			}
		?>
	</table>
</form>

Modifié par TooKi (28 Jun 2017 - 14:31)
alors pour rappel, le but d'ajax est d'appeler du php sans rafraichir la page :

donc structurellement parlant le but est d'extraire le php en question dans une page action.php (ou autre name) et d'extraire le js dans un script.js et le html dans un index.php.

Pour ajax il y a deux type d'ajax, l'ajax PURE javascript et l'ajax jquery ... voici le pure javascript :

ici , la fonction classic

function getXMLHttpRequest() {
	var xhr = null;
	
	if (window.XMLHttpRequest || window.ActiveXObject) {
		if (window.ActiveXObject) {
			try {
				xhr = new ActiveXObject("Msxml2.XMLHTTP");
			} catch(e) {
				xhr = new ActiveXObject("Microsoft.XMLHTTP");
			}
		} else {
			xhr = new XMLHttpRequest(); 
		}
	} else {
		alert("Votre navigateur ne supporte pas l'objet XMLHTTPRequest...");
		return null;
	}
	
	return xhr;
}

et ensuite je préconise l'envoie en POST (cacher)


var xhr = getXMLHttpRequest();
xhr.onreadystatechange = function() {
        if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 0)) {
                alert(xhr.responseText); // ET ICI tu gére le résultat, le retour de ton PHP
        }
};
xhr.open("POST", "action.php", true);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.send("variable1=truc&variable2=bidule");


et c'est tout.
Si tu galère reviens ici.
Modifié par JENCAL (28 Jun 2017 - 14:38)
Ok donc si j'ai bien compris, je dois enlever le type="submit" de mon bouton supprimer, lui affecter un événement onclick qui appellera le script AJAX qui doit ouvrir la requête SQL écrite dans une page action.php a qui on envoie via le script AJAX les variables contenant les données de lignes récupérées dans le tableau ???

Juste pour savoir si je suis sur la bonne voie ou si je patauge Smiley lol
Bonjour.
TooKi a écrit :
Ok donc si j'ai bien compris, je dois enlever le type="submit" de mon bouton supprimer, lui affecter un événement onclick…

Pas besoin. Il suffit juste de rendre son comportement par défaut inopérant.
On peut écouter l'événement "submit" sur le formulaire, et, par exemple, avec DOM-2, faire un event.preventDefault(); (event est arbitraire, on reprend l'argument de la fonction passée en paramètre à addEventListener.)
Smiley smile
OK Zelena mais si je fait comme ça, je ne pourrait pas récupérer le numéro de la ligne, si ? D'autant plus que mon formulaire à d'autres boutons submit que je ne veux pas bloquer...
En ce cas, écoutez 'click' sur le formulaire et récupérez la cible qui a été à l'origine de l'action (event.target avec DOM-2). Si la cible est le bouton dont vous voulez changer le comportement, il faut d'abord changer son comportement par défaut…
Smiley smile
Meilleure solution
Ca ne fonctionne pas Zelena... Smiley decu

J'ai ce formulaire (très allégé pour bien ciblé le problème Smiley cligne )

<form method="post" action="gestionnaire_utilisateurs.php" id="setUsrForm"> 
    <button type="submit" name="delButton" class="delButtons"></button>
    <button type="submit" name="validButton" class="validButtons"></button>
</form>


et ce traitement JS

var setUsrForm = document.getElementById('setUsrForm');
setUsrForm.addEventListener("click", function(e)
		    {
		    	var clickEl = e.target;

		    	if (clickEl.class = 'delButtons')
		    	{
		    		e.preventDefault()
		    	}
		    });

Avec ça, le e.preventDefault() devrait agir que quand je clique sur le delButtons, pourtant il agit aussi quand je clique sur validButtons
Modifié par TooKi (28 Jun 2017 - 16:54)
Hum… vous devriez revoir ou voir les bases du Javascript.

Pour tester si un élément a une classe, c'est :
element.className et non element.class

ensuite
if (clickEl.class = 'delButtons')

n'est pas une comparaison, c'est une affectation. C'est :
if (clickEl.class == 'delButtons')

qui est une comparaison.

Smiley smile
Ah mais oui je le savais en plus... Merci Zelena ça fonctionne et c'est beaucoup plus propre.
Maintenant pour en revenir à la solution de JENCAL, ma console m'affiche ReferenceError: getXMLHttpRequest is not defined
Pourquoi ?
Modifié par TooKi (29 Jun 2017 - 11:33)
Pages :