Forum d'entraide PHPFrance

Venez poser vos questions PHP, MySQL, HTML, CSS, Javascript, Gestion de serveurs à la communauté PHPfrance

Vers le contenu

» Masquer les résultats de la recherche

Recherche dynamique PHPfrance

  1. Effectuez une recherche, les résultats s'afficheront dynamiquement ici.

conseils pour un tri par champ date(text)

PHP 4 n'est plus supporté depuis le 08/08/2008. Ce forum est fermé mais reste disponible pour consultation. Il est grand temps de s'intéresser à PHP 5...

Messagepar VaN 27 Juin 2005, 17:33

Table mois :
Image

Table annee :
Image

Table articles :
Image

dsl de mon erreur sur structure/affichage : /
VaN
Mammouth
 
Messages: 1107
Inscription: 20 Juin 2005, 12:22

Messagepar pjl 27 Juin 2005, 17:52

quel est la différence entre la date et date_entrée ?

pourquoi avoir mis date au format texte et pas date ?

sinon, il vaut mieux éviter d'avoir des noms de champ reprennant des noms utilisés par la base de données comme ici cate.
pjl
ViPHP
ViPHP
 
Messages: 2114
Inscription: 21 Fév 2005, 13:10

Messagepar VaN 27 Juin 2005, 17:57

date est un champ remplie par une concatenation de 2 <select>, un affichant les mois, l'autre les années. date_entree est remplie par la fonction date().

J'utilise les 2 champs pour avoir tout le temps la date de creation de l'article (date() ) et une 'fausse' date, si l'auteur veut lié cet article au moins de juillet, tout en l'ayant ecrit au mois de juin par exemple.

