IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Calcul age formulaire PHP et SQL


Sujet :

PHP & Base de données

  1. #1
    Membre très actif
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    295
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 295
    Par défaut Calcul age formulaire PHP et SQL
    Bonjour,

    j'ai un site avec des membres je stocke leur date de naissance dans un champs de type date sous la forme aaaa-mm-jj soit 1975-06-07 pour le 07 juin 1975
    j'utilise une fonction date en php qui calcule l'age par rapport a la date de naissance
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    function age($date)
    {
      $d = strtotime($date);
      //echo strftime('%a %d %b %Y', $d).' > ';
      return (int) ((time() - $d) / 3600 / 24 / 365.242);
    }
    jusqu'a la tout fonctionne

    j'ai mis en place un formulaire avec des champs age_min et age_max pour pouvoir faire un tri sur l'age via le formulaire par le biais d'une requete sql et la je bute

    j'ai essaye de passer dans une variable la fonction age mais ca ne fonctionne pas

    merci de votre aide
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    if (isset($age_max)) $age_max=(date(datenaiss));
    if (isset($age_min)) $age_min=(date(datenaiss));
     
    $sql="select * from profil,region where profil.idreg=region.id_region"; 
     
    if ($_GET['age_min']){
    $sql.= " and profil.datenaiss >  '".$_GET['age_min']."' '";
    }
     
    if ($_GET['age_max']){
    $sql.= " and profil.datenaiss  < '".$_GET['age_max']."' '";
    }
     
    $result=mysqli_query($conn,$sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysqli_error($conn));
    echo $sql;

  2. #2
    Membre éclairé Avatar de solo190
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Avril 2007
    Messages
    412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 412
    Par défaut
    hello digger,
    quel est le message d'erreur ?
    A+

  3. #3
    Membre très actif
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    295
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 295
    Par défaut
    bonjour le message d'erreur quand j'execute la requete en mode debug quand je lance une rechercher entre 22 et 24 ans


    Erreur SQL !
    select * from profil,region where profil.idreg=region.id_region and profil.datenaiss > '22' ' and profil.datenaiss < '24' '

    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '24' '' at line 1

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 136
    Par défaut
    A quoi sert cette apostrophe ajoutée après chaque valeur d'âge ?
    Ensuite je ne comprends pas bien la logique roll: Si datenaiss est la date de naissance, la comparer directement à l'âge ne donnera pas le bon résultat.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  5. #5
    Membre prolifique Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 898
    Par défaut
    Salut à tous.

    Voici un exemple d'utilisation d'une fonction retournant l'âge d'une personne en fonction de sa date de naissance.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    --------------
    START TRANSACTION
    --------------
     
    --------------
    DROP DATABASE IF EXISTS `base`
    --------------
     
    --------------
    CREATE DATABASE IF NOT EXISTS `base`
            DEFAULT CHARACTER SET `latin1`
            DEFAULT COLLATE       `latin1_general_ci`
    --------------
     
    --------------
    DROP TABLE IF EXISTS `test`
    --------------
     
    --------------
    CREATE TABLE `test`
    ( `id`            integer UNSIGNED NOT NULL auto_increment primary key,
      `naissance`     date             NOT NULL
    ) ENGINE=InnoDB
      DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
      ROW_FORMAT=COMPRESSED
    --------------
     
    --------------
    INSERT INTO `test` (`naissance`) value ('1985-05-28'),('1978/12/23'),('2002-03-17')
    --------------
     
    --------------
    select * from `test`
    --------------
     
    +----+------------+
    | id | naissance  |
    +----+------------+
    |  1 | 1985-05-28 |
    |  2 | 1978-12-23 |
    |  3 | 2002-03-17 |
    +----+------------+
    --------------
    drop function if exists `age`
    --------------
     
    --------------
    create function age( naissance date )
      returns smallint
      language sql
    begin
      return year(subdate(curdate(), to_days(naissance)));
    end
    --------------
     
    --------------
    select *, age(naissance) as Age
    from test
    --------------
     
    +----+------------+------+
    | id | naissance  | Age  |
    +----+------------+------+
    |  1 | 1985-05-28 |   33 |
    |  2 | 1978-12-23 |   40 |
    |  3 | 2002-03-17 |   17 |
    +----+------------+------+
    --------------
    COMMIT
    --------------
     
     
    Appuyez sur une touche pour continuer...
    @+

  6. #6
    Membre éclairé Avatar de solo190
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Avril 2007
    Messages
    412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 412
    Par défaut
    hello ,
    je te conseille de prendre la peinne de lire tes messages d'erreur ; lorsque tu recois ceci comme erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Erreur SQL !
    select * from profil,region where profil.idreg=region.id_region and profil.datenaiss > '22' ' and profil.datenaiss < '24' '
    tu vois immédiatement que tu as une cote en plus apres 22 et apres 24.
    qui correspondent aux lignes suivantes .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql.= " and profil.datenaiss >  '".$_GET['age_min']."' '";
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql.= " and profil.datenaiss  < '".$_GET['age_max']."' '";
    A+

Discussions similaires

  1. [MySQL] FORMULAIRE PHP et SQL
    Par SNY77 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 10/05/2012, 12h13
  2. Réponses: 2
    Dernier message: 24/01/2009, 22h38
  3. [SQL] UPDATE via formulaire PHP
    Par eizenhower dans le forum PHP & Base de données
    Réponses: 13
    Dernier message: 27/07/2007, 11h25
  4. Script pour protéger les formulaires PHP de l'injection SQL
    Par thebay dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 15/05/2007, 16h23
  5. [SQL] formulaire php/sql (liste déroulante) petit soucis
    Par koolgirl dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 13/03/2007, 21h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo