Mode URL: Besoin d'un conseil

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Mode URL: Besoin d'un conseil

par Sebe » 31 janv. 2006, 00:49

Yesssss, tout baigne dans l'huile!

Merci à Jobherzt et à Truc

NB Truc, je finirais par voir un jour les méchants bricoles qui embêtent ! ! !

par Truc » 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')...

par Sebe » 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

par jobherzt » 30 janv. 2006, 16:11

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

par Sebe » 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

par jobherzt » 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...

par jobherzt » 30 janv. 2006, 15:48

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

par Sebe » 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

par jobherzt » 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 !!

par Sebe » 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

par jobherzt » 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....

par Sebe » 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

par jobherzt » 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 ?

par Sebe » 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

par jobherzt » 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.