Problème de date sur une requête SQL

Petit nouveau ! | 3 Messages

19 août 2009, 15:26

Bonjour,

Jai un soucis sur une requête SQl pas banal :

Je veux faire une liste des 12 mois futurs. On commence donc par le mois en cours et en fin d'année, on passe à l'année suivante. Ensuite on formate la date pour la requête SQL :
    $annee = 2009;    // année de référence
    
    if ($_GET['com'] < $moisbis)      // $_GET['com'] = numéro du mois qu'on cherche ; $moisbis = mois en cours
    {                                              // Si le mois cherché se situe avant le mois en cours dans l'année, on passe à l'année suivante.
      $annee = $annee+1; 
      $datdeb = mysql_real_escape_string($annee.'-'.$_GET['com'].'-01');
      $datfin = mysql_real_escape_string($annee.'-'.$_GET['com'].'-31');
    }
    else                                         // Si le mois cherché se situe après le mois en cours dans l'année, on reste dans l'année en cours
    {
      $datdeb = $annee.'-'.$_GET['com'].'-01';
      $datfin = $annee.'-'.$_GET['com'].'-31';
    }
Ensuite, on fait la requête :
    $cata = mysql_query("SELECT * FROM complan WHERE debut > '".$datdeb."' AND debut < '".$datfin."' AND magasin = '".htmlentities(addslashes($magasin))."' AND tactyp = 'catalogue' AND magasin = '".$magasin."' ORDER by debut") or die(mysql_error());
    $nbre = mysql_num_rows($cata);
La requête fonctionne jusqu'à l'année 2009. Lorsque que nous passons à l'année 2010, ca ne marche plus. Par contre, si je remplace $datdeb et datfin par des dates de 2010 dans la requête, ca fonctionne. Je n'arrive pas à comprendre. Pouvez vous m'aidez ???

Merci
Modifié en dernier par lesurfeurduweb le 19 août 2009, 16:35, modifié 1 fois.

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

19 août 2009, 15:31

Comme indiqué ici sql-bases-donnees/php-sql-etapes-suivre ... 19378.html il nous faut la requête GENEREE et non le code PHP qui va le faire.

De même, il faut être un peu plus explicite: que veulent dire "ça fonctionne" et "ça ne fonctionne plus" ? Message d'erreur ? si oui le donner etc.

De plus, tu as l'air de bidouiller un peu pour faire tes calculs de date, or il y a des fonctions pour ça, voici un point d'entrée : faq-tutoriels/quelques-petites-manipula ... t8323.html

Genre si tu veux savoir quel jour on sera dans 12 mois, c'est pas avec des boucles que tu vas faire ça... le changement d'année étant le premier truc relou à gérer.

Petit nouveau ! | 3 Messages

19 août 2009, 15:49

Bonjour,

Jai un soucis sur une requête SQl pas banal :

Je veux faire une liste des 12 mois futurs. On commence donc par le mois en cours et en fin d'année, on passe à l'année suivante. Ensuite on formate la date pour la requête SQL :

Code : Tout sélectionner

$annee = 2009; // année de référence if ($_GET['com'] < $moisbis) // $_GET['com'] = numéro du mois qu'on cherche ; $moisbis = mois en cours { // Si le mois cherché se situe avant le mois en cours dans l'année, on passe à l'année suivante. $annee = $annee+1; $datdeb = mysql_real_escape_string($annee.'-'.$_GET['com'].'-01'); $datfin = mysql_real_escape_string($annee.'-'.$_GET['com'].'-31'); } else // Si le mois cherché se situe après le mois en cours dans l'année, on reste dans l'année en cours { $datdeb = $annee.'-'.$_GET['com'].'-01'; $datfin = $annee.'-'.$_GET['com'].'-31'; }
Ensuite, on fait la requête :

Code : Tout sélectionner

$cata = mysql_query("SELECT * FROM complan WHERE debut > '".$datdeb."' AND debut < '".$datfin."' AND magasin = '".htmlentities(addslashes($magasin))."' AND tactyp = 'catalogue' AND magasin = '".$magasin."' ORDER by debut") or die(mysql_error()); $nbre = mysql_num_rows($cata);
La requête fonctionne jusqu'à l'année 2009. Lorsque que nous passons à l'année 2010, ca ne marche plus. Par contre, si je remplace $datdeb et datfin par des dates de 2010 dans la requête, ca fonctionne. Je n'arrive pas à comprendre. Pouvez vous m'aidez ???

Merci


Effectivement, il y a des fonctions pour les dates mais je n'ai pas trouver ce qui me convenait.

A propos de la requête, je vais essayer de mieux m'expliquer. Quoiqu'il arrive, je n'ai pas de message d'erreur. En fait, la requête fonctionne( c'est à dire m'affiche le résultat souhaité) jusqu'à l'année 2009. Ensuite pour les années 2010 et suivantes, ca ne m'affiche rien, comme si la requête ne trouvait rien dans la base. La page s'affiche sans message d'erreur et en indiquant aucun résultat. Alors que si je remplace $datdeb et datfin par des dates de 2010 dans la requête, j'ai le résultat souhaité qui s'affiche sur la page.

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

19 août 2009, 15:54

Tu n'expliques pas beaucoup plus... est-ce que tu ne peux pas donner des exemples quand ça fonctionne par exemple "voici la requête, le résultat obtenu est xxxx c'est ok"

Où est le SQL généré que je t'ai demandé ??? As-tu au moins lu les conseils de débuggage ? Si non, merci de le faire et d'appliquer les conseils listés, nous ne sommes pas ici pour jouer aux devinettes. Tu l'aurais fait je n'aurais pas à reposer les questions.

Je ne comprends pas ce que tu veux dire par "une liste des 12" mois futurs. Si tu veux partir du mois courant et lister les 12 prochains mois, il y a des fonctions pour ça, il doit y avoir un point de départ dans la FAQ que je t'ai donnée.

Petit nouveau ! | 3 Messages

19 août 2009, 16:35

OK, pas de soucis, j'ai trouvé le problème. En fait, je suis trop bète. j'excluait le premier et dernier jour du mois avec mes différences strictes dans ma requête.
Merci beaucoup pour la réponse même si cela ne m'a pas aidé.