Script php recherche de membre par leur age

Bonjour,

je suis en train d'essayer de creer un site internet ,j'ai fait une page "recherche rapide de membre" et j'amerai creer un script en php qui recherche les membre de mon site par rapport age

ex: affiche les membre qui ont de 18 ans a 22ans !

probleme c'est que je ne sais pas du tout comment faire, dans ma bdd j'ai enregistré la date de naissances de mes membre en 3 champs
jour, mois ,annee

si quelqu'un aurrait un script a me proposer ca serait cooll!!

j'utilise wamp5 avec phpmyadmin!

donc j'enregistre la date de naissance avec le type date dans la bdd

comme ca!

<form method="post" action="reponseinscription.php"> <!-- ouverture du formulaire-->
<fieldset>
<legend>Formulaire</legend>
<!-- Le formulaire -->
<p>
<label for="date_de_naissance">Votre date de naissance</label> :
<input type="text" name="jour" size="2" maxlength="2"/>
<input type="text" name="mois" size="2" maxlength="2"/>
<input type="text" name="annee" size="4" maxlength="4"/>
</fieldset>
<!--Les bouttons magiques ^^-->
<p>
<input type="submit" value="envoyer" /> <input type="reset" />
</p>

on m'a dit qu'il fallait 1 seul champs dans la bdd avec jour,mois ,annee

pouvais vous me montrer si possible un script complet svp? avec enresgistrement de la date de naissances du membre dans la bdd et
aussi affichage des membres qui on entre x age et x age?

merci d'avance

cordialement
Configuration: Windows XP
Internet Explorer 6.0

24 réponses

Résumé de la discussion

La discussion porte sur comment créer un script PHP/MySQL pour rechercher des membres par âge en se basant sur la date de naissance enregistrée dans la base de données. Plusieurs répondants suggèrent de stocker la date de naissance dans un seul champ date et d'utiliser des calculs SQL comme TIMESTAMPDIFF pour filtrer par âge entre min et max. D'autres propositions utilisent PHP pour convertir la date de naissance en âge via une fonction comme calculer_age, ou manipulent manuellement les chaînes avec explode, par exemple. En cas de besoin, privilégier les timestamps et les requêtes SQL calculant l'âge directement, par exemple via TIMESTAMPDIFF dans la clause WHERE pour obtenir des résultats entre les âges min et max.

Bobot (l’IA à votre service)
  1. et ca je ne sait pas trop comment le metre dans mon script:

    <?php
    function calculer_age($naissance)
    {
    $arr1 = explode('/', $naissance);
    $arr2 = explode('/', date('d/m/Y'));
    if(($arr1[1] < $arr2[1]) || (($arr1[1] == $arr2[1]) && ($arr1[0] <= $arr2[0])))
    return $arr2[2] - $arr1[2];
    return $arr2[2] - $arr1[2] - 1;
    }

    le ic !!!
    c'est que moi ma recherche ce fait par age est pas part année de naissances!

    regarde je te montre le script de recerche !!

    span class= "ma_recherche_rapide"> Ma recherche rapide:
    <div id="ma_recherche_rapide"></span>
    <h2>Ma recherche rapide</h2> <!-- Titre du fieldset -->

    <p>
    Je recherche :<br />
    <input type="radio" name="re_sexe" value="fille" id="fille" /> <label for="fille">Fille</label><br />
    <input type="radio" name="re_sexe" value="garçon" id="garçon" /> <label for="garçon">Garçon</label><br />
    </p>

    <p>
    <label for="age_minimum"><span class= "age_minimum">Age minimum </span></label><br />
    <select name="age_minimum" id="age_minimum">

    <option value="18">18</option>
    <option value="19">19</option>
    <option value="20">20</option>
    <option value="21">21</option>
    <option value="22">22</option>
    <option value="23">23</option>
    <option value="24">24</option>
    <option value="25">25</option>
    <option value="26">26</option>
    <option value="27">27</option>
    <option value="28">28</option>
    <option value="29">29</option>
    <option value="30">30</option>
    <option value="31">31</option>
    <option value="32">32</option>
    <option value="33">33</option>
    <option value="34">34</option>
    <option value="35">35</option>
    <option value="36">36</option>
    <option value="37">37</option>
    <option value="38">38</option>
    <option value="39">39</option>
    <option value="40">40</option>
    <option value="41">41</option>
    <option value="42">42</option>
    <option value="43">43</option>
    <option value="44">44</option>
    <option value="45">45</option>
    <option value="46">46</option>
    <option value="47">47</option>
    <option value="48">48</option>
    <option value="49">49</option>
    <option value="50">50</option>
    <option value="51">51</option>
    <option value="52">52</option>
    <option value="53">53</option>
    <option value="54">54</option>
    <option value="55">55</option>
    <option value="56">56</option>
    <option value="57">57</option>
    <option value="58">58</option>
    <option value="59">59</option>
    <option value="60">60</option>
    <option value="61">61</option>
    <option value="62">62</option>
    <option value="63">63</option>
    <option value="64">64</option>
    <option value="65">65</option>
    <option value="66">66</option>
    <option value="67">67</option>
    <option value="68">68</option>
    <option value="69">69</option>
    <option value="70">70</option>
    <option value="71">71</option>
    <option value="72">72</option>
    <option value="73">73</option>
    <option value="74">74</option>
    <option value="75">75</option>
    <option value="76">76</option>
    <option value="77">77</option>
    <option value="78">78</option>
    <option value="79">79</option>
    <option value="80">80</option>
    <option value="81">81</option>
    <option value="82">82</option>
    <option value="83">83</option>
    <option value="84">84</option>
    <option value="85">85</option>
    <option value="86">86</option>
    <option value="87">87</option>
    <option value="88">88</option>
    <option value="89">89</option>
    <option value="90">90</option>
    <option value="91">91</option>
    <option value="92">92</option>
    <option value="93">93</option>
    <option value="94">94</option>
    <option value="95">95</option>
    <option value="96">96</option>
    <option value="97">97</option>
    <option value="98">98</option>
    <option value="99">99</option>

    </select>

    <p>
    <div id="age_maximum"> <label for="age_maximum"><span class= "age_maximum">Age maximum</span></label><br />
    <select name="age_maximum" id="age_maximum">

    <option value="18">18</option>
    <option value="19">19</option>
    <option value="20">20</option>
    <option value="21">21</option>
    <option value="22">22</option>
    <option value="23">23</option>
    <option value="24">24</option>
    <option value="25">25</option>
    <option value="26">26</option>
    <option value="27">27</option>
    <option value="28">28</option>
    <option value="29">29</option>
    <option value="30">30</option>
    <option value="31">31</option>
    <option value="32">32</option>
    <option value="33">33</option>
    <option value="34">34</option>
    <option value="35">35</option>
    <option value="36">36</option>
    <option value="37">37</option>
    <option value="38">38</option>
    <option value="39">39</option>
    <option value="40">40</option>
    <option value="41">41</option>
    <option value="42">42</option>
    <option value="43">43</option>
    <option value="44">44</option>
    <option value="45">45</option>
    <option value="46">46</option>
    <option value="47">47</option>
    <option value="48">48</option>
    <option value="49">49</option>
    <option value="50">50</option>
    <option value="51">51</option>
    <option value="52">52</option>
    <option value="53">53</option>
    <option value="54">54</option>
    <option value="55">55</option>
    <option value="56">56</option>
    <option value="57">57</option>
    <option value="58">58</option>
    <option value="59">59</option>
    <option value="60">60</option>
    <option value="61">61</option>
    <option value="62">62</option>
    <option value="63">63</option>
    <option value="64">64</option>
    <option value="65">65</option>
    <option value="66">66</option>
    <option value="67">67</option>
    <option value="68">68</option>
    <option value="69">69</option>
    <option value="70">70</option>
    <option value="71">71</option>
    <option value="72">72</option>
    <option value="73">73</option>
    <option value="74">74</option>
    <option value="75">75</option>
    <option value="76">76</option>
    <option value="77">77</option>
    <option value="78">78</option>
    <option value="79">79</option>
    <option value="80">80</option>
    <option value="81">81</option>
    <option value="82">82</option>
    <option value="83">83</option>
    <option value="84">84</option>
    <option value="85">85</option>
    <option value="86">86</option>
    <option value="87">87</option>
    <option value="88">88</option>
    <option value="89">89</option>
    <option value="90">90</option>
    <option value="91">91</option>
    <option value="92">92</option>
    <option value="93">93</option>
    <option value="94">94</option>
    <option value="95">95</option>
    <option value="96">96</option>
    <option value="97">97</option>
    <option value="98">98</option>
    <option value="99">99</option>

    </select>
    <br /></div>
    <p> <div id="departement">
    <label for="departement"><span class= "departement">Département</span></label><br />
    <select name="departement" id="departement">
    <option value="01">01</option>
    <option value="02">02</option>
    <option value="03">03</option>
    <option value="04">04</option>
    <option value="05">05</option>
    <option value="06">06</option>
    <option value="07">07</option>
    <option value="08">08</option>
    <option value="09">09</option>
    <option value="10">10</option>
    <option value="11">11</option>
    <option value="12">12</option>
    <option value="13">13</option>
    <option value="14">14</option>
    <option value="15">15</option>
    <option value="16">16</option>
    <option value="17">17</option>
    <option value="18">18</option>
    <option value="19">19</option>
    <option value="2A">2A</option>
    <option value="2B">2B</option>
    <option value="20">20</option>
    <option value="21">21</option>
    <option value="22">22</option>
    <option value="23">23</option>
    <option value="24">24</option>
    <option value="25">25</option>
    <option value="26">26</option>
    <option value="27">27</option>
    <option value="28">28</option>
    <option value="29">29</option>
    <option value="30">30</option>
    <option value="31">31</option>
    <option value="32">32</option>
    <option value="33">33</option>
    <option value="34">34</option>
    <option value="35">35</option>
    <option value="36">36</option>
    <option value="37">37</option>
    <option value="38">38</option>
    <option value="39">39</option>
    <option value="40">40</option>
    <option value="41">41</option>
    <option value="42">42</option>
    <option value="43">43</option>
    <option value="44">44</option>
    <option value="45">45</option>
    <option value="46">46</option>
    <option value="47">47</option>
    <option value="48">48</option>
    <option value="49">49</option>
    <option value="50">50</option>
    <option value="51">51</option>
    <option value="52">52</option>
    <option value="53">53</option>
    <option value="54">54</option>
    <option value="55">55</option>
    <option value="56">56</option>
    <option value="57">57</option>
    <option value="58">58</option>
    <option value="59">59</option>
    <option value="60">60</option>
    <option value="61">61</option>
    <option value="62">62</option>
    <option value="63">63</option>
    <option value="64">64</option>
    <option value="65">65</option>
    <option value="66">66</option>
    <option value="67">67</option>
    <option value="68">68</option>
    <option value="69">69</option>
    <option value="70">70</option>
    <option value="71">71</option>
    <option value="72">72</option>
    <option value="73">73</option>
    <option value="74">74</option>
    <option value="75">75</option>
    <option value="76">76</option>
    <option value="77">77</option>
    <option value="78">78</option>
    <option value="79">79</option>
    <option value="80">80</option>
    <option value="81">81</option>
    <option value="82">82</option>
    <option value="83">83</option>
    <option value="84">84</option>
    <option value="85">85</option>
    <option value="86">86</option>
    <option value="87">87</option>
    <option value="88">88</option>
    <option value="89">89</option>
    <option value="90">90</option>
    <option value="91">91</option>
    <option value="92">92</option>
    <option value="93">93</option>
    <option value="94">94</option>
    <option value="95">95</option>

    </select></div>
    </p>

    <input type="submit" name="envoi" value="Envoyer " />

    si tu peut faire un script avec tout ca si tu t'ennuis un peut trop au taff!!

    ca serait super cool de ta part!!

    je doit partir !

    encore bonne année!
    1. Contributeur
      Ca va t'arricher les photos des membres qui sont né dans la période. Petite correction du code :

      <?php

      if (isset($_POST['pseudo']) && isset ($_POST['re_sexe']) && isset ($_POST['date_minimum']) && isset ($_POST['date_maximum']))
      // Si les variables existent
      {
      // D'abord, on se connecte à MySQL
      mysql_connect("localhost", "root", "");
      mysql_select_db("sitemicka");

      $sexe = $_POST['re_sexe'];
      $date_min = $_POST['date_minimum'];
      $date_max = $_POST['date_maximum'];
      $dep = $_POST['departement'];

      $reponse1 = mysql_query("Select id, photo2 from infoclients where sexe='".$sexe."'date_naissance > $date_min AND date_naissance < $date_max");

      echo '<table>';
      while ($donnees1 = mysql_fetch_array($reponse1) )
      echo '<tr><td><a href=fichemembre.php?id='.$donnees1['id'].'><img src="images/'.$donnees1['photo2'].'" alt="image" /></a></td></tr>';
      echo '</table>';
      }

      ?>

      Tu m'embete pas, j'suis en train de me faire ch... au boulot lol
      1. excuse moi de t'embeté encore mais dit moi si j'ai compris stp!

        <?php

        if (isset($_POST['pseudo']) && isset ($_POST['re_sexe']) && isset ($_POST['date_minimum']) && isset ($_POST['date_maximum']))
        // Si les variables existent

        {

        // D'abord, on se connecte à MySQL
        mysql_connect("localhost", "root", "");
        mysql_select_db("sitemicka");

        $sexe = $_POST['re_sexe'];
        $date_min = $_POST['date_minimum'];
        $date_max = $_POST['date_maximum'];
        $dep = $_POST['departement'];

        $reponse1 = mysql_query("Select id, photo2 from infoclients where sexe='".$sexe."'date_naissance > $date_min AND date_naissance < $date_max");
        while ($donnees1 = mysql_fetch_array($reponse1) )
        mysql_close(); // Déconnexion de MySQL
        {

        ?>

        <?php echo '<a href=fichemembre.php?id='.$donnees1['id'].'><img src="images/'.$donnees1['photo2'].'" alt="image" /></a></td></tr>'; ?>

        <?php

        }
        }

        ?>
        1. salut
          il me semble que l'explode sert a transformer un array en une seule valeur ou c'est l'inverse je ne sais plus
          1. Contributeur
            une seule valeur en array :)
        2. okok merci!

          comme ca alors c'est bon!

          function calculer_age($naissance)
          {
          $arr1 = explode('/', $naissance);
          $arr2 = explode('/', date('d/m/Y'));
          if(($arr1[1] < $arr2[1]) || (($arr1[1] == $arr2[1]) && ($arr1[0] <= $arr2[0])))
          return $arr2[2] - $arr1[2];
          return $arr2[2] - $arr1[2] - 1;
          }13 message(s) posté(s) depuis le dimanche 30 décembre 2007
          1. Contributeur
            :-) Y'a pas de quoi :)

            Bon réveillon & meilleurs voeux !
            1. okok merci!

              comme ca alors c'est bon!

              function calculer_age($naissance)
              {
              $arr1 = explode('/', $naissance);
              $arr2 = explode('/', date('d/m/Y'));
              if(($arr1[1] < $arr2[1]) || (($arr1[1] == $arr2[1]) && ($arr1[0] <= $arr2[0])))
              return $arr2[2] - $arr1[2];
              return $arr2[2] - $arr1[2] - 1;
              }
              1. avec ce formulaires c'est bon?

                <form method="post" action="reponseinscription.php"> <!-- ouverture du formulaire-->
                <fieldset>
                <legend>Formulaire</legend>
                <!-- Le formulaire -->
                <p>
                <label for="date_de_naissance">Votre date de naissance</label> :
                <input type="text" name="jour" size="2" maxlength="2"/>
                <input type="text" name="mois" size="2" maxlength="2"/>
                <input type="text" name="annee" size="4" maxlength="4"/>
                </fieldset>
                <!--Les bouttons magiques ^^-->
                <p>
                <input type="submit" value="envoyer" /> <input type="reset" />
                </p>

                il faut que je rajoute des - entre jour et mois et mois et annes ou ca se fait tout seul dans la bdd avec DATE,?
                1. Contributeur
                  hmm...

                  Bon, tu as t'a requète avec le champs date_naissance qui est sorti.

                  Tu récupère donc une variable yyyy-mm-dd. Tu ressort l'année par un explode. Tu soustrait l'année en cours par l'année de naissance, et tu obtient le nombre d'année de l'utilisateur... ce qu'on appel son age ;-p
                  1. a tu un petit exemple a me montrer pour que je comprenne pas tout de travers!!
                    1. Contributeur
                      Comme le dit Alain42, après c'est une soustraction de l'année, avec une vérification du jour/mois...
                      1. Bonsoir,

                        Si ça te sort les membres nés entre x et y, SELECT * FROM te sort tous les champs donc celui de la adate de naissance.
                        Il te sera facile en php ensuite de calculer age=date_aujourd'hui-date_naisssance et de l'afficher en même temps que le résultat de ta requette
                        1. merci de ta reponse!

                          mais cette requ^te va me sortir les membre nee entre x et x!

                          or moi j'aimerai que ca me sort l'age aussi du membre!!
                          1. Contributeur
                            hmm, j'avais plus pensé à ça... effectivement, le timestamps commence au premier janvier 70.

                            Alors, j'ai pas de script sous la main, mais globalement :

                            Tu enregistre date, mois, années dans ta base SQL dans un champ au format "DATE", qui sera de la forme YYYY-MM-DD

                            Ensuite, pour une requète SQL, il te suffit d'un

                            $req = mysql_query("Select * from membre where date_naissance > $date_min AND date_naissance < $date max");
                            Logiquement, ca doit marcher !

                            A+
                            • 1
                            • 2