Recherche dans une table [Résolu]

Signaler
Messages postés
110
Date d'inscription
mardi 30 août 2005
Statut
Membre
Dernière intervention
13 août 2007
-
 asmaneffati -
J'aimerai afficher la liste de tous les membres ayant comme sexe femme dont l'age est compris entre 30 et 35 et une photo
je sais que je dois utiliser cette requete mais comment le faire je ne sais pas car l'age est une liste déroulante de cette sorte
18-24
25-29
30-35
etc

SELECT * FROM table WHERE (datenaissance BETWEEN 30 AND 35) AND

23 réponses

Messages postés
56
Date d'inscription
mardi 4 janvier 2005
Statut
Membre
Dernière intervention
10 octobre 2005

<select name= "age" >

<option value=18> 18-24
<option value=25> 25-29
<option value=30> 30-35

</select>



<select name="sex" >

<option value=F> HOMME
<option value=M> FEMME

</select>



..............................

$sex=$_POST['sex'];

$age=$_POST['age'];

$age2=$age+5;



SELECT * FROM table WHERE (datenaissance BETWEEN $age AND $age2) AND sexe =$sex




Lors de l insertion du sexe dans la base de donnée : on doit inserer F pour femme et M pour homme.



Et ça marche!!!
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
21
Mopi je dirais plutôt :



$requete = "SELECT
datenaissance,jesuis,pseudo,ville,pays FROM Table where (((extract( year
FROM now( ) ) - EXTRACT( YEAR FROM datenaissance)) BETWEEN $age AND
$age1) AND jesuis='$jesuis' AND pays='$pays'";
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
21
Hello,



quel est le problème au juste ? Tu as juste :

SELECT age, photo, sexe FROM table WHERE (datenaissance BETWEEN 30 AND 35) AND sexe = 'femme'



Qu'est-ce qui ne fonctionne pas au juste ?
Messages postés
56
Date d'inscription
mardi 4 janvier 2005
Statut
Membre
Dernière intervention
10 octobre 2005

Pour la liste tu fera comme suite :



Puisuqe tu utilises pour chaque choix un intervalle de ans :



<select name= "choix" >

<option value=18> 18-24

<option value=25> 25-29

<option value=30> 30-35

</select>

..............

$ch1=$_POST['choix'];

$ch2=$ch1+5;





SELECT * FROM table WHERE (datenaissance BETWEEN $ch1 AND $ch2) AND sexe =f
Messages postés
110
Date d'inscription
mardi 30 août 2005
Statut
Membre
Dernière intervention
13 août 2007

ok pour ça mais mon probleme est que l'utilisateur à un choix dans une liste sexe ( femme ou homme) et le datenaissance (18-24,25-29,30-35 etc).
si je fais comme tu m'as dit j'aurai pas de réponse quand l'utilisateur choisira datenaissance entre 25 et 29 et sexe=homme
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
21
Ah ok je n'avais pas pigé le problème de fond.

Bah tu fais un explode de ton choix.

$choix = explode ('-', $_POST['choix']);

et ta liste :

<option valu ="18-25">18-25</option>

etc...puis

datenaissance BETWEEN $choix[0] AND $choix[1]
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
21
gaffe hein, tes valeurs ne sont pas toutes à intervalle = valeur de
départ + 5, d'où le explode (). Pour le reste, Sephi a tout bon ;-)
Messages postés
110
Date d'inscription
mardi 30 août 2005
Statut
Membre
Dernière intervention
13 août 2007

une question dans ma table la datenaissance est sous cette forme aaaa/mm/jj
Messages postés
110
Date d'inscription
mardi 30 août 2005
Statut
Membre
Dernière intervention
13 août 2007

Excusez moi je crois que je m'explique mal
ma table contient un champ datenaissance sous cette forme aaaa/mm/jj
voici le script que l'utilisateur utilisera


<HTML>


<HEAD>


</HEAD>


<FORM action="rechercher.php" method="POST">


Je suis,

Homme
Femme,

----

Je recherche,

Femme
Homme,

,

----

Age,

<SELECT name="age">

<OPTION value="18">18-24</OPTION>

<OPTION value="25">25-29</OPTION>

<OPTION value="30">30-34</OPTION>

<OPTION value="35">35-39</OPTION>

<OPTION value="40">40-44</OPTION>

<OPTION value="45">45-49</OPTION>

<OPTION value="50">50-54</OPTION>

<OPTION value="55">55 et plus</OPTION>

</SELECT>,

----

PAYS,

<SELECT name="pays ">

<OPTION value="Allemagne">Allemagne</OPTION>

<OPTION value="Belgique">Belgique</OPTION>

<OPTION value="Etats-Unis">Etats-unis</OPTION>

<OPTION value="France">France</OPTION>

<OPTION value="Pays-bas">Pays-bas</OPTION>

<OPTION value="Suisse">Suisse</OPTION>

</SELECT>,

----

Photo

,

,


</FORM>


</HTML>

voici le script de recherche


<?


$pseudo = isset($_POST["pseudo"]) ? $_POST["pseudo"] : "";


$jesuis = isset($_POST["jesuis"]) ? $_POST["jesuis"] : "";


$age1=isset($_POST["age1"]) ? $_POST["age1"] : "";


$age2=$age1+5;


// information pour la connection
à le DB


$host = 'localhost';


$user = 'root';


$pass = '';


$db = 'nombase';


// connection à la DB


$link = mysql_connect ($host,$user,$pass) or die ('Erreur : '.mysql_error() );


mysql_select_db($db) or die ('Erreur :'.mysql_error());


// requête SQL qui compte le nombre total d'enregistrement dans la table et qui


//récupère tous les enregistrements


$select = "SELECT datenaissance,jesuis,pseudo,ville,pays FROM Table WHERE (datenaissance BETWEEN $age1 AND $age2) AND jesuis='$jesuis'";


$result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() );


$total = mysql_num_rows($result);


// si on a récupéré un résultat on l'affiche.


if($total) {


// lecture et affichage des résultats sur 2 colonnes, 1 résultat par ligne.


while ($row = mysql_fetch_array($result)) {


echo ''.\"\n\";

echo '----
';

echo ', ';

echo'';

echo '----
';

echo ''.$row["pseudo"].' ';

echo ', </td>';

echo '';

echo '----
';

echo ', ';

echo 'VILLE, '; echo ''.$row["ville"].', ';

echo'';

echo '----
';

echo ', ';

echo 'PAYS, '; echo ''.$row["pays"].', ';

echo'';

echo '
'."\n";


}


// on libère le résultat


mysql_free_result($result);


}


//mysql_close();


?>
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
21
Dans ce cas tu devras faire le calcul pour savoir entre combien et combien et compris l'âge.
Messages postés
110
Date d'inscription
mardi 30 août 2005
Statut
Membre
Dernière intervention
13 août 2007

Si je comprends bien tu parles de l'intervalle entre les dates de naissance je prends 4ans alors
exemple
18-22
23-27
28-32
33-37
38-42
43-47
48-52
53 et plus

sinon franchement je ne vois pas ce qu'il faut faire
Messages postés
181
Date d'inscription
jeudi 27 février 2003
Statut
Membre
Dernière intervention
2 mars 2009

salut :

ta requête est "évidemment" incorrecte dans la mesure ou la date de
naissance est au format date aaaa-mm-jj et tu lui demandes de "rentrer"
dans un intervalle entier... Il faut donc que tu calcule l'age pour
pouvoir le comparer à l'intervalle. une méthode (qui compte l'age en
fonction de l'année de naissance : donc si nous sommes en janvier 2005,
une personne née le 26 décembre 1983 aura donc 22a (alors que
théoriquement elle ne les a pas encore.. a toi de voir c'est un
détail..)

