Question php/sql

Résolu/Fermé
jean.miche Messages postés 90 Date d'inscription samedi 22 août 2009 Statut Membre Dernière intervention 30 mai 2014 - 22 août 2009 à 17:25
jean.miche Messages postés 90 Date d'inscription samedi 22 août 2009 Statut Membre Dernière intervention 30 mai 2014 - 29 août 2009 à 22:10
Bonjour,

Je suis actuellement en création de site web. Le php n'étant pas mon point fort, je souhaiterais vous poser une question.
J'ai actuellement, ma BDD avec mes tables. Je voudrais qu'apparaissent certaines choses sur le site.

Exemple :
Dates de représentation d'une scène théâtrale.
Sur toutes mes pages, j'ai un encart où devrait apparaitre la date et le lieu des 2 prochaines représentations.

Dans ma BDD j'ai une table representations, avec id_repr, date, lieu. Tout simplement.
Comment celà doit-il se traduire sur ma page_web.php ?

Comme ceci :???

<div id="dates">
<ul>
<li><span class="date"><?php echo $ligne["date"]; ?></span></li>
<li><span class="texte"><?php echo $ligne["lieu"]; ?></span></li>
</ul>
</div>

De plus, comment la prochaine date doit elle apparaitre en 1ere et la seconde en dessous ?
Et enfin, est-il possible qu'une fois la représentation passée, elle ne soit plus visible (voire même effacée de ma BDD) ?

Merci d'avance.
A voir également:

11 réponses

giheller Messages postés 1875 Date d'inscription dimanche 14 juin 2009 Statut Membre Dernière intervention 3 février 2024 142
25 août 2009 à 08:30
En résumé, un algorithme c'est la description de ce que doit faire un programme pour arriver à faire ce que l'on souhaite.
Si cela n'est pas clair on ne peut arriver à rien.

Donc si vous souhaitez comparer deux dates il faut connaitre la structure des dates à comparer de manière à les rendre comparables.
Quand j'étais petit, à l' école on me disait qu'on pouvait pas comparer des carottes et des choux fleur.

Dans le cas présent, vous demander comment faire, on vous donne une façon de faire. cette dernière ne peut être qu'adaptée par vous même.
format date faites attention : les formats peuvent être différents entre php et mysql.

les champs ajoutés jour mois année peuvent servir, mais compliquer l'algorithme de comparaison.
c'est pourquoi je vous disait de rendre les dates comprables.
- vous avez une date dans votre base de données
- vous avez la date du jour avec la fonction date de php
- transformez cette dernière dans le même format que celle de votre BDD
- lancez la requête pour extraite de votre BDD les informations souhaitées.
1
jean.miche Messages postés 90 Date d'inscription samedi 22 août 2009 Statut Membre Dernière intervention 30 mai 2014 1
25 août 2009 à 12:15
En effet, c'est plus clair, merci !
0
giheller Messages postés 1875 Date d'inscription dimanche 14 juin 2009 Statut Membre Dernière intervention 3 février 2024 142
27 août 2009 à 19:23
vous dites
Dans ma base, la date est de style DATE, au format AAAA-MM-JJ.

alors cela devrait aller
SELECT * FROM representations WHERE date >= CURRENT_DATE() ORDER BY date LIMIT 2
1
jean.miche Messages postés 90 Date d'inscription samedi 22 août 2009 Statut Membre Dernière intervention 30 mai 2014 1
27 août 2009 à 20:58
Ok j'ai trouvé... et y'a de quoi grincer des dents...
Relisez ma requête :
SELECT * FROM representations WHERE 'date' >= CURRENT_DATE() ORDER BY date LIMIT 2


La faute était due aux quote autour du nom de la table date. Rageant.
Merci à vous pour tout !

Mais puis-je vous poser une autre question ?
La page me retourne des � pour chaque caractère spécial.
Ma page est en utf-8 dans le head : <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
Et dans ma base, l'interclassement du champ lieu est latin1_swedish_ci.
J'ai trouvé une "astuce" qui permettrait d'afficher les caractères correctement en ajoutant mysql_query("SET NAMES UTF8");
Est-ce possible de la sorte car je n'y arrive pas (oui je suis un boulet...), ou sinon, je l'ai mal placé (dans ma page php sous ma requête)

Merci d'avance.
0
giheller Messages postés 1875 Date d'inscription dimanche 14 juin 2009 Statut Membre Dernière intervention 3 février 2024 142
22 août 2009 à 17:28
Bonjour,

Il y a plusieurs solutions à votre problématique
vous pouvez faire le ménage dans votre base de données.
ou vous pouvez dans votre requête pour récupérer les infos mettre un critère de sélection sur la date en ne demandant que celles égales ou postérieures à la date du jour.

0
jean.miche Messages postés 90 Date d'inscription samedi 22 août 2009 Statut Membre Dernière intervention 30 mai 2014 1
22 août 2009 à 18:04
La seconde version m'intéresse fortement giheller car il n'y a pas grand chose dans ma base de données pour l'instant !
Ca ressemblerait donc à un select from "ma table des dates" ?
0
giheller Messages postés 1875 Date d'inscription dimanche 14 juin 2009 Statut Membre Dernière intervention 3 février 2024 142
22 août 2009 à 18:16
ça ressemblerait à un truc du genre
select * from ma table where date >= aujourdhui order by date desc

en français =
je sélectionne dnas ma table les enregistrement dont la date est postérieure ou égale à aujourdhui en triant sur la date en descendant
0
jean.miche Messages postés 90 Date d'inscription samedi 22 août 2009 Statut Membre Dernière intervention 30 mai 2014 1
22 août 2009 à 18:57
à priori ça donne ça avec une boucle pour avoir une liste :

<?php
$sql="SELECT * FROM representations WHERE 'date' >= aujourdui ORDER BY date DESC";
$data=mysql_query($sql) or die ("");

while($ligne=mysql_fetch_assoc($data)) {
echo "<ul><li>";
echo $ligne["date"] ."</li><li>". $ligne["lieu"]. "</li></ul>";
}
?>

Mais ça ne m'affiche rien.
(c'est bien aujourdui qu'il faut mettre? Désolé pour mes questions de débutants...)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
giheller Messages postés 1875 Date d'inscription dimanche 14 juin 2009 Statut Membre Dernière intervention 3 février 2024 142
23 août 2009 à 08:59
Bonjour,
NON

aujoud'hui c'est du français pas du php.
il faut utiliser la fonction date avec les bonnes options (c'est à dire celles qui vont bien avec le format de la date de la base de données, pour faire les bonnes comparaisons).

0
Dans ma BDD, le champs date est un varchar et non pas un date. afin que l'on puisse écrire la date en entier au format français (ex : 24 août 2009). Donc ce n'est pas comme si je voulais afficher la date du moment, mais celle qui sont dans la BDD...

je ne suis peut-être pas très clair...
Il faut que je mette date('H\Hi') au lieu d'aujourdui ?
0
ma requete doit plutot etre :
SELECT * FROM representations WHERE 'date' >= current_timestamp ORDER BY date DESC

ma bdd a changé, il y a désormais 4 champs dans ma table representations (jour, mois, annee, lieu) afin que l'on puisse l'ajouter via un formulaire dans le back office

je suis bon là..? :S

merci d'avance
0
jean.miche Messages postés 90 Date d'inscription samedi 22 août 2009 Statut Membre Dernière intervention 30 mai 2014 1
24 août 2009 à 18:18
5 champs avec l'id en fait...
0
giheller Messages postés 1875 Date d'inscription dimanche 14 juin 2009 Statut Membre Dernière intervention 3 février 2024 142
24 août 2009 à 18:20
Un peu de réflexion.
si on veut comparer deux choses, il vaut mieux que cela soit comparable non ?
alors transformez la date du jour au même format que la date qui est dans vos bases, ou inversement.

définissez vos algorithmes de traitement.
0
jean.miche Messages postés 90 Date d'inscription samedi 22 août 2009 Statut Membre Dernière intervention 30 mai 2014 1
24 août 2009 à 18:27
Un peu de reflexion... ok , je ne demande pas à ce que l'on m'écrive mon code de toute ma page, mais là : algorithmes de traitement c'est du chinois pour moi après une après-midi passée sur le net à essayé d'apprendre.

J'imagine que les champs que j'ai créé ne servent à rien, si ce n'est à m'embrouiller moi-même et qu'il vaut mieux tout mettre au format DATE dans quel cas ça me paraît plus logique mais aussi beaucoup plus compliqué.
0
giheller Messages postés 1875 Date d'inscription dimanche 14 juin 2009 Statut Membre Dernière intervention 3 février 2024 142
25 août 2009 à 13:16
bon maintenant vous écrivez votre requête et si là elle ne focntionne pas, vous la transmettez (avec la structure de la table) et là on regardera alors le code.
0
jean.miche Messages postés 90 Date d'inscription samedi 22 août 2009 Statut Membre Dernière intervention 30 mai 2014 1
26 août 2009 à 21:10
Voici la requête :
SELECT * FROM representations WHERE 'date' >= NOW() ORDER BY date LIMIT 2

La table contient un champ id (INT), un champ date (DATE), et un champ lieu (VARCHAR).
Mon code appelle bien ce qu'il faut et surtout, affiche la date au format français :

Voici mon code :
$sql="SELECT * FROM representations WHERE 'date' >= NOW() ORDER BY date LIMIT 2";
$data=mysql_query($sql) or die ("");

while($ligne=mysql_fetch_assoc($data)) { ?>
<ul>
<li class="date"><?php echo date("d-m-Y", strtotime($ligne["date"])); ?></li>
<li class="lieu"> <?php echo $ligne["lieu"]; ?></li>
</ul>
<?php
}
?>


Ca marche nikel, merci beaucoup pour vos messages.
0
jean.miche Messages postés 90 Date d'inscription samedi 22 août 2009 Statut Membre Dernière intervention 30 mai 2014 1
27 août 2009 à 17:29
Finalement j'ai un nouveau soucis ...

La page m'affiche toujours les representations passées celle d'hier par exemple... je sui sûr que ça vient de ma requête (message précédent) :
SELECT * FROM representations WHERE 'date' >= CURRENT_DATE() ORDER BY date LIMIT 2

à la place de CURRENT_DATE(), j'ai essayé avec DATE(), CURDATE(), ou même NOW(), mais ça ne marche dans aucun des cas. Ca m'affiche toujours la représentation d'hier soir.
0
giheller Messages postés 1875 Date d'inscription dimanche 14 juin 2009 Statut Membre Dernière intervention 3 février 2024 142
27 août 2009 à 18:36
je ne connais pas le format de date dans votre base
pour comparer il faut une compatibilité avec

CURDATE() Retourne la date courante au format AAAA-MM-JJ (ou AAAAMMJJ si le résultat est converti en entier)
Retour
CURDATE 2002-09-01
CURDATE()+0 20020901

ou
CURRENT_DATE()
Retourne la date courante au format AAAA-MM-JJ (ou AAAAMMJJ si le résultat est converti en entier)
Retour
CURRENT_DATE 2002-09-01
CURRENT_DATE()+0 20020901

0
jean.miche Messages postés 90 Date d'inscription samedi 22 août 2009 Statut Membre Dernière intervention 30 mai 2014 1
27 août 2009 à 19:18
Dans ma base, la date est de style DATE, au format AAAA-MM-JJ.

Sur ma page je renvoie la date au format français par contre :
<?php echo date("d-m-Y", strtotime($ligne["date"])); ?>


Par contre, vous avez écrit la même chose pour CURDATE() et CURRENT_DATE() dans votre message ci-dessus.
0
giheller Messages postés 1875 Date d'inscription dimanche 14 juin 2009 Statut Membre Dernière intervention 3 février 2024 142
28 août 2009 à 08:21
Bonjour,

mon message numéro 18 enlevait les ' autour de date.

pour le reste vous avez la possibilité avec phpmyadmin de faire une transformation du codage de votre base.
0
jean.miche Messages postés 90 Date d'inscription samedi 22 août 2009 Statut Membre Dernière intervention 30 mai 2014 1
29 août 2009 à 22:10
Autant pour moi, je n'avait pas fait attention aux quotes supprimées dans votre message.

Pour l'encodage des caractères, j'ai trouvé l'astuce sur le forum :
mettre mysql_query("SET NAMES UTF8"); juste sous la connection à ma base.

Merci !
0