sql select et condition if

Default
,

Bonjour,

Voila je rencontre un petit problème avec mon code. je récupère bien l'id sur une autre page, je fais une requete préparé puis je fais une boucle pour afficher mes randonnées. Sauf que j'aimerais insérer dynamiquement le titre de la page à quoi celle-ci correspond ainsi que pour le H1 de ma page et rien ne fonctionne.

Ce que je fais

Ce que j'aimerais comme dit précédemment, c'est de pouvoir insérer dynamiquement le titre de la page à quoi celle-ci correspond ainsi que pour le H1 de ma page

<?php require('include/connexion_bdd.php');

if (isset($_GET['departement_id'])) {

$sql = $bdd->prepare( "SELECT b.*, d.*
        FROM base_rando b
        INNER JOIN departement d 
        ON b.departement_id = d.departement_id
        WHERE date_creation >= CURRENT_DATE AND d.departement_id = ? ORDER BY date_creation
        ");


$sql->execute([$_GET['departement_id']]);

}

?>



<!DOCTYPE html>
<html lang="fr">
  <head>
    <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

    <!-- Bootstrap CSS -->
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
    <link href="//maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css" rel="stylesheet">
    <link href="https://fonts.googleapis.com/css?family=Helvetica Neue:300,400,500,700,900&display=swap" rel="stylesheet">
    <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.8.1/css/all.css" integrity="sha384-50oBUHEmvpQ+1lW4y57PTFmhCaXp0ML5d60M1M7uH2+nqUivzIebhndOJK28anvf" crossorigin="anonymous">
    <link href="https://fonts.googleapis.com/css?family=Montserrat:200,200i,300,300i,400,400i,500,600,700,800,900&display=swap" rel="stylesheet">

    <!-- Bikeride CSS -->
    <link rel="stylesheet" href="/monsite/asset/css/style.css">

   <!-- Bikeride favicon -->
    <link rel="shortcut icon" sizes="32x32" href="/monsite/asset/img/favicon-ConvertImage.ico" type="image/ico">

    <title>Agenda randonnées VTT - <?php ?></title>
    <base href="/monsite/" />
  </head>

 <body>

<header>
     <?php require('include/nav.php'); ?>
      <center><div class="jumbotron jumbotron-fluid jumbotron-bis">
        <div class="container">
          <br> <br>
          <h1 class="text-light"><?php ?></h1>
          <p class="text-warning">Toutes les prochaines sorties</p>
          </a>
        </div>
      </div>
      </center>
  </header>
<div class="container">

    <div class="container">
      <div class="col-md-12">
        <h4 class="index-h4 text-dark">Les prochaines sorties!</h4>
      </div>
      <hr class="bg-warning">
      <?php
        if($sql->rowCount() > 0)
        {
          while ($d = $sql->fetch(PDO::FETCH_ASSOC)) {

            ?>
         <div class="card m-1">
           <div class="card-header" role="tab">
              <div class="icon_box float-left"> 
                <div class="top text-secondary"> <?php echo date('d',strtotime($d['date_creation'])) ;?></div>
                <div class="bott text-secondary"> <?php echo date('M',strtotime($d['date_creation'])) ;?></div>
                <hr class="bg-warning">
              </div>
              <style>
               .randoh5 {font-size: 17px;}
               .randoem {font-size: 13px;}
               </style>
               <h5 class="mb-0 randoh5">
                <?php $rando_url = str_replace(' ', '-', $d['rando']);?>
                <?php $ville_url = str_replace(' ', '-', $d['ville']);?>

                <?php echo '<a href="evenement.php?id='.$d['id'].'/'.$rando_url.'-à-'.$ville_url.'-'.$d['dept_nom'].'-'.$d['dept_num'].'" title="Description de la randonnée sélectionnée" class="text-dark" target="_blank">'; ?>&emsp;&emsp;&nbsp;<?php echo $d['ville'].' - ' .$d['dept_num']. '</a>';?>
                <?php echo '<a href="evenement.php?id='.$d['id'].'/'.$rando_url.'-à-'.$ville_url.'-'.$d['dept_nom'].'-'.$d['dept_num'].'" title="Description de la randonnée sélectionnée" class="float-right text-warning" target="_blank"><i class="fas fa-arrow-circle-right text-warning"></i></a>'; ?>  
               </h5>
               <div class="py-2">
                 <p class="text-warning">&emsp;&emsp;&nbsp;  <?php echo $d['rando'];?><br>&emsp;&emsp;&nbsp; <em class="text-secondary randoem">Randonnée vtt</em></p>      
               </div>
            </div>            
         </div>
         <?php
          } 
        }
        else {
        ?>
        <div class="alert bg-light" role="alert">
        <?php

         echo '<h4 class="alert-heading"><i class="fas fa-exclamation-triangle text-warning"></i> Désolé!</h4>
               <p>Aucune randonnée disponible pour ce département à fin 2019.</p>
               <a href="rando_vtt.php" class="text-warning"><button type="button" class="btn btn-outline-dark"><i class="fas fa-arrow-left text-warning"></i> Retour</a>';
         }
        ?>
        </div>
        <?php
            $sql->closeCursor();
        ?>  

    </div>

Ce que je veux

J'aimerais un peu d'aide. merci d'avance

Ce que j'obtiens

Décrivez ici vos erreurs ou ce que vous obtenez à la place de ce que vous attendez :(

25 Réponse

1
162351
,

Salut PEGANDPHIL,

si j'ai bien compris ton problème le H1 devrait se remplir automatiquement et ça ne le fait pas c'est bien ça? A quoi devrait correspondre ce titre justement selon ce que tu récupères dans ta BDD? Car dans le code que tu fournis, il n'y a rien entre les balises php.

 <h1 class="text-light"><?php ?></h1>

Si tu pouvais décrire précisément ce qui doit se trouver entre ces balises on serait sûrement en mesure de comprendre ce qui ne fonctionne pas :)

Default
,

Bonjour Syngates68127,
Merci pour ton retour.
Mon problème est le suivant :
Je récupère bien l'id comme afficher dans le code et je fais ensuite une boucle while pour afficher les données. Jusqu'à là aucun problème !
Mon problème vient du fait que je ne peux insérer dynamiquement le titre de mes pages ainsi que le h1. En faite, tout ce qui est avant ma boucle ne fonctionne pas ?

Default
,

bonsoir,
Quelles sont les données que tu souhaites afficher dans ton title et ton h1 ? Est ce le mois correspondant aux randos que tu affiches comme dans ton autre post ?
Sans t'occuper de ton HTML , est ce que tu arrives à recuperer les données que tu souhaites juste en php ?

Default
,

Bonsoir,
Non je souhaite afficher le nom du département dynamiquement tout simplement. mais tout ce qui est avant ma boucle ne fonctionne pas

Default
,

là sur ce poste je souhaite afficher dynamiquement dans le titre de ma page et dans mon H1 le departement correspondant. concernant le second j'ai trouvé une solution alternative

Default
,

Oui j'arrives à récupérer les données . d'ailleurs je fais une boucle qui m'affiche bien mes éléments. mais tout ce qui est avant la boucle, je n'arrive pas à l'afficher dynamiquement.....

Default
,

Tu dois récuperer le résultat de ta requete préparée ( par un fetch ) avant de vouloir l'afficher . Par exemple , essaie de rajouter juste après ta ligne $sql->execute([$_GET['departement_id']]);

$d = $sql->fetch(PDO::FETCH_ASSOC);

Là tu récupères un enregistrement .
A près, Tu peux maintenant afficher le département qui doit être contenu dans le résultat de ta requête ( $d ) dans ton H1 .

Default
,

Je vais essayer de suite

Default
,

Malheureusement ça ne fonctionne pas. En meme temps c'est logique puisque dans ma boucle while j'utilise déjà la variable $d.

Default
,

$d c'était pour l'exemple :) Appelle là comme tu veux . $resultat par exemple .
Que te renvoie un var_dump de $resultat? :)

Default
,

Merci, ça fonctionne, mais malheureusement cela m'affiche qu'une seule rando et ne respecte plus mon current_date.
Avant j'avais une rando le 27 novembre puis une autre en décembre.
Du coup il m'affiche bien le département mais m'affiche plus que celle de décembre. C'est le chien qui se mord la queue

Default
,

je ne comprends pas
Tu fais bien :
1/$resultat = $sql->fetch(PDO::FETCH_ASSOC);
2/ j'affiche mon titre
3/ ton while ($d = $sql->fetch(PDO::FETCH_ASSOC)) .... etc ?

Sinon tu peux aussi faire une requete avant juste pour récupérer ton département ... puisque tu as son id $_GET['departement_id'] :)

Default
,

j'ai respecté scrupuleusement ce que tu m'as dit mais en vain. Je pense que ta seconde solution me paraît plus logique. je vais essayer une requête.
1/$resultat = $sql->fetch(PDO::FETCH_ASSOC);
En tout cas merci pour ta patience

Default
,

requête juste avant=> 1/$resultat = $sql->fetch(PDO::FETCH_ASSOC);

Default
,

Bonjour,
Non mais là c'est moi qui suis une mule ....
J'ai lu trop rapidement ta réponse avant mon dernier message .
Forcément , à chaque fetch , il te renvoie une réponse de ta requete ( Au premier fetch , la 1ere réponse , au second fetch , la seconde réponse etc...)

Pour faire ce que tu veux , il te faut faire un fetchAll ( 1/ $resultats = $sql->fetchAll(PDO::FETCH_CLASS) . Le fetchAll va te renvoyer l'ensemble des réponses correspondantes à ta requete ( Tu peux virer le fetch_argument si le type de retour ne te convient pas )
. Et tu remplaces ton while par un foreach pour parcourir et afficher chaque résultat de ta requete .
Pardon pour cette inattention

Default
,

Merci pour ton retour. Je laisse tomber car rien ne fonctionne ensemble. j'ai retourné le problème dans tous les sens, rien y fait. encore un peu plus d'apprentissage et peut etre que j'y arriverais. Pour le moment je réfléchi à un plan B. Merci en tout cas et bonne continuation...

Default
,

Comme tu veux . A mon avis , c'est dommage , ce n'est pas grand chose à corriger .
Si tu veux , dis moi ce que te renvoie ta requete fetchAll . ( copie colle le résultat d'un var_dump($resultats) pour garder l'appellation de mon précédent exemple de requete ) . Car c'est dur de s'aider quand on ne connait pas la structure et un exemple des valeurs des données renvoyées ;)
Ne te décourages pas , c'est en cherchant à comprendre et résoudre ses erreurs qu'on apprend le mieux :)
Pistes pour résoudre le problème : Perso , je fais mes requetes et mes traitements php pour récupérer les informations à afficher avant . J'affecte ensuite les résultats de ses traitement dans des variables, variables que j'envoie ensuite à la vue pour affichage .
Tu peux aussi regarder si tu ne connais déjà le fonctionnement de ob_start . Il me semble qu'il existe un excellent tutoriel sur le sujet sur grafikart.

Default
,

derniere piste pour résoudre ton problème :
1/Avant ton php actuel , Fais une premiere requete pour recupérer le département , tu affectes le résultat de ta requete ( ici ton département ) dans une variable ( $departement par exemple) .
2/ tu laisse ton code actuel , tu ne fais juste que récupérer ton département à afficher dans ta variable $département en lieu de et place de ta façon actuelle de le récupérer .

Default
,

Merci en tout cas. Je vais réessayer de nouveau. pourtant j'en bouffe des tutos et de la doc PHP.

Default
,

Salut thugg, merci mille fois. ça fonctionnnnnnnne!!!!!!!!!!!!!!
Merci pour ton soutien psychologique. Effectivement, la seconde requête était de mise. voici ce que ça donne.
Je ne sais pas si c'est propre mais ça marche.

require('include/connexion_bdd.php');

