8791 sujets

Développement web côté serveur, CMS

Bonjour à tous, (et joyeux noel Smiley cligne )
J'essaye de faire une requête en fonction de ce que choisit l'utilisateur comme date. Pour cela j'ai fais un formulaire select (que plus tard je voudrais rendre automatique - càd que je rentrerais dans la bdd et je regarderais si cette date existe , si oui je créé un option sinon je ne le cré pas. Mais bon ceci quand j'arriverais à faire ce qui suit).
Donc voici le formulaire select tout basique :
<label for="annee">Selectionner ann&eacute;es de recherche :</label><select name="annee" id="annee">
				<option value="2003">2003/2004</option>
				<option value="2004">2004/2005</option>
				<option value="2005">2005/2006</option>
			</select>

Je voudrais que par exemple, si l'utilisateur choisit 2004/2005 la requete m'affiche ce qui se trouve dans la bdd où le champ date est compris entre le '2004-08-01' et '2005-07-31'.
J'ai essayais de faire ceci sans succes :
$date=$_POST['annee'];
$dateinf=$date'-08-01';
$datesup=($date+1)'-07-31'

Alors oui je sais c'est du grand n'importe quoi mais bon j'ai essayé de bidouiller comme je pouvais.
Et ensuite de faire cette requete :

$sql="SELECT * FROM seminaires WHERE date < $datesup AND date > $dateinf";


Bien sur cela ne marche evidement pas et je ne vois pas du tout comment faire. Si quelqu'un a une idée ou une piste j'en serais ravi !
Merci beaucoup de votre aide ! Smiley lol
Modifié par Fer2Lance (27 Dec 2010 - 13:29)
Je pense avoir un peu amélioré mon bidouillage :
<form method="post" action="">
	<label for="annee">Selectionner ann&eacute;es de recherche :</label> <select name="annee" id="annee">
				<option value="2003">2003/2004</option>
				<option value="2004">2004/2005</option>
				<option value="2005">2005/2006</option>
			</select>
		<input type="submit" name="submit" value=" Rechercher ">
	</form>


if(isset($_POST['annee'])){
		$date=$_POST['annee'];
	} else {
		$date=date("Y");
	}
	$sql="SELECT * FROM seminaires WHERE (year(date) >= $date and month(date)>=08) AND (year(date) <= ($date+1) and month(date)<=07)";
	$req=mysql_query($sql);
	while ($row=mysql_fetch_assoc($req)){
		echo ''.$row['nom'].''.$row['prenom'].''.$row['titre'].'';
	}	


J'ai une erreur mais je pense que je suis plus sur la bonne piste. Smiley cligne
EDIT : enfin pas d'erreur, juste que ca ne m'affiche rien ... Smiley cligne
Modifié par Fer2Lance (26 Dec 2010 - 20:19)
Salut,

Fer2Lance a écrit :

J'ai essayais de faire ceci sans succes :
$date=$_POST['annee'];
$dateinf=$date'-08-01';
$datesup=($date+1)'-07-31'

Alors oui je sais c'est du grand n'importe quoi
C'est pas faux ! Smiley langue

Déjà si tu te mets à PHP il va falloir apprendre à concaténer :
$annee = '2004';
$date_deb = $annee . '-08-01';
$date_fin = (intval($annee) + 1) . '-07-31';
Ensuite je ne sais pas d'où sort le 01/08 (et du même coup le 31/07 qui doit être calculé) mais je suppose qu'il s'agit d'un autre champ de saisie du formulaire. Il se trouve que PHP propose une fonction extra : strtotime. Elle permet de faire par exemple :
$annee = '2004';
$date_deb = $annee . '-08-01';
$date_fin = date('Y-m-d', strtotime($date_deb . ' +1 year -1 day'));
Pour ce qui est de ta table il est déconseillé d'utiliser comme nom de champ date qui fait partie des noms réservés de Mysql

Cela pourrait donner :
require_once('connexion.inc.php');
$annee = '2004';
$date_deb = $annee . '-08-01';
$date_fin = date('Y-m-d', strtotime($date_deb . ' +1 year -1 day'));
$query = sprintf("SELECT nom, prenom, titre FROM seminaires WHERE date_seminaire between '%s' AND '%s'",
mysql_real_escape_string($date_deb),
mysql_real_escape_string($date_fin));
mysql_query($query);
Salut et merci de m'avoir répondu.
Pour le mot date j'ai vérifié et d'après la page web que tu m'as envoyé je peux l'utiliser en mysql. Donc je modifirais ce nom plus tard.

J'ai essayé de me guidé de tes codes (je n'ai pas le droit d'utilisé le pdo) et ça me donne ceci :
if(isset($_POST['annee'])){
		$date=$_POST['annee'];
	} else {
		$date=date("Y");
	}
	$datedeb=$date . '-08-01';
	echo ''.$datedeb.'';
	$datefin = (intval($date) + 1) . '-07-31';
	echo ''.$datefin.'';
	$sql="SELECT * FROM seminaires WHERE date >= $datedeb AND date <=$datefin";
	$req=mysql_query($sql);
	echo ''.$req.'';
	while ($row=mysql_fetch_assoc($req)){
		echo ''.$row['nom'].''.$row['prenom'].''.$row['titre'].'';
	}


La requete ne m'affiche rien. J'ai fais des echo pour voir ce que me donne les variables. Pour datedeb et datefin tout fonctionne nickel (merci !!!), mais par contre ma requête $req m'affiche 'Resource id #8' pour n'importe quelle date. J'ai cherché sur google, et on me dit que c'est parce que je ne fais pas de mysql_fetch_assoc. Très bien je le fais juste après mais rien ne s'affiche quand même ... Smiley ohwell
Je suis un peu perdu. Smiley ohwell

EDIT : Mon erreur est mon AND. Avec OR il m'affiche toute ma table. Le problème c'est que je veux mon AND ... comment faire ? Smiley lol
Modifié par Fer2Lance (27 Dec 2010 - 11:25)
Suis les conseils de Heyoan et je pense que tu n’auras plus de problème.

Entoure de simple cote ' tes $datedeb et $datefin.
N’utilise pas SELECT * car quand tu voudras modifier la structure de ta table tu auras des problèmes.
Utilise des fonctions mysql_real_escape_string, comme Heyoan le fait, pour sécuriser ton site contre les pirates.
Modifié par adrien881 (27 Dec 2010 - 12:54)
Merci les gars. Ca marche. Smiley smile
Mon erreur du AND venait du fait que j'avais pas mis de simple quote entres mes deux variables.
Je vais amélioré mon code en m'aidant de ce que m'a fait Heyoan.

Merci !