date est au format texte car les valeurs qu'il contient sont de cette forme :
Juin 2005 , Aout 2006 , etc..
je pensais que ça serait plus facile.. au final ça fout le merdier on dirait :(
VaN
Mammouth
 
Messages: 1107
Inscription: 20 Juin 2005, 12:22

Messagepar pjl 27 Juin 2005, 18:10

en fait, tu aurais pu stocker au format date en prenant comme convention pour le jour le 1er du mois et tu n'exploites que le mois et l'année.
Grosso modo, tu continues à concaténer et systématiquement, tu fais : $date .= "-1";
pjl
ViPHP
ViPHP
 
Messages: 2114
Inscription: 21 Fév 2005, 13:10

Messagepar VaN 28 Juin 2005, 09:52

mon probleme n'est toujours pas résolu. Je suis en train de penser à une autre methode.

Peut etre serait-il plus simple de decouper mon champ date en 2 champs distinct, un pour le mois, et un pour l'année ?
la requete serait surement plus facile à réaliser nan ?
VaN
Mammouth
 
Messages: 1107
Inscription: 20 Juin 2005, 12:22

Messagepar sadeq 28 Juin 2005, 12:55

Non non, tu complique encore une fois le problème.
pour les deux dates d'après ce que j'ai compris, tu n'as qu'à dire :
"j'ai une date de création de l'article et une date de réapprovisionnement"
Mais les deux sont au format date. Les dates doivent toujours être stocker comme des dates brutes.
C'est à ton programme (requêtes SQL) d'en diversifier l'utilisation et le format d'affichage en utilisant des fonction spécialisées comme day(), month(), year() et date_format()

Pour plus d'info : http://www.nexen.net/docs/mysql/annotee ... ate_format

Alors, dans ton cas et si j'étais à ta place, je stockerais les date dans leurs état brut sous le type date.
Et quand par exemple j'ai besoin de remplir une nouvelle date de réapprovisionnement (disons Juillet) d'un article créé en Juin, en choisissant d'enter la date via des listes déroulante, je ferais ceci:

id_mois et id_année : deux listes déroulantes.
Quand l'utilisateur choisit un mois dans id_mois et une année id_année
Construire la date : "id_année/id_mois/01" et la stocker dans le champs "date" de article.

Code de l'exemple : (exige qu'un article est déja présent et que $ref_art est connue.

Syntaxe: [ Télécharger ] [ Masquer ]
Code php

<form>

<input type=hidden name=ref_art value=<? echo isset($ref_art)?$ref_art:null; ?>

<p>Choisir une date de réapprovisionnement

<p>Année

<select name=id_année>

<option value='0'></option>

<option value='2004'>2004</option>

<option value='2005'>2005</option>

...

</select>

<p>Mois

<select name=id_mois>

<option value='0'></option>

<option value='1'>Janvier</option>

<option value='2'>Février</option>

...

</select>

<p><input type=submit name=modifer_date value='Modifier date réappro.'>

</form>



<?

//Programme de modification de la date réappro.



//Réception valeurs sélectionnées dans les select (0 si rien)

$id_année = isset($_GET["id_année"])?$_GET["id_année"]:0;

$id_mois= isset($_GET["id_mois"])?$_GET["id_mois"]:0;



//Reception de la ref de l'article concerné par la modif

$ref_art = isset($_GET["ref_art "])?$_GET["ref_art "]:null;



//si c'est l'action 'modifier_date' est déclenchée

//et si des valeurs correctes sont séléctionnées et qu'un article est en cours

if (isset($_GET["modifer_date"]) && $ref_art != null && $id_année != 0 && $id_mois != 0) {

    //Quoi faire des valeurs reçu ? : Les stocker en mettant à jour la table article clé =$ref_art

   $sql = "UPDATE article SET date = '$id_année/$id_mois/01' WHERE ref='$ref_art' ";

   mysql_query ($sql); //exécuter l'update

}





 


Remarque
: l'affichage affiche les noms des mois et des années mais mon programme manipule leurs id numériques et stocke la date sous le format date
Dernière édition par sadeq le 28 Juin 2005, 13:09, édité 1 fois.
--\\\\\\----\\---\\----\\\\\\
---\\---\\----\\---\\----\\---\\
----\\\\\\----\\\\\\----\\\\\\
-----||-----------||----||-----||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène
Avatar de l’utilisateur
sadeq
Modérateur PHPfrance
Modérateur PHPfrance
 
Messages: 2547
Inscription: 09 Fév 2005, 18:17
Localisation: Le Mans - France

Messagepar pjl 28 Juin 2005, 13:06

VaN a écrit:mon probleme n'est toujours pas résolu. Je suis en train de penser à une autre methode.

Peut etre serait-il plus simple de decouper mon champ date en 2 champs distinct, un pour le mois, et un pour l'année ?
la requete serait surement plus facile à réaliser nan ?

Avant de dire celà, as tu étudié ma solution ?
pjl
ViPHP
ViPHP
 
Messages: 2114
Inscription: 21 Fév 2005, 13:10

Messagepar VaN 28 Juin 2005, 13:13

pjl a écrit:Avant de dire celà, as tu étudié ma solution ?


Oui. Mais mon probleme majeur est que une enorme partie de mon code (en tout cas de mes tris déjà fonctionnels) est basé sur ce systeme de date au format text. La solution "passer toutes mes date(text) en date(date)" etait pour le moment lpour moi la dernière des solutions envisageables, à utiliser vraiment si je ne trouvais pas comment faire ce tri. Je penses que maintenant je vais me tourner vers ça : / bcp de travail avant de revoir marcher correctement mon interface donc :?
VaN
Mammouth
 
Messages: 1107
Inscription: 20 Juin 2005, 12:22

Messagepar VaN 28 Juin 2005, 15:32

Bon bin voilà, toutes mes date(text) ont été tranformées en date(date), ainsi que les requetes de SELECT et de INSERT liées à tout ça.

Maintenant je souhaite faire un <select> qui servira pour trier les articles par mois.
Je voudrais dont sortir toutes les date de mes articles, et crée le select avec une boucle. Mais je voudrais sortir une valeur unique de chaque date, c'est à dire que si plusieurs articles ont la meme date, en sortir qu'une seule de cette valeur. J'imagine que cela se fait dans la requete SQl. Comment faire cela ? C'est DISTINCT qui permet de faire cela ?

[edit] ah bin oui c'est DISTINCT, vais test ça
VaN
Mammouth
 
Messages: 1107
Inscription: 20 Juin 2005, 12:22

Messagepar VaN 28 Juin 2005, 16:12

Syntaxe: [ Télécharger ] [ Masquer ]
Code php

<?php

$sql_sort = "SELECT DISTINCT date FROM articles";

$query_sort = mysql_query($sql_sort);

while ($result_sort = mysql_fetch_array($query_sort))

  {

  $date_exp = explode("-",$result_sort['date']);

  $mois_exp = $date_exp[1];

  $annee_exp = $date_exp[0];

               

  $sql = "SELECT mois FROM mois WHERE id_mois='$mois_exp'";

  $query = mysql_query($sql);

  $result = mysql_fetch_array($query);

?>



<option value="<?php echo $result_sort['date']; ?>"

<?php

if (isset($_GET['date']))

  {

  if ($_GET['date']==$result_sort['date'])

    {

    echo "selected";

    }

  }

?>

>

<?php echo $result['mois']." ".$annee_exp ?>

</option>

<?php

}

?>

</select>

 


me sort ce code source :

<select name="date" onchange="submit()" style="margin:0px; ">
<option value="no">Choose a date</option>
<option value="2005-06-20">June 2005</option>
<option value="2005-06-23">June 2005</option>
<option value="2005-06-17">June 2005</option>
<option value="2005-06-24">June 2005</option>
<option value="2005-06-27">June 2005</option>
<option value="2005-07-28">July 2005</option>
<option value="2005-01-01">January 2005</option>
</select>


Pourtant après verification sur la doc MySQL, c'est bien aisni que s'utilise DISTINCT. où est mon erreur ?

[edit] Aaaaah mais nan ok, les jours sont différents, c'est pour ça !! je n'est pas fait attention à la value, juste au contenu des <option>. Hum, comment faire pour récuperer seulement une partie de mon champ date ds ma requete SQL, en l'occurence seulement l'année et le mois ici ?

je pense avoir trouvé une feinte. Vu que le jour ne m'est d'aucune utilité, je defini une variable $day = "01"; que j'utiliserais quand je rentre la date ds la bdd. C'est pas super propre, mais ça marche.
VaN
Mammouth
 
Messages: 1107
Inscription: 20 Juin 2005, 12:22

Messagepar pjl 28 Juin 2005, 17:08

Et si tu prennais la peine de bien lire les réponses que l'on prend la peine de te faire ?

VaN a écrit:[edit] Aaaaah mais nan ok, les jours sont différents, c'est pour ça !! je n'est pas fait attention à la value, juste au contenu des <option>. Hum, comment faire pour récuperer seulement une partie de mon champ date ds ma requete SQL, en l'occurence seulement l'année et le mois ici ?

Jette donc un oeil à la page précédente.

VaN a écrit:je pense avoir trouvé une feinte. Vu que le jour ne m'est d'aucune utilité, je defini une variable $day = "01"; que j'utiliserais quand je rentre la date ds la bdd. C'est pas super propre, mais ça marche.

=D> =D>
pjl a écrit:en fait, tu aurais pu stocker au format date en prenant comme convention pour le jour le 1er du mois et tu n'exploites que le mois et l'année.
pjl
ViPHP
ViPHP
 
Messages: 2114
Inscription: 21 Fév 2005, 13:10

Messagepar VaN 28 Juin 2005, 17:15

:oops: :cry:

sans rancune j'espere..
VaN
Mammouth
 
Messages: 1107
Inscription: 20 Juin 2005, 12:22

Précédente

Retourner vers PHP 4 (deprecated)

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité