Requète pour extraire à une date le mois et l'année

Résolu
LaChaux78 Messages postés 581 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 21 novembre 2024 - 20 nov. 2024 à 20:37
LaChaux78 Messages postés 581 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 21 novembre 2024 - 21 nov. 2024 à 05:01

Bonjour, j'ai une requète SQL qui permet d'extraire à une date, le mois et l'année. J'ai testé cette requète sur MySql et le résultat est satisfaisant. Par contre sur ma page PHP le résultat est nul, je ne comprends pas pourquoi voici la requète. Je vous remercie pour votre aide.

SELECT idcalen, ancalen, dacalen, DATE_FORMAT(dacalen, '%b %Y') AS moisAN FROM bag_calendrier ORDER BY dacalen ASC

Et ci-dessous mon code PHP

		echo '<div id="tablo">';		

	// Lister tous les enregistrements avec un lien pour effectuer la modif d'un enregistrement
	$sql = "SELECT idcalen, ancalen, dacalen, DATE_FORMAT(dacalen, '%b %Y') AS moisAN FROM bag_calendrier ORDER BY dacalen ASC";
	$result = executeQuery($sql);
	$an = 0;	// Initialiser les années
	
	while ($donnees = $result->fetch()) {
		if($donnees->moisAN != $an) {	// Si on change d'année
			echo '<h2>'.$donnees->moisAN.'</h2>';	// Indiquer le Mois et l'année
			$an = $donnees->moisAN;	
		}
		$lien = $_SERVER["PHP_SELF"].'?a=mod&amp;idcalen='.$donnees->idcalen;
		echo '<li><a href="'.$lien.'">'.ucfirst(trim(dateFR($donnees->dacalen))).'</a></li>';
    }
		echo '</div>';

4 réponses

jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 4 717
20 nov. 2024 à 21:38

Bonjour,

Tu es en PDO ?  Si oui, as appliqué ceci ?

https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs

Que contient ta fonction executeQuery ?


0
LaChaux78 Messages postés 581 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 21 novembre 2024 32
20 nov. 2024 à 22:39

Bonjour, oui je suis bien en PDO et j'ai bien activé l'affichage des erreurs. Voici ce que contient la fonction "executeQuery" Je vous remercie.

function executeQuery($sql,$datas = NULL) {
    $bdd = bdd();
	
	//On vérifie que la variable sql n'est pas vide
	if(empty($sql)){
		echo "Erreur !  La variable sql est vide !! <br><pre>";
		//var_dump(debug_backtrace());
		echo "</pre>";
		exit;
	}
	
    //exécution de la requête
    try {
        $requete = $bdd->prepare($sql);
        $requete->execute($datas);
    } catch(Exception $e) {
      // en cas d'erreur :
        echo " Erreur ! ".$e->getMessage();
        exit(0); // en cas d'erreur.. arrête le script !
    }
    return $requete;
}

voici ma connexion à ma BDD avec le try/catch

<?php session_start();

date_default_timezone_set('Europe/Paris');
error_reporting(E_ALL ^ E_NOTICE);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

function bdd() {   
    $PARAM_hote        	='';     	
    $PARAM_nom_bdd     	='bandag'; 	
    $PARAM_utilisateur 	='root';          	
    $PARAM_mot_passe   	='';

    try {
	$bdd = new PDO('mysql:host=' . $PARAM_hote . ';dbname=' . $PARAM_nom_bdd, $PARAM_utilisateur, $PARAM_mot_passe);
	$bdd->exec("SET CHARACTER SET utf8");
	$bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
	$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }

    catch(Exception $e) {
	echo 'Impossible de se connecter à la base de donnée</br>';
	echo 'Erreur : ' .  $e->getMessage() . '<br />';
	echo 'N° : ' .      $e->getCode();
    }
    return $bdd;
}
0
jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 4 717
Modifié le 20 nov. 2024 à 22:57

ok parfait.

Alors que te donne ceci ?

echo '<div id="tablo">';		

// Lister tous les enregistrements avec un lien pour effectuer la modif d'un enregistrement
$sql = "SELECT idcalen, ancalen, dacalen, DATE_FORMAT(dacalen, '%b %Y') AS moisAN FROM bag_calendrier ORDER BY dacalen ASC";
$result = executeQuery($sql);


echo "<pre>";
var_dump($result->fetchAll() );
echo "</pre>";
exit;
/*
$an = 0;	// Initialiser les années

while ($donnees = $result->fetch()) {
  if($donnees->moisAN != $an) {	// Si on change d'année
    echo '<h2>'.$donnees->moisAN.'</h2>';	// Indiquer le Mois et l'année
    $an = $donnees->moisAN;	
  }
  $lien = $_SERVER["PHP_SELF"].'?a=mod&idcalen='.$donnees->idcalen;
  echo '<li><a href="'.$lien.'">'.ucfirst(trim(dateFR($donnees->dacalen))).'</a></li>';
}
*/
echo '</div>';
0
LaChaux78 Messages postés 581 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 21 novembre 2024 32
20 nov. 2024 à 23:19

cela me parait bien!

array (size=4)
  0 => 
    object(stdClass)[4]
      public 'idcalen' => string '1' (length=1)
      public 'ancalen' => string '2024' (length=4)
      public 'dacalen' => string '2024-10-05' (length=10)
      public 'moisAN' => string 'Oct 2024' (length=8)
  1 => 
    object(stdClass)[3]
      public 'idcalen' => string '4' (length=1)
      public 'ancalen' => string '2024' (length=4)
      public 'dacalen' => string '2024-10-17' (length=10)
      public 'moisAN' => string 'Oct 2024' (length=8)
  2 => 
    object(stdClass)[8]
      public 'idcalen' => string '2' (length=1)
      public 'ancalen' => string '2024' (length=4)
      public 'dacalen' => string '2024-11-12' (length=10)
      public 'moisAN' => string 'Nov 2024' (length=8)
  3 => 
    object(stdClass)[9]
      public 'idcalen' => string '3' (length=1)
      public 'ancalen' => string '2025' (length=4)
      public 'dacalen' => string '2025-01-09' (length=10)
      public 'moisAN' => string 'Jan 2025' (length=8)
0
jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 4 717
Modifié le 20 nov. 2024 à 23:57

Donc ta requete retourne bien quelque chose...

le souci se trouve donc dans le reste de ton programme

0
LaChaux78 Messages postés 581 Date d'inscription lundi 25 juillet 2016 Statut Membre Dernière intervention 21 novembre 2024 32
21 nov. 2024 à 05:01

Bonjour au lieu d'initialiser $an = 0; j'ai initialisé $an = ''; et ça fonctionne je te remercie.

0