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

Langage PHP Discussion :

lien cliquable pour supprimer un element d'un base de donnees


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Inscrit en
    Août 2011
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Août 2011
    Messages : 58
    Points : 28
    Points
    28
    Par défaut lien cliquable pour supprimer un element d'un base de donnees
    Bonjour,

    J'ai une liste de clients qui s'affiche ainsi que la possibilite de supprimer n'importe quel client.
    Le lien "delete" ne doit pas me transferer sur une nouvelle page mais simplement me demander si je suis certain de bien vouloir supprimer ce client.

    Je ne sais donc pas cmt faire en sorte que le "delete" soit cliquable sans m'amener sur une nouvelle page, et faire en sorte que le delete sur la base de donnees s'execute

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu peux le faire en Ajax avec XMLHttpRequest.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Nouveau membre du Club
    Inscrit en
    Août 2011
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Août 2011
    Messages : 58
    Points : 28
    Points
    28
    Par défaut
    il n'y a aucun moyen de le faire en php?

  4. #4
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2004
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2004
    Messages : 108
    Points : 175
    Points
    175
    Par défaut
    Si tu acceptes qu'il recharge la page en cours c'est possible sinon tu devras passer par de l'ajax en effet. Php agit sur le serveur et non sur le client.

    Dans le cas où le rechargement de la page en cours est possible il te suffit que le lien prenne en paramètre ?action=delete&id=un_id.
    Sur ta page tu vérifier si un argument action est passé en GET et contient bien le terme 'delete', tu fais toute les vérification nécessaire sur l'id et ensuite tu affiches un cadre php qui ne contiendra qu'un texte
    etes vous sur de ...
    et un lien qui aura pour paramètre ?action=delete&id=un_id&valid=1.

    Ainsi si la paramètre "action" est présent avec pour valeur "delete", que un id correct est là et que le paramètre "valid" est présent et à "1" alors on supprime .

    Tout cela sans javascript mais avec un rechargement de la page en cours 2 fois. Après c'est selon ce que tu veux faire .

  5. #5
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Ben non vu tes contraintes.
    Le seul moment où il y a interaction avec l'utilisateur, c'est dans le navigateur, encore heureux que le navigateur ne peut pas mettre à jour ta base de données !
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  6. #6
    Membre émérite
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Points : 2 446
    Points
    2 446
    Par défaut
    pareil que TERRA126. Je dirai que au lieu de la page de coupure, un petit javascript confirm() lié à l'action "onclick" sur le lien pour empecher ou pas la propagation de l’évènement...

    Personnelement, je n'aime pas les supressions par methode GET, ça veut dire qu'on peut d'une façon ou d'une autre obtenir une url pour effacer la base de donnée et la bookmarquer. Du coup je dissimule un formulaire mono-bouton et de input type=hidden qui efface et qui fait un POST vers la page d'effacement des données.... et du coup le confirm se fait sur le onsubmit ce qui est plus propre !

    enfin chacun son truc.
    PHP fait nativement la validation d'adresse électronique .
    Celui qui a inventé mysql_connect(...) or die() est déjà mort plusieurs fois.

    Utilisez le bouton résolu!

  7. #7
    Nouveau membre du Club
    Inscrit en
    Août 2011
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Août 2011
    Messages : 58
    Points : 28
    Points
    28
    Par défaut
    TERRA126 c'est exactement ce que je veux faire!!

    donc voila ce que j'ai pour le moment :

    - le lien du delete:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="index_clients.php?action=delete&id=' . $result->client_id . '">Delete</a>
    -
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
    		switch (true){
    			case isset($_GET['action']) && ($_GET['action'] == 'delete'):
    //la verification je peux m'en passer. mais je n'ai pas bien compris comment faire pour renvoyer un 2e GET avec la confirmation, ne faut-il pas recharger la page pr ca?
    			break;
    		}
    	?>

  8. #8
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2004
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2004
    Messages : 108
    Points : 175
    Points
    175
    Par défaut
    Je suis totalement d'accord gene69 pour le visionnage des données en GET ce n'est pas très propre mais en terme de visualisation de la solution je trouve que c'est plus efficace .
    La transformation d'un lien href en un petit formulaire contenant un champ avec les valeurs est simple à faire .

    Alors sinon bon ton lien suit bien le processus seulement j'ai du mal à comprendre le pourquoi du switch(true) ? en fait c'est la première fois que je rencontre une tel façon de faire pour après utiliser les cases comme des condition if :/.

    Je pense que tu devrais faire un truc du genre
    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
    26
    27
    28
    29
    30
    31
    32
     
    <?php
    if (isset($_POST['action']) && $_POST['action'] == 'delete') { //On vérifie l'action demandée
        if (!isset($_POST['valid']) || $_POST['valid'] !== '1') { //Si il n'y a pas de validation on demande une validation
    	      //Tu valides le $_POST['id'];
                 if (validation($id) === true) $validationWait = true;
                // else ALERTE PIRATE >< (ou un petit rigolo)
    	} else { //Sinon on supprime
    	      //Tu valides le $_POST['id'] encore une fois car possibilité de triche aux deux endroits :). Une fonction devrait faire l'affaire ;).
    	      //Tu supprimes
        }
    }
    ?>
     
    ... ton header html et code si besoin est ...
    <?php
    if ($validationWait === true) { //Si il n'y a pas de validation on demande une validation
    ?>
    <div class="del_validation">
        <span>Etes vous sûr de vouloir supprimer cette information ?</span>
        <form action="index_clients.php" method="post">
            <input type="hidden" name="id" value="<?php echo $id; ?>" />
            <input type="hidden" name="valid" value="1" />
            <input type="hidden" name="action" value="delete" />
    	<input type="submit" value="Oui" />
        </form>
    </div>
    <?php
    }
    ?>
     
    ... ton code html (dont ta liste :)) ...

    Ton lien pour supprimer un élément en passant par du post pourrait être cela
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <form action="index_clients.php" method="post">
        <input type="hidden" name="id" value="<?php echo $id; ?>" />
        <input type="hidden" name="action" value="delete" />
    	<input type="submit" value="Supprimer" />
    </form>

    Evidemment pour rendre les choses plus jolies tu pourrais remplacer les submit par des images.
    Pour éviter les form à répétition tu peux englober toute les liste dans une form afin de pouvoir selectionner les items à supprimer mais le principe reste le même .

    Pour aller encore plus tu peux la première fois enregistrer l'id dans une session et récupéré cette dernière lors de la validation (en faisant toute les vérification requise pour valider le fait que l'on vient bien de la bonne page, sinon on supprime la valeur en $_SESSION).
    Enfin bon il y a plusieurs façons de s'y prendre, à priori les seuls raison de privilégier l'une plus que l'autre sont : l'esthétisme et ses convictions personnelles . Tant que derrière tout est bien protégé c'est bon car de toute façon il y aura toujours moyens d'envoyer n'importe quoi au serveur .

  9. #9
    Nouveau membre du Club
    Inscrit en
    Août 2011
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Août 2011
    Messages : 58
    Points : 28
    Points
    28
    Par défaut
    Merci bcp pr tes explications!!
    Si j'utilise des case c pcq je gere plusieurs formulaires en fait, mais c sur que ca aurait pu etre faisable avc des if
    Mais en fait je sais pas si j'ai mal compris ou pas mais ca fonctionne pas...

    Code : 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
    case isset($_POST['action']) && ($_POST['action'] == 'delete'):
    				if (!isset($_POST['valid']) || $_POST['valid'] !== '1') {
    					$validationWait = true;
    				} else {
    					$c = new Client();
    					$c->load($_POST['client_id']);
    					$c->delete;
    				}
    				if ($validationWait === true) {
    					echo '<div class="del_validation">';
    						echo '<form action="index_clients.php" method="post" onclick="window.open(this.href,\'popup\',\'scrollbars=no,resizable=no,width=360,height=300,left=20,top=20\');">';
    							echo '<span>Are you sure you want to delete this client ?</span>';
    							echo '<input type="hidden" name="id" value="<?php echo $id; ?>" />';
    							echo '<input type="hidden" name="valid" value="1" />';
    							echo '<input type="hidden" name="action" value="delete" />';
    							echo '<input type="submit" value="Yes" />';
    							echo '<input type="submit" value="No" />';
    						echo '</form>';
    					echo '</div>';
    				}
    			break;
    voila ce que j'ai, le lien 'delete' qd il est clique est bien passe dans l'url.. mais rien ne se passe en fait

  10. #10
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2004
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2004
    Messages : 108
    Points : 175
    Points
    175
    Par défaut
    Ouki pour les switch .

    Sinon je pense que cela ne fonctionne pas car j'utilise des $_POST et ton lien envoie les données en $_GET . Remplace le lien de delete par le deuxième bloc de code de mon post précédent .

  11. #11
    Nouveau membre du Club
    Inscrit en
    Août 2011
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Août 2011
    Messages : 58
    Points : 28
    Points
    28
    Par défaut
    ok donc j'ai bien remplace les get par post sur cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    case isset($_GET['action']) && ($_GET['action'] == 'delete'):
    le bloc s'affiche bien lorsque je clique sur delete, mais le delete ne fonctionne pas

    en fait, idealement, j'aimerai qu'une fois que le delete est clique, une fenetre pop up s'affiche avec le texte : ' etes-vous certain...'
    ce qui n'est qu'un simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="index_clients.php?action=delete&id=' . $result->client_id . '"  onclick="window.open(this.href,\'popup\',\'scrollbars=no,resizable=no,width=360,height=300,left=20,top=20\');return false;">Delete</a>
    mais le probleme c que meme sans tout ca, ca ne fonctionne pas..
    et en fait, ca me ramene a un probleme pour lequel j'ai poste une discussion sur le forum mais pr lequel je reste coince

    http://www.developpez.net/forums/d13...p/#post7163952

  12. #12
    Nouveau membre du Club
    Inscrit en
    Août 2011
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Août 2011
    Messages : 58
    Points : 28
    Points
    28
    Par défaut
    j'y suis finalement arrive :

    Code : 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
    case isset($_GET['action']) && ($_GET['action'] == 'delete'):
    	if($_GET['validationWait'] == true) {
    		echo '<form action="index_clients.php" method="post");">';
    		echo '<span>Are you sure you want to delete this client ?</span>';
    		echo '<input type="hidden" name="id" value="'. $_GET['id'] .'" />';
    		echo '<input type="hidden" name="action" value="delete" />';
    		echo '<input type="submit" name="yes" value="Yes" />';
    		echo '<input type="submit" name="no" value="No" />';
    		echo '</form>';
    	}
    	break;
    case isset($_POST['yes']):
    	$_GET['validationWait'] = false;
    	$c = new Client();
    	$c->delete($_POST['id']);
    	break;
    avec le validationWait defini dans le lien du delete :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="index_clients.php?action=delete&id=' . $result->client_id . '&validationWait=true">Delete</a>

    MERCI INFINIMENT
    si vous avez un peu de temps, pourriez-vous regarder qd meme mon 2e poste ?

  13. #13
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2004
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2004
    Messages : 108
    Points : 175
    Points
    175
    Par défaut
    Hmmm donc pour une fenêtre de confirmation en javascript ce n'est pas windows.open mais windows.confirm . Regarde dans cette direction là . tu peux ensuite récupérer la valeur du bouton sur lequel l'utilisateur à cliqué et pis annulé l'action d’appuyé donc .

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $result = window.confirm("Vous allez supprimer l'item numero X");
    if ($result != true) return false;

Discussions similaires

  1. Réponses: 5
    Dernier message: 20/10/2010, 12h07
  2. Réponses: 5
    Dernier message: 23/11/2009, 15h49
  3. [DOM XML] Supprimer un noeud de ma base XML chargé avec un DomDocument
    Par youtch dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 23/03/2009, 14h35
  4. Réponses: 5
    Dernier message: 03/03/2006, 13h07

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