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 :

Code répété deux fois..


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Homme Profil pro
    Webmaster
    Inscrit en
    Juillet 2015
    Messages
    518
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juillet 2015
    Messages : 518
    Points : 184
    Points
    184
    Par défaut Code répété deux fois..
    Bonjour,

    Je m'explique, voila je fais dans mon espace admin sur mon site, une page pour gérer la validation ou le refus de petites annonces.. dans le code de ma page check.php j'ai les deux portions de code suivant :

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
    // Valider une annonce
    if (isset($_GET['valann'])) {
        $req = $pdo->prepare('SELECT a.idann, a.title, u.username, u.email
    FROM ad a
    INNER JOIN users u ON a.idmbr = u.idmbr
    WHERE a.idann = ?');
        $req->execute([$_GET['valann']]);
        $ad = $req->fetch();
     
        if ($ad) {
            $req = $pdo->prepare('UPDATE ad SET status = 1 WHERE idann = ?')->execute([$_GET['valann']]);
     
            mail($ad->email, 'Votre annonce est en ligne !', "Bonjour $ad->username,
     
    Nous vous confirmons que votre nouvelle annonce est désormais en ligne :
    ".URL_SITE."/test-".$ad->idann.".html
     
    A tout moment, vous pouvez gérer l'ensemble de vos annonces en ligne en vous connectant sur votre compte personnel à l'adresse suivante :
    ".URL_SITE."/login.php
     
    Si vous avez la moindre question quant à notre fonctionnement, n'hésitez pas à répondre à ce mail, nous ne manquerons pas de vous aider dans votre recherche d'élèves.
     
    Merci de votre confiance et à très bientôt sur notre site.", $headers);
     
            $_SESSION['flash']['success'] = 'L\'annonce a bien été validée';
        }
    }
     
    // Refuser une annonce (sensiblement le même code qu'au dessus..)
    if (isset($_GET['refann'])) {
        $req = $pdo->prepare('SELECT a.idann, a.title, u.username, u.email
    FROM ad a
    INNER JOIN users u ON a.idmbr = u.idmbr
    WHERE a.idann = ?');
        $req->execute([$_GET['refann']]);
        $ad = $req->fetch();
     
        if ($ad) {
            $req = $pdo->prepare('UPDATE ad SET status = 2 WHERE idann = ?')->execute([$_GET['refann']]);
     
            mail($ad->email, 'Votre annonce est refusée', "Bonjour $ad->username,
     
    L'annonce « $ad->title » que vous avez déposée sur notre site ne respecte pas nos règles de diffusion.
     
    A tout moment, vous pouvez gérer l'ensemble de vos annonces en ligne en vous connectant sur votre compte personnel à l'adresse suivante :
    ".URL_SITE."/login.php
     
    Merci de votre confiance et à très bientôt sur notre site.", $headers);
     
            $_SESSION['flash']['success'] = 'L\'annonce a bien été refusée';
        }
    }

    Mon code fonctionne très bien mais je répète le début du code pour valider ou refuser une annonce. Avez vous une solution pour que la première requête soit écrite une seule fois dans le code ?

    mes liens de validation ou de refus (du classique) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="check.php?valann=<?php echo $ad->idann; ?>">Valider</a> | <a href="check.php?refann=<?php echo $ad->idann; ?>">Refuser</a>
    Merci à vous

  2. #2
    Membre éclairé Avatar de Geoffrey74
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2007
    Messages
    515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2007
    Messages : 515
    Points : 760
    Points
    760
    Par défaut
    Salut,

    tu fais un fonction, qui contient le code similaire, et tu lui transmet les variables dont il a besoin.

    Voir ici pour les fonctions ou là

  3. #3
    Membre habitué
    Homme Profil pro
    Webmaster
    Inscrit en
    Juillet 2015
    Messages
    518
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Juillet 2015
    Messages : 518
    Points : 184
    Points
    184
    Par défaut
    ok, je vais bosser dessus merci à toi.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    à mon avis, il vaudrait mieux bosser sur la CONCEPTION du code, afin de le simplifier.

    1/ Pourquoi 'valann' et 'refann', alors qu'ils représente tous deux l'idann ?
    Il est plus logique et plus CLAIR de mettre dans l'URL :
    • ?idann=....&action=valider

    ou
    • ?idann=....&action=annuler

    On récupère alors :

    2/ traitement :
    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
    <?php
    $idann = ( !empty($_GET['idann']) )? $_GET['idann'] : 0;
    $action = ( !empty($_GET['action']) )? $_GET['action'] : '';
     
    if ( empty($idann) || !is_numeric($idann) || empty($action) || !in_array($action, array('valider','annuler')) )
    {
      header('location:..index.php'); // redirection si erreur
      exit;
    }
    // sinon, ok, on continue
    // ---------------------------------------
    // Là, on peut factoriser ce qui est commun
        $req = $pdo->prepare('SELECT a.idann, a.title, u.username, u.email
            FROM ad a
            INNER JOIN users u ON a.idmbr = u.idmbr
            WHERE a.idann = ?');
        $req->execute([$idann]);
        $ad = $req->fetch();
     
        // préparation de la requête de modification (identique dans les 2 cas)
        $req_update = $pdo->prepare('UPDATE ad SET status = ? WHERE idann = ?');
     
        if ($ad) {
            // ICI, on sépare les 2 CAS
            if( $action == 'valider' )
            {
                $req_update->execute( [1,$idann] );
                // envoi email
                // .......
            } elseif( $action == 'annuler' ){
                $req_update->execute( [2,$idann] );
                // envoi email
                // .......
            }
        }

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/03/2014, 15h36
  2. Caractère répété deux fois
    Par Horrigan dans le forum C
    Réponses: 9
    Dernier message: 30/08/2006, 17h46
  3. Lire deux fois un inputstream
    Par Guybrush dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 05/09/2005, 14h50
  4. Réponses: 14
    Dernier message: 30/03/2005, 21h50
  5. Sélectionner un même enregistrement deux fois...
    Par Manu0086 dans le forum Langage SQL
    Réponses: 11
    Dernier message: 02/02/2004, 13h09

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