Page 1 sur 1

Calendrier - Convertir string en DATE

Posté : 02 mars 2009, 23:08
par remy42
Bonsoir,

Je rencontre acutellement un probeme de format.
Dans ma base de données j'ai une table avec un champs "date" au format DATE
Sur ma page php j'ai une textebox rempli automatiquement avec la date du jour

<?php 
$datedujour=date (%Y-m-d) ?>
Quand j'envoi ma requete INSERT INTO tout est OK la date s'insère bien.

MON PROBLEME

J'ai 2 textbox remplies via un calendrier pour bornée des dates dans une requete SELECT
Cependant mon calendrier doit remplir ma textbox avec des valeur en "string" bien que d'apparence dans les 2 cas j'ai 2009-03-02 mais lorsque je veux integrer ces données dans la base de données le format n'est pas valide.

Comment convertir cette variable qui contient du string en "DATE" mais en gardant exactement le meme contenu qui me convient.

J'ai pas reussi a trouvé dans le script calendrier.php pour changer le format de sorti. Il y a 400 lignes

Merci d'avance

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

Posté : 03 mars 2009, 14:46
par Ryle
Ce n'est pas vraiment une question de cast pour transformer un string en date, mais plus un problème de format.

Lorsque tu génères ta requête SQL ce n'est ni plus ni moins qu'une grosse chaine de caractère et on se moque pas mal de savoir si à l'origine les données qui y figurent étaient des strings, des floats ou des dates.

En revanche, lorsque ta base va exécuter la requête, il faut que les données soient dans le format correspondant aux champs. Ainsi si ton champ est de type numérique, il ne faut pas mettre de quotes autour, s'il s'agit d'un champ de type date il te faut non seulement des apostrophes, mais également respecter le format attendu par ta base, etc.

Affiche la requête générée, et vérifie que tu essayes bien de mettre à jour ton champ avec la valeur '2009-03-02' et pas un éventuel 02/03/2009 ou autre :)

Posté : 03 mars 2009, 14:55
par remy42
Bah j'ai regarder mais non il essaye bien d'inserer 2009-03-02 c'est bizarre sur le premier cas ca marche nikel mais la date mise dans le textbox via calendrier n'est pas au format attendu par la base de données apparement

Je ne vois pas comment resoudre ce foutu problème

Posté : 03 mars 2009, 14:57
par Ryle
Montre nous la requête générée qui est envoyée à ta base de données :)

et donne nous également le message d'erreur qui t'es retourné :)

Posté : 03 mars 2009, 15:26
par remy42
// 1 ère PARTIE : INSERTION DES DONNEES

Alors j'insere des entrée dans ma base qui a un champ nommé "dateabs" de typ DATE.
setlocale (LC_TIME, 'FR');
$date_jour = date("%Y-m-d");
dans mon "form" j'ai le champ
<input type="text" value="<?php echo $date_jour; ?>" name="datedujour" />
Je coche dans un tableau la personne absente -> je valide

Dans ma 2eme page j'ai :
$datedujour=$_POST['datedujour'];
+ requete d'insertion de l'absences......... TOUT CA C'EST OK

// 2 ème PARTIE : EXPLOITATION DES DONNEES

