Mode URL: Besoin d'un conseil

Mammouth du PHP | 545 Messages

30 janv. 2006, 12:17

Salut,

Désolè pour le titre du sujet, mais je ne vois pas vraiment quel nom lui donner pour être clair (suggestion ! ? !)

Le soucis:
J'aimerai passé d'une page [annee.php] vers une page [class.php]
[annee.php] - donne une serie de saison en année (depuis 1983 jusqu'à aujourd'hui)
[class.php] - donne tous les classements (+/- 3è) de cette saison pour basculer sur une 3éme page ([classement.php]) qui me donnera un classement.
Si je n'ai pas de soucis pour aller vers la 3ème page où je fais :
<p><a href="classement.php?class=<?php echo $row_class['id_course']; ?>"><?php echo $row_class['nom_course']; ?></a></p>
j'en ai un pour passer de [annee.php] vers [class.php].

Je voudrais faire le malin en utilisant un truc comme ceci: http://www.kain-buyere.be/classements/annee.php soit :
<select name="annee" id="annee">
                <?php 
				$annee_en_cours = date("Y"); 
				$min_year = 1983; //  définit la borne inferieure 
				for($a=$min_year;$a<=$annee_en_cours;$a++) 
				{ 
    			echo "<option value=\"$a\">$a</option>\r"; 
				} 
				?>
</select>
que l'on m'a conseillé pour enregistrer dans une table mais est-ce possible de récupérer la valeur de l'année et de basculer vers la page [annee.php]? Faut-il faire une requête de la table quii me servira dans la page suivante?

Merci
Sebe

Pour moi, le PHP est une nouvelle aventure qui a commencée fin octobre 2005 ... c'est plus exitant que le HTML!

Eléphant du PHP | 383 Messages

30 janv. 2006, 13:09

non, tu n'as pas besoin de faire une requete a ce moment la, ce sera seulement dans la page d'apres, pour afficher le classement. il te suffit d'inserer ce select dans un formulaire, avec pour action class.php et comme methode get recommandee dans ce cas, ca permet de mettre la page avec le classement dans les favoris, ou de creer un lien direct ), peut importe :
<form action='class.php' method=get>
<select name="annee" id="annee">
                <?php
                $annee_en_cours = date("Y");
                $min_year = 1983; //  définit la borne inferieure
                for($a=$min_year;$a<=$annee_en_cours;$a++)
                {
                echo "<option value=\"$a\">$a</option>\r";
                }
                ?>
</select>
<input type='submit' value ='rechercher'>
</form>
et dans class.php, tu insere au debut :
$annee=$_GET['annee'];
puis tu lance ta requete.

Mammouth du PHP | 545 Messages

30 janv. 2006, 13:55

Ok et merci, c'est bien ce que je voulais faire pour le passage de page.

J'ai juste un soucis pour la valeur de la variable ... dans la page 2 ce sont des dates et pas des années! Donc plus rien ne s'affiche ... c'est bête!
J'entrevois possibilités:
- Ajouter un champs dans ma table pour les années, cela risque de faire doublon ... j'ai un champs date [0000-00-00]
- Faire une requête avec un intervalle dans le temps, là mes connaissance en PHP ne sont pas encore à ce stade!

Voici ma requête après transformation
<?php require_once('../Connections/kainbuye.php');
$colname_class = "-1";
if (isset($_GET['annee'])) {
  $colname_class = (get_magic_quotes_gpc()) ? $_GET['annee'] : addslashes($_GET['annee']);
}
mysql_select_db($database_kainbuye, $kainbuye);
$query_class = sprintf("SELECT * FROM acrho_course WHERE `date` = '%s' ORDER BY `date` ASC", $colname_class);
$class = mysql_query($query_class, $kainbuye) or die(mysql_error());
$row_class = mysql_fetch_assoc($class);
$totalRows_class = mysql_num_rows($class);
?>
Encore un petit coup de main, svp! Merci
Sebe

Pour moi, le PHP est une nouvelle aventure qui a commencée fin octobre 2005 ... c'est plus exitant que le HTML!

Eléphant du PHP | 383 Messages

30 janv. 2006, 14:01

J'ai juste un soucis pour la valeur de la variable ... dans la page 2 ce sont des dates et pas des années! Donc plus rien ne s'affiche
euh, je ne comprends pas tres bien, tu veux dire pour passer de la deuxieme a la troisieme page ?

Mammouth du PHP | 545 Messages

30 janv. 2006, 14:18

Non, ce sont toujours les 2 mêmes pages en question.
L'astuce que tu m'as filé fonctionne si je ne mets pas de filtre sur l'année mais si je mets le filtre ... plus rien ne s'affiche car la variable que j'envois correspond à une année et pas à un intervalle (du 1er janvier au 31 décembre ????).
Est-ce que je dois ajouter un champs à ma rable pour y introduire une année où est-ce qu'il y a moyen d'utilisé l'année pour créer un interval?

Merci
Sebe

Pour moi, le PHP est une nouvelle aventure qui a commencée fin octobre 2005 ... c'est plus exitant que le HTML!

Eléphant du PHP | 383 Messages

30 janv. 2006, 14:41

OK, je crois que je commence a comprendre, tu veux dire que tu as un probleme pour la requete sql, car tu as des champs dates dans ta base, et que tu recupere une annee... essaie avec DATE_FORMAT, je verrais bien un truc du genre :
select * from table where DAT_FORMAT(champs_date,%Y)=$annee
je ne sais pas si ca marche, a tester....

Mammouth du PHP | 545 Messages

30 janv. 2006, 15:23

J'ai changé un peu pour que cela correspond, voici ma nouvelle requête:
<?php require_once('../Connections/kainbuye.php');
$colname_class = "-1";
if (isset($_GET['annee'])) {
  $colname_class = (get_magic_quotes_gpc()) ? $_GET['annee'] : addslashes($_GET['annee']);
}
mysql_select_db($database_kainbuye, $kainbuye);
$query_class = sprintf("SELECT * FROM acrho_course WHERE DAT_FORMAT(date,%Y)=$annee ORDER BY `date` ASC", $colname_class);
$class = mysql_query($query_class, $kainbuye) or die(mysql_error());
$row_class = mysql_fetch_assoc($class);
$totalRows_class = mysql_num_rows($class);
?>
mais malheureusement, j'ai un message d'erreur:
You have an error in your SQL syntax near '(date,)=2003 ORDER BY `date` ASC' at line 1
Donc, j'ai encore essayé un truc
"SELECT * FROM acrho_course WHERE `date` = '%s' AND DAT_FORMAT(date,%Y)=$annee ORDER BY `date` ASC"
mais non
Warning: sprintf(): Too few arguments in /home.2/kainbuye/www/classements/class.php on line 7
Query was empty
Désolè, je suis dépassé!

Merci
Sebe

Pour moi, le PHP est une nouvelle aventure qui a commencée fin octobre 2005 ... c'est plus exitant que le HTML!

Eléphant du PHP | 383 Messages

30 janv. 2006, 15:24

tu as mis DAT_FORMAT au lieu de DATE_FORMAT... :-)

et fait gaffe, il est possible que le % soit interprete par sprintf... met un caractere d'echappement devant !!

Mammouth du PHP | 545 Messages

30 janv. 2006, 15:38

Ben non, cela ne fonctionne pas:
Warning: sprintf(): Too few arguments in /home.2/kainbuye/www/classements/class.php on line 7
Query was empty
Sebe

Pour moi, le PHP est une nouvelle aventure qui a commencée fin octobre 2005 ... c'est plus exitant que le HTML!

Eléphant du PHP | 383 Messages

30 janv. 2006, 15:48

essaie de faire un echo $sql pour verifier que la syntaxe est bien retransmise..

Eléphant du PHP | 383 Messages

30 janv. 2006, 15:50

euh, au passage, je siganle que ton sprintf est bizzare, tu n'utilise pas $colname_class. je crois que tu te prends la tete pour rien, fait directement :
$query="SELECT * FROM acrho_course WHERE DATE_FORMAT(date,%Y)=$annee ORDER BY `date` ASC";

et voit ce que ca donne...

Mammouth du PHP | 545 Messages

30 janv. 2006, 16:02

tu n'utilise pas $colname_class.
Ok, je réduit à sa plus simple expression pour avoir cette requête
<?php require_once('../Connections/kainbuye.php');
mysql_select_db($database_kainbuye, $kainbuye);
$query_class = "SELECT * FROM acrho_course WHERE `date` = '%s' AND DATE_FORMAT(date,%Y)=$annee ORDER BY `date` ASC";
$class = mysql_query($query_class, $kainbuye) or die(mysql_error());
$row_class = mysql_fetch_assoc($class);
$totalRows_class = mysql_num_rows($class);
?>
Malheureusement, cela ne fonctionne pas non plus
You have an error in your SQL syntax near '%Y)=2004 ORDER BY `date` ASC' at line 1
Merci
Sebe

Pour moi, le PHP est une nouvelle aventure qui a commencée fin octobre 2005 ... c'est plus exitant que le HTML!

Eléphant du PHP | 383 Messages

30 janv. 2006, 16:11

oui, mais du coup il faut virer le "date=%s"

Mammouth du PHP | 545 Messages

30 janv. 2006, 16:18

Visiblement, il y a encore une poussière qui coince
You have an error in your SQL syntax near '%Y)=2004 ORDER BY `date` ASC' at line 1
Juste un truc pourquoi m'envoit-il à la ligne 1?

Merci
Sebe

Pour moi, le PHP est une nouvelle aventure qui a commencée fin octobre 2005 ... c'est plus exitant que le HTML!

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

30 janv. 2006, 22:38

You have an error in your SQL syntax near '%Y)=2004 ORDER BY `date` ASC' at line 1
Juste un truc pourquoi m'envoit-il à la ligne 1?
Mais faut retenir hein :wink:

il te renvoi un car c'est la ligne 1 de la requete et non du code.

et il te manque de quotes pour dateformat autour de %Y:
... DATE_FORMAT(date,'%Y')...

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute