Probleme stat de date

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Probleme stat de date

Re: Probleme stat de date

par @rthur » 23 déc. 2014, 14:54

Bonjour,

Quelles sont les requêtes SQL que tu effectues ?
Les as-tu testées dans phpmyadmin ? Si oui, quel est le message d'erreur ?

Je viens de tester la requête suivante et ça fonctionne :
SELECT * FROM beneficiare WHERE Debut>='2014-01-01'  AND  Fin<='2015-12-31'

Re: Probleme stat de date

par Yujji » 23 déc. 2014, 11:14

toujours pas de réponse j'y arrive toujours pas

Re: Probleme stat de date

par Yujji » 04 déc. 2014, 16:35

le code marche toujours pas en testant les 2 requêtes je t'envoi le fichier de ma base avec mes donnée . et pour le nom de ma base il manque une lettre dans bénéficiaire que j'ai bien sur adapter ^^ merci a toi de ton aide

Re: Probleme stat de date

par yann18 » 03 déc. 2014, 15:25

désolé j'ai mal placé la parenthèse ouvrante.en fait la parenthèse ouvrante devrait se placer juste après la clause where .Bien sûr que ces parenthèses dans ton cas sont inutiles.Mais la 2ème requête( avec l'écriture simplifiée) ne devrait pas poser problème je ne sais pas si tu l'as testée.
    $sql ="SELECT *  FROM beneficiaire WHERE ( Debut  BETWEEN '$debut'  AND  '$fin') AND (Fin BETWEEN '$debut'  AND  '$fin' ) ";
//ou avec l'écriture simplifiée
 $sql ="SELECT *  FROM beneficiaire WHERE Debut>='$debut'  AND  Fin<='$fin' ";
Quant à la date fin entrée il faut vérifier qu'après envoie du formulaire tu la reçois en intégralité, en faisant :
var_dump($dateFin);
si ta requête ne marche toujours pas, postes la structure de la table ainsi que les données à insérer on va l'essayer en ligne sur sqlfiddle.com

Re: Probleme stat de date

par Yujji » 03 déc. 2014, 13:58

merci mais je me retrouve avec ce message


"Warning: PDO::query(): SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'BETWEEN '2014-01-01' AND '2014-12-01') AND (Fin BETWEEN '2014-01-01' AND '20' at line 1 in D:\wamp\www\Frat\AfficheStat.php on line 41"

en recopier ton code et je comprend pas pourquoi la date ce transforme en 20 pour la comparaison avec le colonne Fin

Re: Probleme stat de date

par yann18 » 02 déc. 2014, 16:17

Quand tu soumets ton formulaire avec les dates début et fin, essaies d'afficher ces dates pour voir si elles sont conformes au format des dates attendues(aaaa-mm-dd).
Toutefois ta requête ne prends pas en compte la date fin fournie par l'internaute dans ce sens que cette requête ne compare que les dates début comprises entre la date début et et la date fin mais ne compare pas la date fin stockée en bd avec celle renseignée par l'internaute.Tu aurais dû écrire ceci:
    $sql ="SELECT *  FROM beneficiaire WHERE Debut ( BETWEEN '$debut'  AND  '$fin') AND (Fin BETWEEN '$debut'  AND  '$fin' ) ";
//ou avec l'écriture simplifiée
 $sql ="SELECT *  FROM beneficiaire WHERE Debut>='$debut'  AND  Fin<='$fin' ";
Essaies de tester la requête avec phpmyadmin.si ça ne marche pas, postes la ddl de la table.

Re: Probleme stat de date

par Yujji » 02 déc. 2014, 15:24

voila dans ma base j'ai 1 client qui a une date de debut = 2014-12-01 et une date Fin = 2015-03-01 quand je recherche une periode de 2014-12-01 à 2015-02-01 je trouve mon client mais quand je cherche de 2015-01-01 à 2015-03-01 je trouve personne alors que j'ai une personne qui est encore comprise dedans comprend tu et j'ai modifier mon code avec ce que tu ma passer ces plus propre

Re: Probleme stat de date

par yann18 » 02 déc. 2014, 12:32

si ta requête prends en compte la date de début c'est parce que le jour du mois de cette date est certainement composé d'un seul chiffre.En revanche pour une date de début ou de fin dont le jour du mois est à 2 chiffres( par exemple le 15) la date sera invalide car ton algo ajoute un zéro supplémentaire au jour du mois.
Tu peux effectuer le débogage en affichant la requête sql après soumission du formulaire:
    $jour           =       1;
                $moisD          =       $_POST['moisD'];
                $anneeD         =       $_POST['anneeD'];
                $debut          =       $anneeD.'-'.$moisD.'-0'.$jour;

                $moisF          =       $_POST['moisF'];
                $anneeF         =       $_POST['anneeF'];
                $fin            =       $anneeF.'-'.$moisF.'-0'.$jour;
               
                $sql ="SELECT *  FROM beneficiaire WHERE Debut   BETWEEN '$debut'  AND  '$fin'";
               echo $sql;
                $RPA            = $PDO ->query($sql);
Que donne la requête qui vient de s'afficher?après tu peux tester cette requête directement avec phpmyadmin

Re: Probleme stat de date

par Yujji » 02 déc. 2014, 10:40

merci mais cette requête fonctionne car la je demande que sur ma première colonne 'début' de ma base de donnée et je voudrais comparer en plus ma colonne fin par rapport au même date

Re: Probleme stat de date

par yann18 » 01 déc. 2014, 19:05

        $debut          =       $anneeD.'-'.$moisD.'-0'.$jour;
      $fin            =       $anneeF.'-'.$moisF.'-0'.$jour;
tu dois avoir un zero(0) supplémentaire au niveau du jour de la semaine.Par exemple si la date choisie est 2014-11-30, l'une de des instructions çi-dessous retournera une date invalide du genre 2014-11-030.

Tu peux construire une date avec l'objet DateTime:
$dateDebut = new DateTime( $anneeD.'-'.$moisD.'-'.$jour);
$debut=$dateDebut->format('Y-m-d');
echo $debut;
$dateFin= new DateTime( $anneeF.'-'.$moisF.'-'.$jour);
$fin=$dateFin->format('Y-m-d');
echo $fin;

Probleme stat de date

par Yujji » 01 déc. 2014, 16:21

Bonjour voila j'ai un problème j'ai des client qui on une date de début d'abonnement et une date de fin qui sont 2 colonnes distinct
donc via un formulaire je choisis une date de début et une date de fin pour faire remonter les personnes actif pendant cette période mais j'arrive a faire remonter que avec la colonne début voila ma requête SQL
		$jour		=	1;
		$moisD		=	$_POST['moisD'];
		$anneeD		=	$_POST['anneeD'];
		$debut 		=	$anneeD.'-'.$moisD.'-0'.$jour;

		$moisF		=	$_POST['moisF'];
		$anneeF		=	$_POST['anneeF'];
		$fin		=	$anneeF.'-'.$moisF.'-0'.$jour;
		
		
		$RPA		= $PDO ->query("
		SELECT * 
		FROM beneficiaire 
		WHERE 
		Debut	BETWEEN	'$debut'
		AND  '$fin'

		");