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 :

Filtrer les données issues d'une base pour les afficher


Sujet :

PHP & Base de données

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur multimédia
    Inscrit en
    Mai 2012
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur multimédia
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2012
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Filtrer les données issues d'une base pour les afficher
    Bonjour ! à tous,
    J'ai créé une base de données qui contient 125,000 noms de famille dont voici les informations*:
    Nom de la base : Patronyme
    Nom de la table : famille
    6 champs (ID, patronyme, date_arrivee, individus_total, hommes, femmes)

    J'ai fait un formulaire dans une page HTML très simple*:
    un input box et un bouton soumettre.

    Dans ma page de traitement (traitement.php) je veux faire ceci*:
    1. Vérifier si le "input box" 'a pas été laisser vide.
    Si est le cas afficher "Vous devez entrer un nom de famille".

    2. Vérifier s'il n'y a pas d'erreur d'orthographe.
    Si est le cas afficher "Aucun résultat".

    3. Quand le nom de famille figure dans la base de données afficher ce qui suit*:
    (un mélange de PHP et HTML)

    Le premier mariage d’un "patronyme" a été célébré en "date_arrivee" entre cette date et 1950, "individus_total" individus, dont "hommes" et "femmes"
    portant ce patronyme se sont mariés.

    Voici mon code de la page traitement.php

    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
    74
    75
    76
    77
    78
    79
    80
    81
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>BMSelect</title>
    <style type="text/css">
     
    body {
    	color: #897F66;
    	background-image: url(images/Interface-Patronyme-02.jpg);
    	background-repeat: no-repeat;
    	background-color:#000000;
    }
    .container {
    	width: 1920px;
    	font: 50px Oleo script;
    }
    .content {
    	width: 965px;
    	padding: 300px 0 0 500px;	
    }
     
     
    </style>
    </head>
     
    <body>
     
     
    <?php
    // connection a la base
    $base = mysql_connect ('localhost', 'root', 'root');
    mysql_select_db ('Patronyme', $base) ;
     
    // lancement de la requete
    	$sql = "SELECT patronyme, date_arrivee, individus_total, hommes, femmes FROM famille WHERE patronyme = '".$_POST['patronyme']."'";
     
    // lancement de la requête (mysql_query) et on impose un message d'erreur si la requête ne se passe pas bien (or die)
    	$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
     
    // recuperation du resultat sous forme d'un tableau
    	$data = mysql_fetch_array($req);
    ?>
    <?php
     
    if (!$data) 
    	echo "aucun resultats";
     
     
    else 
    	while ($req = mysql_fetch_row($data)) 
     
     
    			echo $data['patronyme'];
     
     
    			echo $data['date_arrivee'];
     
     
    			echo $data['individus_total'];
     
     
    			echo $data['hommes'];
     
     
    			echo $data['femmes'];
     
     
     
     
     
    // liberation de l'espace mémoire alloué pour cette interrogation de la base
    	mysql_free_result ($req);
    	mysql_close ();
     
    ?>
     
     
     
    </body>
    </html>
    Merci!

  2. #2
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Salut

    Essai de structurer tes pages comme le code ci-dessous, en séparant au maximum les traitements Php pures et la partie interface/HTML.
    Tu y gagneras énormément, même si ça ne se voit pas de suite au début.

    Exemple :
    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
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    <?php
    // Partie traitements
     
    // connection a la base
    $base = mysql_connect ('localhost', 'root', 'root');
    mysql_select_db ('Patronyme', $base) ;
     
    $patronymes = array();
    $msg = '';
    if (isset($_POST['search_patronyme'], $_POST['patronyme'])) {
        $error = FALSE;
        if (empty($_POST['patronyme'])) {
            $error = TRUE;
            $msg = 'Vous devez entrer un nom de famille';
        }
     
        if ($error == FALSE) {
            // lancement de la requete
            $sql = "SELECT patronyme, date_arrivee, individus_total, hommes, femmes
                FROM famille
                WHERE patronyme = '".mysql_real_escape_string($_POST['patronyme'])."'";
     
            // lancement de la requête (mysql_query) et on impose un message d'erreur si la requête ne se passe pas bien (or die)
            $data_rs = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
            mysql_close();
     
            // Vérifie si c'est une ressource (ou pas FALSE)
            if ($data_rs) {
                // recuperation/stockage des resultats sous forme d'un tableau
                while ($data = mysql_fetch_assoc($data_rs)) {
                    $patronymes[] = $data;
                }
            }
            else {
                $msg = 'Aucun résultat';
            }
        }
    }
    // Partie Inferface / HTML
    ?>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>BMSelect</title>
    <style type="text/css">
    body {
        color: #897F66;
        background-image: url(images/Interface-Patronyme-02.jpg);
        background-repeat: no-repeat;
        background-color:#000000;
    }
    .container {
        width: 1920px;
        font: 50px Oleo script;
    }
    .content {
        width: 965px;
        padding: 300px 0 0 500px;
    }
    </style>
    </head>
    <body>
        <div class="container"><!-- debut container -->
     
            <div><!-- debut recherche -->
                <form action="recherche_patronyme.php" action="post">
                    <fieldset>
                        <legend>Recherche nom de famille</legend>
                        <label for="patronyme">Veuillez saisir un nom de famille :</label>
                        <input id="patronyme" type="patronyme" value="" />
                        <input type="submit" name="search_patronyme" value="Rechercher" />
                    </fieldset>
                </form>
            </div><!-- fin recherche -->
     
            <div><!-- debut resultat patronyme -->
    <?php
    // Si au moins 1 résultat (patronyme)
    if (!empty($patronymes)) {
        foreach ($patronymes as $patro) {
            echo $patro['patronyme'].'<br />';
            echo $patro['date_arrivee'].'<br />';
            echo $patro['individus_total'].'<br />';
            echo $patro['hommes'].'<br />';
            echo $patro['femmes'].'<br />';
        }
    }
    else {
        // Si une erreur
        if (!empty($msg)) {
            echo '<p>'.$msg.'</p>';
        }
        // Par défaut
        echo '<p>Veuillez effectuer une recherche</p>';
    }
    ?>
            </div><!-- fin resultat patronyme -->
     
        </div><!-- fin container -->
     
    </body>
    </html>
    (/!\ code pas du tout testé)


    Mise à part ça, il y a à mon sens un problème dans ton modèle de conception de cette table.
    Normalement ces 3 champs : individus_total, hommes, femmes
    ne doivent pas exister dans cette table, car ce sont des données calculées.
    Donc c'est théoriquement des données redondantes, chose à éviter.
    Pour ce champ individus_total ça l'est encore plus car sont résultat serait la somme des champs "hommes" et "femmes" du même patronyme (nom).

    La raison c'est que ces données peuvent être fausses (bug, mauvaise manip, etc ...), c'est à dire être incohérents par rapport à ce qu'il a réellement dans la Bdd, le nombre de lignes.

    Normalement il faudrait exécuter 2 autres requêtes SQL pour obtenir le nombre total d'hommes et de femmes pour le même patronyme.

    Pour cela il suffit de créer un champ comme "genre" (ou "qualite", ou encore "sexe"), et mettre comme valeur 1 (pour homme) ou 2 (pour femme).
    Ou alors créer un champ de type "enum" avec 2 valeurs possibles : homme - femme.
    En faisant cela cette fois on aura toujours un nombre exacte d'hommes et de femmes.

    Mais ça c'est à toi de voir.


    PS : Prends soin de mettre tes parties de code dans un codeBox comme ci-dessus, ça améliore la lisibilité du post.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  3. #3
    Membre éprouvé Avatar de redoran
    Homme Profil pro
    Développeur-Amateur
    Inscrit en
    Juin 2010
    Messages
    1 346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur-Amateur
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 346
    Points : 1 031
    Points
    1 031
    Par défaut
    Salam ; suite de ce qui a été fait par RunCodePhp que je salu de passage
    En matière de conception faut mettre sexe (M pour masculin et F pour féminin) ensuite lancer une requête d'agrégats sur les deux champs nombre de masculin , nombre de féminin et leurs total ( le tous dans la même requête) .
    date arrivée diffère de date de mariage si j'ai bien compris la notion de mariage de patronyme.
    Vérifier s'il n'y a pas d'erreur d'orthographe.
    Si est le cas afficher "Aucun résultat".
    là si un peut difficile pour contrôlé les nom propre , je crois qu'il faut avoir une table avec tous les noms propres surtout si c'est au canada ( grande migration).!!!
    en ce qui concerne le code css de préférence faut le mettre dans un fichier a part exemple mapage.css et l'inclure dans ta page formulaire.
    aussi pour la connexion a la BDD je t'oriente vers PDO.
    je vois pas ton formulaire dans ton post , RunCodePhp la mis en évidence.

Discussions similaires

  1. Réponses: 4
    Dernier message: 07/06/2012, 18h28
  2. [MySQL] Autocomplétion à partir de données issues d'une base
    Par maxnad dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 01/02/2007, 16h54
  3. [Sécurité] Sécurité portable pour les données utilisées dans une requête
    Par berceker united dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 21/07/2006, 14h48
  4. Réponses: 2
    Dernier message: 07/03/2006, 00h31
  5. Import de données issues d'une base Paradox
    Par fgo dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 02/03/2006, 08h33

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