donc le début du where de ta requete devrait ressembler à :

where (extract( year FROM now( ) ) - EXTRACT( YEAR FROM dateinscr ) BETWEEN $age1 AND $age2)....



normalement ça marche
Messages postés
181
Date d'inscription
jeudi 27 février 2003
Statut
Membre
Dernière intervention
2 mars 2009

dateinscr à remplacer par datenaissance bien sur (tête en l'air)
Messages postés
110
Date d'inscription
mardi 30 août 2005
Statut
Membre
Dernière intervention
13 août 2007

Erreur : Erreur de syntaxe près de '' à la ligne 1

qui est :
<?

je ne sais d'où vient l'erreur
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
21
Non, c'est une erreur sql ça, pas php. Regarde ta requete, c'est elle qui foire.
Messages postés
110
Date d'inscription
mardi 30 août 2005
Statut
Membre
Dernière intervention
13 août 2007

Voici le script car je ne vois pas ce que j'ai fait comme erreur
<?


$jesuis = isset($_POST["jesuis"]) ? $_POST["jesuis"] : "";


$age=isset($_POST["age"]) ? $_POST["age"] : "";


$age1=$age+5;


// information pour la connection
à le DB


$host = 'localhost';


$user = 'root';


$pass = '';


$db = 'nombase';


// connection à la DB


$link = mysql_connect ($host,$user,$pass) or die ('Erreur : '.mysql_error() );


mysql_select_db($db) or die ('Erreur :'.mysql_error());


$requete = "SELECT datenaissance,jesuis,pseudo,ville,pays FROM Table where ((extract( year FROM now( ) ) - EXTRACT( YEAR FROM datenaissance) BETWEEN $age AND $age1) AND jesuis='$jesuis'";


$result = mysql_query($requete,$link) or die ('Erreur : '.mysql_error() );


$total = mysql_num_rows($result);


// si on a récupéré un résultat on l'affiche.


if($total) {


while ($row = mysql_fetch_array($result)) {


echo ''.\"\n\";

echo '----
';

echo ', ';

echo'';

echo '----
';

echo ''.$row["pseudo"].' ';

echo ', </td>';

echo '';

echo '----
';

echo ', ';

echo 'VILLE, '; echo ''.$row["ville"].', ';

echo'';

echo '----
';

echo ', ';

echo 'PAYS, '; echo ''.$row["pays"].', ';

echo'';

echo '
'."\n";


}


// on libère le résultat


mysql_free_result($result);


}


?>
Messages postés
181
Date d'inscription
jeudi 27 février 2003
Statut
Membre
Dernière intervention
2 mars 2009

il te manque une parenthèse fermante dans ta requête...
Messages postés
110
Date d'inscription
mardi 30 août 2005
Statut
Membre
Dernière intervention
13 août 2007

cool j'ai trouvé. Effectivement c'est cela qui est la cause merci.

A+
Messages postés
110
Date d'inscription
mardi 30 août 2005
Statut
Membre
Dernière intervention
13 août 2007

cool j'ai trouvé. Effectivement c'est cela qui est la cause merci.
J'ai un autr problème sur la requete je veux ajouter une autre condition

$requete = "SELECT datenaissance,jesuis,pseudo,ville,pays FROM Table where ((extract( year FROM now( ) ) - EXTRACT( YEAR FROM datenaissance) BETWEEN $age AND $age1) AND jesuis='$jesuis' AND pays='$pays'";

mais cela ne marche
Messages postés
110
Date d'inscription
mardi 30 août 2005
Statut
Membre
Dernière intervention
13 août 2007

ça marche. j'ai fais quelque chose dans ma table et j'aimerai avoir votre avis la dessus.

Lorsque l'utilisateur n'envoie pas de photo mon script j'upload une image sur laquelle il y a pas de photo. Cette photo apparait dans ma galerie photo. je ne sais si c'est bien de procéder comme cela?
1 2