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 :

suppression d'enregistrement et message de confirmation [PHP 5.3]


Sujet :

Langage PHP

  1. #1
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Par défaut suppression d'enregistrement et message de confirmation
    Salam ; j'ai un lien de suppression d'enregistrement qui affiche un message de confirmation en javascript. jusqu’à ici pas de problème.
    si je désactive le js la suppression s'exécute sans contrôle...!! là sa me pose problème?
    comment contourné se problème en php?
    fichier listes.php: la confirmation se fait dans cette page avec du javascript
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ........
    <td><a title="Suppression d'enregistrement"href="../interfaces/suppr.php?cdec=<?php echo $list['cdec'];?> " class="info"><img src="../image/supr.png" onclick="return confirm('Voulez-vous vraiment supprimer cet enregistrement ?');"></td>
    fichier supr.php: la suppression se fait dans cette page
    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
     
    .......
    include('../mod/cbd.inc.php');
     
    $cdec= (integer) $_GET['cdec'];
    			$supenreg=$cbd->prepare('DELETE  FROM tabzero where cdec=:cdec ');
    			$supenreg->bindParam(':cdec', $cdec , PDO::PARAM_INT); 
     
    			try {
    					// On envois la requète
    			$supenreg->execute();
    					// libèré la connexion du serveur
    			$supenreg->closeCursor();	
    			header ('location: ../interfaces/tab.php'); 		
     
    			  }
    			catch( Exception $e ){
    			  echo 'Erreur d\'affichage : ', $e->getMessage('erreur de requête!!!');
    			  }

  2. #2
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Tu vas être obligé de mettre une page de confirmation "entre deux", c'est la seule solution.

  3. #3
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Par défaut
    Re ; voila j'ai procéder comme suite mais j'ai un problème de variable non reconnue $cdec.
    page proposant la suppression :
    lidentifant de l’enregistrement concerné par la suppression est transféré par $_GET.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ........
    <td><a title="Suppression d'enregistrement" href="../interfaces/suppr.php?cdec=<?php echo $list['cdec'];?> " class="info"><img src="../image/supr.png"  ></td>
    page suppr.php :
    propose la confirmation de la suppression , si oui la demande est exécutée sinon redirection vers la page liste.
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
    .........
    <?php
    include('../mod/cbd.inc.php');
    $cdec= (integer) $_GET['cdec'];
    $suppr=0; // initier a zero la variable de suppression 0 ne fait rien , 1 supprime
     
    ?>
    <!DOCTYPE html>
    <HTML>
    <head>
    	<!--Pour forcer le navigateur à afficher en mode IE9, sans quoi il peut passer en mode quirks.-->
    	<meta http-equiv="X-UA-Compatible" content="IE=edge" /> 
    	<meta charset="utf-8" />
    	<META HTTP-EQUIV="Pragma" CONTENT="no-cache"> <!-- application dynamique  -->
    	<link rel="shortcut icon" href="image/favs3g.ico" />
    	<link rel="stylesheet" media="screen" type="text/css" href="css/style_div.css"> 
    	<title> Suppression d'enregistrement</title>
     
     
    </head>
    <body>
    	<p>Supprimer l’enregistrement en cours</p>
    <?php
        if(isset($cdec) AND $suppr == 0) 
            {
    			echo '<p>Voulez vraiment supprimer cet enregistrement ?"</p>'; 
    			echo '<p><a href="suppr.php?cdec=' . $cdec . '&$suppr==1">Oui</a>';
     
    			// En cas d'annulation, on revient tout simplement a la page liste enregistrement
    			echo '<a href="../interfaces/tab.php">Annuler</a></p></center>';
     
    		}
    		// si confirmation suppr =1
        //=======================
     
    	elseif(isset($cdec) AND $suppr ==1)
    	{ 		
     
    			 requête de suppression 
    			$suppr==0;
    			echo '<p>L\enregistrement a été bien supprimé.</p>;
    			
                    <p><a href="../interfaces/tab.php">Liste enregsitrement</a></p>';
     
     
    			  }
    			catch( Exception $e ){
    			  echo 'Erreur d\'affichage : ', $e->getMessage('erreur de requête!!!');
    			  }
     
     
        }
     
    ?>
        </body>
    </html>
    en résumé la variable $cdec n'est pas reconnue malgré qu'elle est transmis.e

  4. #4
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Par défaut
    Re ; erreur:
    faire passer le numéro par l'URL
    je vais essayé avec $_SESSION...

  5. #5
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Heu le dernier code que tu as posté ne peut pas fonctionner, tu peux poster ce que tu as vraiment fait ?

  6. #6
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Par défaut
    Re ; j'ai choisie la solution de benjamin est sa donner ça:
    le principe est de faire passé le N° enregistrement par $_POST.
    le lien de suppression je lé changé en formulaire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ..........
    <td><form method="post" action="suppr.php">
    	<input type="hidden" name="cdec" value="<?php echo $list['cdec'];?>" />
    	<input type="image" src="../image/delete.png" alt="supprimer" name="del_img">
    	</form> 
    </td> 
    ...........
    une fois le formulaire posté :
    page suppr.php confirme la suppression avec message:
    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
    22
    23
    24
     
    ..........
    <body>
    	<p> Confirmation de suppression de l'enregistrement</p>
    <?php
     
    echo $_POST['cdec'];
    var_dump ($_POST['cdec']);
    $cdec=$_POST['cdec'];
    var_dump ($cdec);
    if(isset($_POST['cdec']) && $_POST['cdec']!='')
    {
    	echo '
    	Voulez-vous vraiment supprimer cet enregistrement ?<br />
    	<form method="post" action="suppr1.php">
    	<input type="hidden" name="cdec"  value="'.$cdec.'">
    	<input type="submit" name="Supprimer" value="Supprimer"> &nbsp;&nbsp;
    	<a href="../interfaces/tab.php">Annuler</a>
    	</form>
    	';
    }
    ?>
     
     </body>
    si l'utilisateur annule revient sur la liste d'enregistrement sinon :
    confirme la suppression est revient sur la liste d'enregistrement :
    page suppr1.php
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    .......
    <body>
    	<p>Suppression de l'enregistrement</p>
    <?php
    echo $_POST['cdec'];
    if(isset($_POST['cdec']) && $_POST['cdec']!='')
    	{
    	$cdec= $_POST['cdec'];
    	//$cdec = intval(mysql_real_escape_string($_POST['id'])); 
    	// requête de suppression 
    					$supenreg=$cbd->prepare('DELETE  FROM tab where cdec=:cdec');
    					$supenreg->bindParam(':cdec', $cdec , PDO::PARAM_INT); 
     
    				try {
    					// On envois la requète
    						$supenreg->execute();
    					// libèré la connexion du serveur
    						$supenreg->closeCursor();	
    					header ('location: ../interfaces/tab.php'); 		
     
    					}
    			catch( Exception $e ){
    			  echo 'Erreur d\'affichage : ', $e->getMessage();
    			  }  
    			}
     
     
     
    ?>
     </body>
    en résumé y'a :
    page proposant la suppression.
    page de message de confirmation de suppression suppr.php
    page d'exécution de la suppression. suppr1.php
    s'il y'a une autre méthode (sauf js) plus optimisé je serai preneur

    NB/ code modifier sur la base du code proposé par jreaux63 en date 12/05/2009 http://www.developpez.net/forums/d74...ees-php-mysql/

  7. #7
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Remarque, y'a pas de raison que ça marche pas par $_GET. Dans le doute, tu peux aussi te servir de $_REQUEST qui représente $_GET + $_POST

    Tu devrais quand même penser à sécuriser la réccupération d'informations:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    // très mauvais (car le isset sur $cdec renverra true alors que l'informatio n'est peut être pas présente dans $_POST)
    $cdec = (integer)$_POST['cdec'];
    // pas bon
    $cdec=$_POST['cdec'];
    // bon
    $cdec = isset($_POST['cdec']) ? $_POST['cdec'] : null;
    // meilleur
    $cdec = filter_input(INPUT_POST, 'cdec', FILTER_VALIDATE_NUMBER);
    Enfin, si c'est critique, tu peux sécuriser avec un token pour éviter la suppression non-autorisée d'items.

  8. #8
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Par défaut
    Re ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $cdec = filter_input(INPUT_POST, 'cdec', FILTER_VALIDATE_NUMBER);
    me genere une erreur :
    Notice: Use of undefined constant FILTER_VALIDATE_NUMBER - assumed 'FILTER_VALIDATE_NUMBER' in
    je crois que la $_POST est un string !!!!
    bien mis en évidence par var_dump.

  9. #9
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    J'ai pas le loisir d'apprendre toutes les constantes de filtres par coeur, elles sont mentionnées ici.
    Le bon filtre c'est FILTER_VALIDATE_INT.

    Tout ce qui transite par $_POST ou $_GET est soit une chaîne soit un tableau de chaines (ou encore des tableaux multi-dimensionnels de chaines). Ce qui ne change rien au fait que filter_input sait les filtrer correctement, c'est fait pour.

  10. #10
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Salut

    Au lieu de multiplier les pages, comme suppr1.php, suppr2.php, tu pourrais très bien gérer ça sur la même page.
    Suffit de mettre dans un champ caché l'action à réaliser.

    Il faudrait rajouter dans la page de départ (théoriquement interfaces/tab.php) dans la formulaire un champ caché avec comme nom : action et comme valeur : supprimer
    (action et supprimer c'est pour exemple, bien sûr)

    Exemple : (suppr.php)
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    <?php
    // Action par défaut
    $action = 'supprimer';
    $cdec = '';
     
    if (isset($_POST['action'], $_POST['cdec']) && $_POST['action'] === 'supprimer') {
        $cdec = $_POST['cdec'];
        $action = 'supprimer_conf';
    }
    elseif (isset($_POST['action'], $_POST['cdec']) && $_POST['action'] === 'supprimer_conf') {
        // Vérification de la valeur de cdec (filter_input)
     
        // Si la valeur est correcte
        if ($verif !== FALSE) {
            // Suppression / Requête SQL
     
            // Redirection
            header('Location: ../interfaces/tab.php');
            exit();
        }
    }
     
     
    ?>
     
    <html>
    ... etc ...
    <body>
        <p>Confirmation de suppression de l'enregistrement</p>
        <form method="post" action="suppr.php">
            <input type="hidden" name="cdec" value="<?php echo $cdec;?>" />
            <input type="hidden" name="action" value="<?php echo $action;?>" />
            <input type="image" src="../image/delete.png" alt="supprimer" name="del_img">
            <a href="../interfaces/tab.php">Annuler</a>
    ?>
    	</form>
    </body>
    </html>
    Ne pas oublier de mettre un point d'arrêt juste après la redirection (après le header).

  11. #11
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Par défaut
    Salam ;excuse pour le retard de reponse j'étais entrain de testé la méthode de RunCodePhp mais je tourne
    la page tab.php contient la liste des enregistrement dont ci-dessous le code de la cellule qui contient l'image de suppression de l'enregistrement:
    l'action de formulaire est de renvoyé l'utilisateur vers la page de confirmation de suppression avec le numéro de l’enregistrement e cours
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    ........
    <td>
    <form method="post" action="suppr.php">
          // champs caché pour récupéré la valeur de l'enregistrement en cours
    <input type="hidden" name="cdec" value="<?php echo $list['cdec'];?>" />
     
    <input type="image" src="../image/delete.png" alt="supprimer" name="del_img">
    </form> 
    </td>
    maintenant la page du traitement de la confirmation de la suppression page suppr.php:
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
     
    <?php
    session_start();
    include('../mod/cbd.inc.php');
    // Action par défaut
    $action = 'supprimer';
    $cdec='';
     
    if (isset($_POST['action'], $_POST['numsup']) && $_POST['action'] === 'supprimer') {
        $cdec = $_POST['numsup'];
        $action = 'supprimer_conf';
    	}
    elseif (isset($_POST['action'] , $_POST['numsup']) && $_POST['action'] === 'supprimer')
    	{
     
        // Vérification de la valeur de cdec (filter_input)
    		$verif=filter_input(INPUT_POST, 'cdec', FILTER_VALIDATE_INT);
        // Si la valeur est correcte
        if ($verif !== FALSE) 
    		{
    			// Suppression / Requête SQL
     
    					$supenreg=$cbd->prepare('DELETE  FROM tab where cdec=:cdec');
    					$supenreg->bindParam(':cdec', $cdec , PDO::PARAM_INT); 
     
    					try {
    						// On envois la requète
    							$supenreg->execute();
    						// libèré la connexion du serveur
    							$supenreg->closeCursor();	
    						header ('location: ../interfaces/tab.php'); 		
     
    						}
    						catch( Exception $e )
    						{
    						  echo 'Erreur d\'affichage : ', $e->getMessage();
    						}  
     
    		}
    	}   
     
    ?>
     
    <!DOCTYPE html>
    <HTML>
    <head>
     
    	<title> Suppression d'enregistrement</title>
     
     
    </head>
    <body>
     <?php echo"avant de posté"; ?> 
     
    	<p> Confirmation de suppression de l'enregistrement</p>
     
        <form method="post" action="suppr.php">
    	<input type="hidden" name="action" value="<?php echo $action;?>" />
    	<input type="hidden" name="numsup" value="<?php echo $_POST['cdec']; ?>" />
    	<input type="submit" name="Sup" value="Supprimer"> &nbsp;&nbsp;
    	<a href="../interfaces/tab.php">Annuler</a>
    	</form>
     
    </body>
    </html>
    l'appel de la page suppr.php se fait bien avec transmission de la variable $_POST['cdec'] , mais une fais que je valide la suppression j'ai le message d'erreur ce rapportant a cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="hidden" name="numsup" value="<?php echo $_POST['cdec']; ?>" />
    avec <?php echo $_POST['cdec']; ?> normalement je dois récupéré la valeur transmise de la page tab.php !!

  12. #12
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Par défaut
    Re ; voila pour détourné le problème des variables $_POST['cdec'] qui me posé problème a chaque fois que je valide la suppression j'ai fait une petite
    a page tab.php contient la liste des enregistrement dont ci-dessous le code de la cellule qui contient l'image de suppression de l'enregistrement:
    l'action de formulaire est de renvoyé l'utilisateur vers la page de confirmation de suppression avec le numéro de l’enregistrement e cours sous forme de $_SESSION['cdec']
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    ........
    <td><form method="post" action="suppr.php">
    	<input type="hidden" name="cdec" value="<?php echo $list['cdec'];?>" />
    	<?php $_SESSION['cdec']    = $list['cdec'];?>
    	<input type="image" src="../image/delete.png" alt="supprimer" name="del_img">
    	</form> 
    </td>
    la page du traitement de la confirmation de la suppression page suppr.php:
    reste la meme sauf ces deux codes qui change
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    .........
    // Action par défaut
    $action = 'supprimer';
    $cdec = $_SESSION['cdec'];
     
    // reste du code jusqu'à
    // Vérification de la valeur de cdec (filter_var)
    	// "max_range"=>1000000000000 selon  limite du nombre d'enregistrements		
    $int_options = array("options"=> array("min_range"=>0, "max_range"=>1000000000000));
    $verif=filter_var($cdec, FILTER_VALIDATE_INT, $int_options);
     
    // reste du code 
    ..........
    voila sa marche bien mais je ne sait pas ce que vaut mon code en pratique !!!

  13. #13
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Par défaut
    Re ; Ouppssss !!!!! j'arrive pas a récupéré le bon numéro ....
    quelque soit le choix c'est le dernier numéro d'enregistrement qui est pris en compte.....!

  14. #14
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Je n'ai pas compris pourquoi tu as changé le nom cdec utilisé au départ pour numsup ?
    Conserver le même nom tout le temps est pourtant plus simple et plus logique vu que c'est toujours la même donnée transmise étape par étape.

    D'ailleurs, le code que j'avais mis (le if dans suppr.php) prévoyait de tester l’existence de $_POST['cdec'] transmis par tab.php, si on change de nom ça ne fonctionnera plus.
    Dans ce même code, par la suite il était prévu d'initialiser $cdec avec cette donnée dans l'optique d'exploiter cette variable dans le champ caché (même nom toujours).

    Le but étant que, lorsqu'on confirme la suppression que cette même page suppr.php soit rechargée, transmettant ainsi à nouveau cette donnée (même nom toujours : cdec) pour qu'on entre cette fois dans l'autre alternative (le elseif) pour enfin effectuer la suppression.
    Au bout, une fois supprimé on redirige vers tab.php (la page d'origine si on peu dire).


    Concernant l'usage d'une session, pourquoi pas, mais à mon humble avis ce n'est pas utile.
    Du moins, si le but est d'exploiter cette donnée pour tab.php une fois la suppression faite, on peu tout simplement prévoir de la transmettre en GET lors de la redirection.
    Suffit de prévoir un code dans tab.php pour la récupérer et en faire la valeur par défaut.
    Exemple : (dans suppr.php)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    // Redirection
    header('Location: ../interfaces/tab.php?cdec='.$cdec);
    exit();
    (et récupérer celle-ci dans tab.php avec $_GET si elle existe)

  15. #15
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Par défaut
    Salam ; RunCodePhp
    Je n'ai pas compris pourquoi tu as changé le nom cdec utilisé au départ pour numsup ?
    parce que y'avait la première $_POST['cdec'] transmise a partir de la page tab.php et $_POST['cdec'] de la page suppr.php , qui me posés problème.
    la première et bien transmise et affichée avant la validation de la suppression.
    une fois la validation est faite la deuxième prend la valeur null..... selon votre code.
    OK je vais testé une autre fois.

  16. #16
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Par défaut
    Voila j'ai repris ton code:
    la variable $_POST['cdec'] de la page tab.php est bien transmise (N° 36) par exemple
    page suppr.php
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
     
    <?php
    ...........
    $action = 'supprimer';
    $cdec = '';
     
    if (isset($_POST['action'], $_POST['cdec']) && $_POST['action'] === 'supprimer') {
        $cdec = $_POST['cdec'];
        $action = 'supprimer_conf';
    }
    elseif (isset($_POST['action'], $_POST['cdec']) && $_POST['action'] === 'supprimer_conf') {
        // Vérification de la valeur de cdec (filter_input)
    		$int_options = array("options"=> array("min_range"=>0, "max_range"=>1000000000));
    		$verif=filter_var($cdec, FILTER_VALIDATE_INT, $int_options);
        // Si la valeur est correcte
        if ($verif !== FALSE) {
            // Suppression / Requête SQL
    					$supenreg=$cbd->prepare('DELETE  FROM tab where cdec=:cdec ');
    					$supenreg->bindParam(':cdec', $cdec , PDO::PARAM_INT); 
     
    					try {
    						// On envois la requète
    							$supenreg->execute();
    						// libèré la connexion du serveur
    							$supenreg->closeCursor();	
    						header ('location: ../interfaces/tab.php'); 		
     
    						}
    						catch( Exception $e )
    						{
    						  echo 'Erreur d\'affichage : ', $e->getMessage();
    						}  
            // Redirection
            header('Location: ../interfaces/tab.php');
            exit();
        }
    }
    ?>
    <!DOCTYPE html>
    <HTML>
    <head>
     
    </head>
    <body>
    <?php echo $_POST['cdec'];?> // vérification du contenu de la variable avant la suppression ( bien transmis)
    	<div>
    		<table>
    			<th>Confirmation de suppression de l'enregistrement</th>
     
    			<form method="post" action="suppr.php">
    			<input type="hidden" name="action" value="<?php echo $action;?>" />
    			<input type="hidden" name="cdec" value="<?php echo $cdec; ?>" />
    			<input type="submit" name="Sup" value="Supprimer"> &nbsp;&nbsp;
    			<a href="../interfaces/tab.php">Annuler</a>
    			</form>
    		</table>
    	</div>
     
    </body>
    </html>
    aucune action n'est exécuté , je revien toujours sur ma page suppr.php. !!!!!!!

  17. #17
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    aucune action n'est exécuté , je revien toujours sur ma page suppr.php. !!!!!!!
    Il est surement là le problème.
    Un point a dû t'échapper dans mon exemple au tout début, c'est cela :
    Citation Envoyé par RunCodePhp
    Il faudrait rajouter dans la page de départ (théoriquement interfaces/tab.php) dans la formulaire un champ caché avec comme nom : action et comme valeur : supprimer
    (action et supprimer c'est pour exemple, bien sûr)
    Donc je reprends (ou reformule), il faut rajouter un champ champ caché dans le formulaire de tab.php l'action (valeur : supprimer).


    J'ouvre une parenthèse histoire d'expliquer ce principe.
    Un des ces jours, (à force de coder, d'évoluer) peut être verras tu que savoir quelle action il faut faire de manière explicite sera nécessaire voire indispensable.
    Ceci se fait dans des FrameWork types MVC, car chaque page est liée à un contrôleur (le nom du fichier en général) et une action (par défaut c'est index, mais ça peu être ajouter, modifier, supprimer, etc ... par exemple).

    Et bien ce que je te suggère se base ni plus ni moins sur ce principe là en exploitant des champs cachés.
    On adhère ou on adhère pas, ça c'est à toi de voir.
    (fin de la parenthèse)


    Donc si on reprend les choses dès le départ, et bien dans tab.php il faudrait faire comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <td>
        <form method="post" action="suppr.php">
            <input type="hidden" name="cdec" value="<?php echo $list['cdec'];?>" />
             <input type="hidden" name="action" value="supprimer" />
            <input type="image" src="../image/delete.png" alt="supprimer" name="del_img">
        </form> 
    </td>
    Ici le but étant de renvoyer 2 choses :
    - le paramètre cdec et sa valeur
    - l'action a effectuée en paramètre (champ caché), et comme valeur : supprimer
    (le formulaire pointant vers suppr.php)


    Lors de la validation, suppr.php va recevoir ces 2 données en POST.
    Donc théoriquement on va entrer dans le if, qui est l'étape pour que l'utilisateur confirme.
    D'où l'initialisation de la variable $action par la valeur : supprimer_conf
    Mais aussi de la variable $cdec
    Le but étant de les remettre dans 2 champs cachés (tout comme tab.php finalement).

    Une fois le formulaire de suppr.php validé, ces 2 données seront transmises, et comme cette fois la valeur de l'action a changé (supprimer_conf), on entrera alors dans le elseif.
    Rebelote :
    on récupère cdec afin cette fois faire l'action demandé : la suppression (requête SQL, redirection etc ...)


    Le principe est finalement simple, en plus il enlève (théoriquement) toute ambiguïté qu'il peu avoir du fait qu'on transmet l'action a réaliser.

  18. #18
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Par défaut
    Salam ,merci RunCodePhp j'ai ajouter le champs dans le formulaire de la page tab.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <td><form method="post" action="suppr.php">
    <input type="hidden" name="cdec" value="<?php echo $list['cdec'];?>" />
    <input type="hidden" name="action" value="supprimer" />	
     
    <input type="image" src="../image/delete.png" alt="supprimer" name="del_img">
    </form> 
    </td>
    la page suppr.php reste comme ci-dessus , aucun résultat malgré que les deux variables sont bien transmises.

  19. #19
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Je remarque ceci dans suppr.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="submit" name="Sup" value="Supprimer"> &nbsp;&nbsp;
    Si tu mets comme action "Supprimer" ce n'est pas correcte, c'est "supprimer_conf" car c'est l'étape pour que l'utilisateur confirme la suppression.
    De même que si tu change le nom "Sup" au lieu de "action", alors forcément tout n'est plus cohérent.


    Si tu reprends le code que j'avais mis au début, la valeur de l'action dans ce champ caché vient de la variable $action.
    Elle est initialisée à cette étape : (le if)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (isset($_POST['action'], $_POST['cdec']) && $_POST['action'] === 'supprimer') {
        $cdec = $_POST['cdec'];
        $action = 'supprimer_conf';
    }
    Et dans le formulaire sa valeur n'est pas mise "en dur" : (de suppr.php toujours)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <input type="hidden" name="action" value="<?php echo $action;?>" />
    Il vaut mieux ne pas le mettre "en dur".


    Théoriquement ça devrait fonctionner.
    Vérifie tout ça.

  20. #20
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Par défaut
    Re ; les codes sont comme suite:
    page tab.php:
    envoi le contenu du cdec et supprimer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    .........
    <td><form method="post" action="suppr.php">
     <input type="hidden" name="cdec" value="<?php echo $list['cdec'];?>" />
    <input type="hidden" name="action" value="supprimer" />	
    <input type="image" src="../image/delete.png" alt="supprimer" name="del_img">
    </form> 
    </td>
    la page supr.php:
    traite l’opération de suppression ( confirmation ensuite suppression....)
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
     
    <?php
    // Action par défaut
    $action = 'supprimer';
    $cdec='';
     
    if (isset($_POST['action'], $_POST['cdec']) && $_POST['action'] === 'supprimer') {
        $cdec = $_POST['cdec'];
        $action = 'supprimer_conf';
    	echo 'bien dans la boucle if ';
    }
    elseif (isset($_POST['action'], $_POST['cdec']) && $_POST['action'] === 'supprimer_conf') {
        // Vérification de la valeur de cdec (filter_input)
    	echo 'bien dans la boucle else if';
    	// $cdec=36;
    		$int_options = array("options"=> array("min_range"=>0, "max_range"=>1000000000));
    		$verif=filter_var($cdec, FILTER_VALIDATE_INT, $int_options);
        // Si la valeur est correcte
        if ($verif !== FALSE) {
            // Suppression / Requête SQL
    					$supenreg=$cbd->prepare('DELETE  FROM tab where cdec=:cdec ');
    					$supenreg->bindParam(':cdec', $cdec , PDO::PARAM_INT); 
     
    					try {
    						// On envois la requète
    							$supenreg->execute();
    						// libèré la connexion du serveur
    							$supenreg->closeCursor();	
    						header ('location: ../interfaces/tab.php'); 		
     
    						}
    						catch( Exception $e )
    						{
    						  echo 'Erreur d\'affichage : ', $e->getMessage();
    						}  
            // Redirection
            header('Location: ../interfaces/tab.php');
     
        }
    }
    ?>
     
    <!DOCTYPE html>
    <HTML>
    <head>
    ........
    </head>
    <body>
    <?php  echo $_POST['cdec'];echo $_POST['action'] ;  ?> // pour vérifier le contenu transmis de tab.php
    	<div>
    		<table>
    			<th>Confirmation de suppression de l'enregistrement</th>
     
    			<form method="post" action="suppr.php">
    			<input type="hidden" name="action" value="<?php echo $action;?>" />
    			<input type="hidden" name="cdec" value="<?php echo $cdec; ?>" />
    			<input type="submit" name="action" value="Supprimer"> &nbsp;&nbsp;
    			<a href="../interfaces/tab.php">Annuler</a>
    			</form>
    		</table>
    	</div>
     
    </body>
    </html>
    le débogage donne ce qui suit:
    L’utilisateur clique sur l'icone de suppression dans la page tab.php.
    la page suppr.php s'affiche avec message de confirmation de suppression:
    le contenu de $_POST['cdec'] et $_POST['action'] sont bien transmis.
    aussi en entre dans la boucle if
    fin d'affichage de la page suppr.php.

    L'utilisateur clique sur le boutton supprimer :
    rien ne se passe !!!!!
    si je met la valeur de $cdec=36 dans le elseifl le code s'exécute parfaitement
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
     
    .......
    // Vérification de la valeur de cdec (filter_input)
    	echo 'bien dans la boucle else if';
    	 $cdec=36; // initiation de la valeur existante dans la bdd pour testé l'exécution
    		$int_options = array("options"=> array("min_range"=>0, "max_range"=>1000000000));
    		$verif=filter_var($cdec, FILTER_VALIDATE_INT, $int_options);
        // Si la valeur est correcte
        if ($verif !== FALSE) {
            // Suppression / Requête SQL
    					$supenreg=$cbd->prepare('DELETE  FROM tab where cdec=:cdec ');
    					$supenreg->bindParam(':cdec', $cdec , PDO::PARAM_INT); 
     
    					try {
    						// On envois la requète
    							$supenreg->execute();
    						// libèré la connexion du serveur
    							$supenreg->closeCursor();	
    						header ('location: ../interfaces/tab.php'); 		
     
    						}
    						catch( Exception $e )
    						{
    						  echo 'Erreur d\'affichage : ', $e->getMessage();
    						}  
            // Redirection
            header('Location: ../interfaces/tab.php');
     
        }
    }
    donc la $cdec retourne avec une valeur nulle !!!!!!!!!

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [XL-MAC 2011] Suppression message de confirmation (enregistrement xlsm vers xlsx)
    Par GreatTeacherOnizuka dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 30/03/2015, 18h08
  2. Réponses: 9
    Dernier message: 10/05/2010, 21h28
  3. Réponses: 1
    Dernier message: 12/02/2009, 17h13
  4. [MySQL] Enlever un enregistrement et message de confirmation
    Par DjChat dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 22/04/2008, 10h58
  5. Réponses: 2
    Dernier message: 03/08/2004, 17h24

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