Je coche dans un tableau la personne dont je veut connaitre les absences ( ca c'est bon )

Et via 2 textbox je rentre deux date ( je click sur un mini calendrier je selectionne mes date et elle se mettent dans la textbox.

Quand je valide je recupere les dates par
$datedebut=$_POST['datedebut'];
$datefin=$_POST['datefin'];
Ma requete d'insertion est :

Code : Tout sélectionner

SELECT dateabs, heuredebut, heurefin FROM absences WHERE dateabs>'$datedebut' ans dateabs<'$datefin'
Voila et la erreur

Code : Tout sélectionner

erreur de syntaxe pres de 'dateabs>'2009-01-07' , dateabs<'2009-03-26'' à la ligne 1
[/php]

Posté : 03 mars 2009, 16:50
par Ryle
A première vue, tu as une erreur dans ton select : "ans" au lieu de "and" :)

Par contre, c'est pas une requête d'insertion mais de sélection... et l'erreur que tu donnes ne semble pas correspondre à cette requête...

Posté : 03 mars 2009, 16:55
par remy42
Désolé c'est une faute de frappe mais c'est bien and dans le programme car j'ai pas fait copier coller

et je me suis mal exprimer c'est selection oui pas insertion

Mon erreur correspond bien a cette requete la preuve il me sort dateabs> et dateabs< avec le valeur entrer via les calendrier

de toute facon il n'y a pas d'autre requete sur la page donc c'est bien celle la qui renvoi

Apparement mysql traite pas la comparaison avec les tirets. Cella veut dire qu'il faudrai que ma variable $datedebut soit égale à 20090302 et non pas 2009-03-02

Comment transformer cette variable

Posté : 03 mars 2009, 17:19
par Ryle
En fait, ce qui me parait bizare, c'est le " , " qui apparait dans le message d'erreur "dateabs>'2009-01-07' , dateabs<'2009-03-26'" alors qu'il ne figure pas dans ta requête...

D'où ma question, peux-tu afficher et nous donner la requête qui est générée et envoyée à mysql ? car ce devrait être un "AND" et non une virgule à cet endroit...

Posté : 03 mars 2009, 19:58
par remy42
Merci beaucoup ryle pour ton eclaircissement.

Quel con que je suis. J'etais persuadé d'avoir mis and. D'ailleur quand j'ai réécrie ma requete sur le forum j'ai mis and et en fait j'ai mis ","
Merci beaucoup

Cependant j'ai une nouvelle enigme :D

Ma date est sous forme $date = 20090302

Cependant quand ma requete sql l'envoi a la base c'est traité de la manière suivant

Code : Tout sélectionner

WHERE dateabs>20090302
Alors que ca devrait être

Code : Tout sélectionner

WHERE dateabs>'20090302'
et sans les ' ' la requete ne marche pas " testé et approuvé directement dans phpmyadmin"

Comment faire ???

Merci pour ton aide

Posté : 03 mars 2009, 22:57
par Ryle
bah déjà la date que tu envois à mysql devrait avoir la forme aaaa-mm-jj et pas aaaammjj, donc déjà faudrait transformer ta date en rajoutant les tirets qui vont bien. Ensuite concernant les apostrophes, bah c'est toi qui génère la requête qui est envoyée à mysql, c'est donc à toi d'ajouter au besoin les apostrophes quand tu en as besoin

(tu le faisais bien jusque là, y avait que la virgule à remplacer par un AND, mais le format des dates et les apostrophes étaient bonnes dans le morceau de code précédent :))

Posté : 03 mars 2009, 23:40
par remy42
Bon alors en fait le souci c'est que ma requete taper sous PHPMYADMIN il me donne le bon resultat
Et avec mon code il me sort une page BLANCHE :(

Donc je pense que le souci vient de mon code php

Le voici :

Pour info la premier page me sort un tableau de ma base avec une colonne de case a cocher pour voir le rapport des absences et quand je valide il execute ce code avec bien evidement connection a la base avant etcc mais pour reduire je l'ai pas coller.
<?php

//absent checkbox
	$eleveabsent=$_POST['check_numeleve_abs'];
	$nom_classe_tampon=$_POST['nom_classe_tampon'];
	$datedebut=$_POST['date_debut'];
	$datefin=$_POST['date_fin'];
	
if (sizeof($eleveabsent)==0)
	{
	echo "pas de case cochée";
	}
		else
		{
					if (isset ($_POST["nom_classe_tampon"]))
						{ 
	$sql = "Select dateabs, heuredebut, heurefin FROM absences WHERE numeleve='$eleveabsent' and dateabs>'$datedebut' and dateabs<'$datefin'";
	$requete = mysql_query($sql) or die( mysql_error() ) ;
					
				?>		
					<table>	
						<?php
		while($ligne=mysql_fetch_row($requete))				
					{	
					echo "<tr>";	
					for($i=0;$i<mysql_num_fields($resultat);$i++)	
					{	
					echo "<td>$ligne[$i]</td>";
					}	
					echo "</tr>";
					} 	
						?>
			</table>
			<?php
		}  	
						else 
						
						echo "Veuillez choisir votre classe";
			
			
		}
?> 

Posté : 05 mars 2009, 09:53
par asiaTek
Ca a l'air correct bizarre !! Fait des echo de tes variables pour voir !