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. #21
    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
    Points : 3 947
    Points
    3 947
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    		<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>
    Si ton code est exactement comme celui c-dessus, alors il y a une erreur de HTML, peut être que le navigateur n'apprécie pas et renvoie rien concernant le formulaire.
    (pure supposition).

    Tu as 2 éléments du même nom (action), ce n'est pas correcte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    			<input type="hidden" name="action" value="<?php echo $action;?>" />
    			<input type="submit" name="action" value="Supprimer">
    Change le nom du submit par exemple.

    Le tableau n'a pas de ligne de définie (pas de tr).
    Le formulaire se trouve dans un tableau mais dans aucune cellule (un td th).
    Tout élément doit se trouver dans une cellule, et le ou les cellules doivent être dans une ligne.

    Par ailleurs, la norme W3C dit que tous les éléments dans un formulaire (input, select, textarea, etc ...) doivent être placés dans un élément de type bloc.
    L'élément le plus adapté est : <fieldset>, par moment accompagné d'une légende <legend>
    On voit cependant une <div>, des <p>, etc ... Pourquoi pas.

    Quoi qu'on fasse faut respecter ces règles de bases sinon on peu faire fasse à des comportements plus ou moins hasardeux ou capricieux des navigateurs.
    Exemple :
    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
     
    <!-- FORMULAIRE -->
    <form>
        <fieldset>
            <legend>Veuillez confirmer la suppression</legend>
            <input type="submit" name="action" value="supprimer_conf" />
        </fieldset>
    </form>
     
    <!-- TABLEAU -->
    <table><!-- déclaration du tableau -->
    <tr><!-- ligne 1 -->
        <th>Cellule 1</th>
        <th>Cellule 2</th>
    </tr>
    <tr><!-- ligne 2 -->
        <td>Cellule 1</td>
        <td>Cellule 2</td>
    </tr>
    </table>

    Je ne vois pas vraiment l'utilité d'un tableau dans ce fichier suppr.php.


    Au passage, théoriquement on n'utilise pas (ou plus) le HTML pour de la mise en forme, mais essentiellement le Css.
    (on peu rajouter des styles sur une balise form, un fielset, input, etc ... pour obtenir une présentation correcte).

    Attention tout de même à ne pas utiliser les tableaux comme élément HTML quelque peu fourre-tout.
    Si c'est une partie Admin, pourquoi pas (faut au moins faire un code valide), mais pour une partie publique ou le référencement est nécessaire ce n'est plus pertinent, ça peu être très néfaste même.
    C'est juste une remarque.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  2. #22
    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 : 52
    Localisation : Algérie

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

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut
    RunCodePhp:
    Le tableau n'a pas de ligne de définie (pas de tr).... ect....
    j'étais juste dans le fonctionnel bien sur il reste la mise en forme avec du css merci pour les orientations
    actuellement je suis absorbé par la variable $_POST['cdec'] qui prend la valeur null après la validation de suppression.

  3. #23
    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
    Points : 3 947
    Points
    3 947
    Par défaut
    j'étais juste dans le fonctionnel bien sur
    Effectivement, il vaut mieux toujours faire simple au départ.
    Mais encore faut il que le code simple HTML ne soit pas erroné.
    Des balises manquantes peu provoquer des dysfonctionnent comme celui que tu as.
    Comme 2 fois le même nom (2 fois action), etc ...
    C'est largement suffisant pour que cela ne fonctionne mas normalement.
    Comme je ne vois pas d'autres erreurs que celles là, je me dis que ...

    En supprimer justement ce qui ne sert à rien (<table>, <th>, etc ...) juste conserver le <form> avec un <fieldset> (comme l'exemple), avoir un seul input avec comme nom "action", obtiens tu le même problème de valeurs null en POST ?
    (remets ton code avec ces correction qu'on voit)


    Aussi, avant de valider la confirmation de la suppression, et en faisant un clic droit dans la page pour afficher le code source HTML généré, vois tu les divers éléments du formulaire avec les valeurs attendues/prévues (action et cdec) ?


    Par ailleurs, comme la suite de cette dernière action (après validation) est assez particulière (contrôle, requête SQL et surtout une redirection), pour juste vérifier on peu faire comme ceci :
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    elseif (isset($_POST['action'], $_POST['cdec']) && $_POST['action'] === 'supprimer_conf') {
        print_r($_POST);
        // Vérification de la valeur de cdec (filter_input)
        echo 'bien dans la boucle else if';
     
        exit(); // point d'arrêt
        // ... etc ...
    }
    Je ne vois toujours pas de point d'arrêt dans ton code après le header('Location: ...'), normalement il faut le mettre sinon tu risque d'avoir des problèmes.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  4. #24
    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 : 52
    Localisation : Algérie

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

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut
    effectivement ta raison , le temps que tu rédigé ton poste j'étais en plein chantier de ma page suppr.php.
    Comme 2 fois le même nom (2 fois action), etc ...
    bien vue +1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    elseif (isset($_POST['sub'], $_POST['cdec']) && $_POST['action'] === 'supprimer_conf')
    donc c'est isset($_POST['sub'] au lieu de isset($_POST['action'],
    ensuite j'ai affecté a la $cdec= $_POST['cdec'] après le elseif parce que elle prenais la valeur null une fois dans la boucle elseif.

    code complet de la 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
    66
    67
    68
    69
    70
     
    <?php
    ........
    // Action par défaut
    $action = $_POST['action'];
    $cdec='';
     
    if (isset($_POST['action'], $_POST['cdec']) && $_POST['action'] === 'supprimer') {
        $cdec = $_POST['cdec'];
        $action = 'supprimer_conf';
    	echo 'bien dans la boucle if ';
    	echo $_POST['cdec'];echo $_POST['action'] ;
    }
    elseif (isset($_POST['sub'], $_POST['cdec']) && $_POST['action'] === 'supprimer_conf') {
     
    echo 'bien dans la boucle else if';	    
         // affectation de la valeur $_POST['cdec']
    	$cdec = $_POST['cdec'];
     
     
    // 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>
    ....ect...
    </head>
    <body>
    <?php    ?>
    	<div>
     
    			<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="cdec" value="<?php echo $cdec; ?>" />
    			// changement name du submit action par sub
                            <input type="submit" name="sub" value="Supprimer"> &nbsp;&nbsp;
    			<a href="../interfaces/tab.php">Annuler</a>
     
    	</div>
     
    </body>
    </html>

  5. #25
    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
    Points : 3 947
    Points
    3 947
    Par défaut
    elseif (isset($_POST['sub'], $_POST['cdec']) && $_POST['action'] === 'supprimer_conf')
    Si tu veux vérifier la présence du bouton submit "sub", alors il serait mieux de faire ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    elseif (isset($_POST['action'], $_POST['sub'], $_POST['cdec']) && $_POST['action'] === 'supprimer_conf')
    En somme on conserve la vérification sur "action" en rajoutant "sub" (et non remplacer l'un par l'autre).
    Il faut que ces 3 éléments existent.

    Je ne vois pas la balise fermante </form> ?
    Mise à part ça, obtiens tu toujours des erreurs ?
    Entre tu dans cette alternative ou pas ?
    Que donne le code source HTML généré ? (est il bon ou pas) ?



    Je ne vois pas pourquoi tu mets 2 fois une redirection pointant vers la même page.
    Théoriquement il faudrait conserver juste celle dans le try, (en oubliant pas le exit car ici il n'y en a pas).

    Car s'il y a une erreur, elle sera "catchée" (attrapée), donc c'est le code dans la catch qui sera exécuté, et c'est un echo (un affichage) qui est fait.
    Faire un header() (même en mettant un exit après) alors que juste avant on aura fait un revoie (echo) va provoquer l'erreur très connue :
    Warning ... header allready sent by ... (une entête a déjà été renvoyé ...)
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  6. #26
    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 : 52
    Localisation : Algérie

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

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut
    Re ;
    Mise à part ça, obtiens tu toujours des erreurs ?
    non aucune erreur sa fonction très bien avec suppression de l'enregistrement voulu.
    Je ne vois pas pourquoi tu mets 2 fois une redirection pointant vers la même page.
    c'est du au copie coller

  7. #27
    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
    Points : 3 947
    Points
    3 947
    Par défaut
    non aucune erreur sa fonction très bien avec suppression de l'enregistrement voulu.
    Ok.

    N’oublie pas le </form> (à moins que ce soit juste un oubli ici seulement).
    de même le rajout de $_POST['action'] dans le isset(), car si tu ne le rajoute pas et s'il n'existe pas, c'est le :
    $_POST['action'] === 'supprimer_conf'
    qui va provoquer une erreur.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  8. #28
    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 : 52
    Localisation : Algérie

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

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut
    Merci RunCodePhp pour ta patience je te doit une glace

  9. #29
    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
    Points : 3 947
    Points
    3 947
    Par défaut
    Merci RunCodePhp pour ta patience je te doit une glace
    Faudra rajouter une paille, car arrivée à la Réunion ça ressemblera plus à un jus de fruit.
    (je déconne).

    Ya pas d'koi
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

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, 17h08
  2. Réponses: 9
    Dernier message: 10/05/2010, 20h28
  3. Réponses: 1
    Dernier message: 12/02/2009, 16h13
  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, 09h58
  5. Réponses: 2
    Dernier message: 03/08/2004, 16h24

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