[RESOLU] PDO requete, pb format date str_to_date

JVL
Eléphant du PHP | 76 Messages

02 oct. 2013, 11:49

Bonjour à tous,

Je souhait récupéré la valeur de mon formulaire, qui correspond à une date dont voici le format jj/mm/AAAA. Mon problème vient du côté bdd, en effet la date ce stock sous format AAAA-mm-jj, donc j'ai belle et bien trouver différents fonctions(exemple: STR_TO_DATE(NOW(),%Y/%m/%d). Mais je ne trouve pas la syntaxe à utiliser dans ma requète préparé, pour reformater correctement le date, et ainsi avoir le retour de mon select.
1) utiliser la valeur du formulaire du calendrier
2) formater correctement la date du formulaire dans une requete préparé.



<th colSpan=5> Cliquez <input type="text" name="date" id="date" class="calendrier" size="10" /> <input type="submit" value="Afficher" Onclick /></th>
				
		</tr>
		<TR>
			<TH><center>Projet</center></TH>
			<TH><center>Durée</center></TH>
			<TH><center>Catégorie</center></TH>
			<TH><center>Commentaire</center></TH>
			<TH><center>Actions</center></TH>
		</TR>
<?php
   $selectionPrepa = $pdo->prepare('SELECT * FROM glpi_suivi_travail WHERE Name_suivi=? AND Date_suivi = ?'); 


   $selectionPrepa->execute(array($_SESSION["glpiname"], 'STR_TO_DATE('date',%Y/%m/%d)'); 

			
    while( $enregistrement = $selectionPrepa->fetch(PDO::FETCH_OBJ)){	
																			echo '<tr> <input type=hidden value="',$enregistrement->ID_suivi,'">' ;
																			echo '<td><center>',$enregistrement->Projet_suivi,'</center></TD>';
																			echo '<td>',$enregistrement->Duree_suivi,'</TD>';
																			echo '<td>',$enregistrement->Categorie_suivi,'</TD> ';
																			echo '<td>',$enregistrement->Commentaire,'</TD>';
																			echo '<td>';
																			echo '<a href="#" onclick="">Modifier </a> |';
																			echo '<a href="#" onclick=""> Supprimer</a>' ;
																			echo '</td>';
																			echo '</tr>';
										?>
Cordialement.
Merci d'avance.
Modifié en dernier par JVL le 02 oct. 2013, 14:54, modifié 1 fois.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

02 oct. 2013, 13:28

Salut,

1/ ton code n'est pas syntaxiquement correct (en php) donc déjà c'est sur cela ne peux fonctionner.
2/ tu n'as pas compris l'utilisation de la méthode exécute
Tu ne peux y passer que des valeurs et la ce n'est pas le cas. Le str_to_date doit être dans la requête ;)

Ensuite il faut que tu vérifie le format de date que l'on te passe dans le formulaire afin d'être certain ne pas avoir de problème.
Si tu peux utiliser html 5 utilise un champs input de type date.
Sinon un date picker js devrait t'aider dans ce sens (et du coup faire en sorte que l'utilisateur n'ai pas besoin de modifier le champs de date ;)

Dans tout les cas test la requête d'abord dans un client sql et lorsqu'e tu arrive a ce que tu veux tu passe au php.
Dernier chose, tu n'as pas besoin de requête préparée. Utilise la méthode quote pour échapper les données.

@+
Il en faut peu pour être heureux ......

JVL
Eléphant du PHP | 76 Messages

02 oct. 2013, 14:27

Yeah merci encore !

Enfaite pour l'histoire du calendrier, j'ai trouver un script JS qui fonctionne plutôt bien. D'ou ceci:
<input type="text" name="date" id="date" class="calendrier" size="10" />
Mais comme dit plus haut le format n'est pas le même que celui de la bdd.


Merci encore.

edit:
SELECT * FROM `glpi_suivi_travail` WHERE `Name_suivi`='moogli' AND `Date_suivi` = STR_TO_DATE('01/10/2013','%d/%m/%Y'); 
Je me rapproche, plus d'erreur sql mais rien ne ce retourne.

Maintenant sa fonctionne sous phpmyadmin, mais du coup le soucis, c'est que je ne sais quoi utiliser quote ? ( je sais pas commment l'utiliser), les requètes préparés, sa ne fonctionne apparement pas, je sais que ma syntaxe du php n'est pas parfaite mais quand même.
		<?php 
	
	$selectionPrepa = $pdo->prepare('SELECT * FROM glpi_suivi_travail WHERE Name_suivi=? AND Date_suivi = str_to_date('?',%d/%m/%Y)');   <==== LIGNE 45


   $selectionPrepa->execute(array($_SESSION["glpiname"], '01/10/2013'); 


		
			
			while( $enregistrement = $selectionPrepa->fetch(PDO::FETCH_OBJ)){	
															 echo '<TR> <input type=hidden value="',$enregistrement->ID_suivi,'">' ;
															 echo '<TD><center>',$enregistrement->Projet_suivi,'</center></TD>';
															 echo '<TD>',$enregistrement->Duree_suivi,'</TD>';
															 echo '<TD>',$enregistrement->Categorie_suivi,'</TD> ';
															 echo '<TD>',$enregistrement->Commentaire,'</TD>';
															 echo '<TD>';
															 echo '<a href="#" onclick="">Modifier </a> |';
															 echo '<a href="#" onclick=""> Supprimer</a>' ;
															 echo '</TD>';
															 echo '</TR>';
														}
		?>
Modifié en dernier par JVL le 02 oct. 2013, 16:50, modifié 1 fois.

JVL
Eléphant du PHP | 76 Messages

02 oct. 2013, 16:49

Désolé du double post, mais sinon vous ne verrez jamais mes edits;
voila l'erreur lié au dernier code posté
Parse error: syntax error, unexpected ')' in C:\xampp\htdocs\glpi\front\teststagiaire.php on line 45

Eléphant du PHP | 116 Messages

02 oct. 2013, 17:06

Regarde cette ligne :
$selectionPrepa->execute(array($_SESSION["glpiname"], '01/10/2013'); 
Il te manque une parenthèse :-)
$selectionPrepa->execute(array($_SESSION["glpiname"], '01/10/2013')); 
@+,
Computarelier

JVL
Eléphant du PHP | 76 Messages

03 oct. 2013, 09:30

Yes merci.