if (isset($_GET['departement_id'])) {

$req = $bdd->prepare( "SELECT b., d.
FROM base_rando b
INNER JOIN departement d
ON b.departement_id = d.departement_id
WHERE b.departement_id = ? AND date_creation >= CURRENT_DATE ORDER BY date_creation
");

$req->execute([$_GET['departement_id']]);
$datas = $req->fetch();

}

if (isset($_GET['departement_id'])) {

$sql = $bdd->prepare( "SELECT b., d.
FROM base_rando b
INNER JOIN departement d
ON b.departement_id = d.departement_id
WHERE b.departement_id = ? AND date_creation >= CURRENT_DATE ORDER BY date_creation
");

$sql->execute([$_GET['departement_id']]);

}

?>

<!DOCTYPE html>


<!-- Required meta tags -->

<!-- Bootstrap CSS -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
<link href="//maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css" rel="stylesheet">
<link href="https://fonts.googleapis.com/css?family=Helvetica Neue:300,400,500,700,900&display=swap" rel="stylesheet">
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.8.1/css/all.css" integrity="sha384-50oBUHEmvpQ+1lW4y57PTFmhCaXp0ML5d60M1M7uH2+nqUivzIebhndOJK28anvf" crossorigin="anonymous">
<link href="https://fonts.googleapis.com/css?family=Montserrat:200,200i,300,300i,400,400i,500,600,700,800,900&display=swap" rel="stylesheet">

<!-- Bikeride CSS -->
<link rel="stylesheet" href="/monsite/asset/css/style.css">

<!-- Bikeride favicon -->

<title></title>

<base href="/monsite/" />

<header>
   <?php require('include/nav.php'); ?>
    <div class="jumbotron jumbotron-fluid jumbotron-bis">
      <div class="container">
        <br> <br>
        <h1 class="text-light"><?php echo'Randonnées vtt - ' .$datas['dept_nom'] ;?></h1>         
        </a>
      </div>
    </div>
</header>

<main class="container">
  <div class="col-md-12">
    <h3 class="index-h4 text-dark"></h3>
  <hr class="bg-warning">
   <?php
    if($sql->rowCount() > 0)
    {
      while ($d = $sql->fetch(PDO::FETCH_ASSOC)) {          
     ?>
     <div class="card m-1">
       <div class="card-header" role="tab">
          <div class="icon_box float-left"> 
            <div class="top text-secondary"> <?php echo date('d',strtotime($d['date_creation'])) ;?></div>
            <div class="bott text-secondary"> <?php echo date('M',strtotime($d['date_creation'])) ;?></div>
            <hr class="bg-warning">
          </div>
          <style>
           .randoh5 {font-size: 17px;}
           .randoem {font-size: 13px;}
           </style>
           <h5 class="mb-0 randoh5">
            <?php $rando_url = str_replace(' ', '-', $d['rando']);?>
            <?php $ville_url = str_replace(' ', '-', $d['ville']);?>             
            <?php echo '<a href="evenement.php?id='.$d['id'].'/'.$rando_url.'-à-'.$ville_url.'-'.$d['dept_nom'].'-'.$d['dept_num'].'" title="Description de la randonnée sélectionnée" class="text-dark" target="_blank">'; ?>&emsp;&emsp;&nbsp;<?php echo $d['ville'].' - ' .$d['dept_num']. '</a>';?>
            <?php echo '<a href="evenement.php?id='.$d['id'].'/'.$rando_url.'-à-'.$ville_url.'-'.$d['dept_nom'].'-'.$d['dept_num'].'" title="Description de la randonnée sélectionnée" class="float-right text-warning" target="_blank"><i class="fas fa-arrow-circle-right text-warning"></i></a>'; ?>  
           </h5>
           <div class="py-2">
             <p class="text-warning">&emsp;&emsp;&nbsp;  <?php echo $d['rando'];?><br>&emsp;&emsp;&nbsp; <em class="text-secondary randoem">Randonnée vtt</em></p>      
           </div>
        </div>            
     </div>
    <?php
      } 
    }
    else {
    ?>
    <div class="alert bg-light" role="alert">
    <?php

     echo '<h4 class="alert-heading"><i class="fas fa-exclamation-triangle text-warning"></i> Oups!</h4>
           <p>Aucune randonnée disponible pour le moment</p>
           <a href="rando_vtt.php" class="text-warning"><button type="button" class="btn btn-outline-dark"><i class="fas fa-arrow-left text-warning"></i> Retour</a>';
     }
      $sql->closeCursor();
    ?>
    </div>
    </div> 
1