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 :

Résultats en fonction de critères [Débutant(e)]


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 9
    Par défaut Résultats en fonction de critères
    Bonjour, je suis nouveau sur le forum et espère poster au bon endroit.

    Je réalise actuellement un site permettant aux candidats locataires de trouver un logement. Pour ce faire, le visiteur du site doit sélectionner ses critères dont voici un aperçu :




    J'ai donc réalisé un petit script en php me permettant de chercher dans la base de données les logements pouvant répondre aux critères des utilisateurs. Or mon script ne fonctionne pas. Ce que j'ai réussi à faire par contre c'est afficher les résultats en sélectionnant uniquement le loyer mensuel. Mais je n'arrive pas à trouver de solution pouvant répondre à tous les critères. Voici le script permettant de trouver des logements uniquement avec le critère Loyer :

    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
    <form method="post" action="location.php">
    				<fieldset>
    				<legend><b>Recherche</b></legend>
    				<table>
    				<tr><td><label for="type"><strong>Type</strong></label> :</td> <td>
    						<input type="checkbox" name="chambre_de_service" id="chambre_de_service" /> <label for="chambre_de_service">Chambre de service</label><br />
    						<input type="checkbox" name="chambre_dans_appartement" id="chambre_dans_appartement" /> <label for="chambre_dans_appartement">Chambre dans appartement (*)</label><br />
    						<input type="checkbox" name="studio" id="studio" /> <label for="studio">Studio</label><br />
    						<input type="checkbox" name="f1" id="f1" /> <label for="f1">F1</label>
    						<input type="checkbox" name="f2" id="f2" /> <label for="f2">F2</label>
    						<input type="checkbox" name="f3" id="f3" /> <label for="f3">F3</label>
    						<input type="checkbox" name="f4" id="f4" /> <label for="f4">F4</label>
    						<input type="checkbox" name="f5" id="f5" /> <label for="f5">F5 et +</label>
    					</td></tr>
    					<tr><td></td></tr>
    					<tr><td></td></tr>
    					<tr><td></td></tr>
    				<tr><td><label for="tranche"><strong>Loyer mensuel</strong></label> :</td> <td><select name="tranche">
    						<option value="moins_de_400">Moins de 400€</option>
    						<option value="de_401_a_550">De 401 à 550€</option>
    						<option value="de_551_a_700">De 551 à 700€</option>
    						<option value="de_701_a_850">De 701€ à 850€</option>
    						<option value="de_851_a_1000">De 851€ à 1000€</option>
    						<option value="de_1001_a_1300">De 1001€ à 1300€</option>
    						<option value="de_1301_a_1600">De 1301€ à 1600€</option>
    						<option value="plus_de_1600">Plus de 1600€</option>
    				</select></td></tr>
    					
    					<tr><td></td></tr>
    					<tr><td></td></tr>
    					<tr><td></td></tr>
    					
    					<tr><td><label for="departement"><strong>Département</strong></label> :</td> <td>
    							<input type="checkbox" name="paris" id="paris" /> <label for="paris">Paris (75)</label><br />
    							<input type="checkbox" name="hauts_de_seine" id="hauts_de_seine" /> <label for="hauts_de_seine">Hauts-de-Seine (92)</label><br />
    							<input type="checkbox" name="seine_saint_denis" id="seine_saint_denis" /> <label for="seine_saint_denis">Seine-Saint-Denis (93)</label><br />
    							<input type="checkbox" name="val_de_marne" id="val_de_marne" /> <label for="val_de_marne">Val-de-Marne (94)</label></td>
    							<td><input type="checkbox" name="seine_et_marne" id="seine_et_marne" /> <label for="seine_et_marne">Seine et Marne (77)</label><br />
    							<input type="checkbox" name="yvelines" id="yvelines" /> <label for="yvelines">Yvelines (78)</label><br />
    							<input type="checkbox" name="essonne" id="essonne" /> <label for="essonne">Essonne (91)</label><br />
    							<input type="checkbox" name="val_oise" id="val_oise" /> <label for="val_oise">Val d'Oise (95)</label><br />
    					</td></tr>
    
    						
    				</table>
    				</fieldset>
    				
    				<p align="right">
    					<input type="submit" value="Rechercher"/>
    				</p>
    				
    			</form>
    			
    					<?php
    			mysql_connect("localhost", "root", ""); 
    			mysql_select_db("base"); 
    	
    			$reponse = mysql_query("SELECT * FROM location 	where tranche='".$_POST['tranche']."'") or die(mysql_error()); 
    			
    			while ($donnees = mysql_fetch_array($reponse) )
    			{
    			?>
    					<p>
    						<strong>
    						<p>Liste des résultats</p><br/>
    							<a href="resultat_location.php?id=<?php echo $donnees['id']; ?>">
    							<?php echo $donnees['id']; ?>
    							</a>
    						</strong>
    					</p>		
    	
    		
    		<?php
    		}
    
    		mysql_close();
    		?>
    J'ai rajouté à cette requête SQL juste après
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    where tranche='".$_POST['tranche']."'
    le code suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    and departement='".$_POST['departement']."' and type='".$_POST['type']."'"
    Mais ça ne fonctionne pas, pourriez-vous m'expliquer mon erreur. Merci d'avance

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Bonjour

    Je parierais volontiers qu'il te manque un espace entre where tranche='".$_POST['tranche']." et and departement
    Un bon truc pour débuguer ce genre de problème consiste à faire afficher la requête en même temps que l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $sql = "SELECT * FROM location 	where tranche='".$_POST['tranche']."'"; 
    $reponse = mysql_query($sql) or die('Erreur sur '.$sql.'<br/>'.mysql_error());
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Par défaut
    salut,

    et en quoi cela ne fonctionne pas? message d'erreur? résultat de la requête incorrecte? autre?

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 9
    Par défaut
    Citation Envoyé par Celira Voir le message
    Bonjour

    Je parierais volontiers qu'il te manque un espace entre where tranche='".$_POST['tranche']." et and departement
    Un bon truc pour débuguer ce genre de problème consiste à faire afficher la requête en même temps que l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $sql = "SELECT * FROM location 	where tranche='".$_POST['tranche']."'"; 
    $reponse = mysql_query($sql) or die('Erreur sur '.$sql.'<br/>'.mysql_error());
    J'ai vérifié, rien n'est collé, j'ai testé ce que tu m'as donné ca m'affiche donc exactement le même résultat que ce que j'ai fait précédemment. Merci quand même !

    Citation Envoyé par Cybher Voir le message
    salut,

    et en quoi cela ne fonctionne pas? message d'erreur? résultat de la requête incorrecte? autre?
    Il n'y a aucun message d'erreur, par contre lorsque que j'insère mes critères et que je clique sur rechercher, ça me recharge la page et ne me donne aucun résultat pourtant j'ai fais en sorte de choisir les critères répondant à des logements situés dans la base de données pour avoir au moins 1 résultat. Mais vu que je suis débutant en la matière, je me demande déjà si c'est la bonne méthode ...

  5. #5
    Membre émérite Avatar de cadoudal56
    Profil pro
    Inscrit en
    Février 2005
    Messages
    694
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2005
    Messages : 694
    Par défaut
    Hello,

    Ton probleme est plus compliqué que cela. A mon humble avis tu poses mal le probleme et a l'arrivée, la réponse est a coté...

    Conseils de debug :

    Quand tu veux afficher une variable et arréter ton script, tu écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    echo $mavariable;
    exit;
    Quand tu veux afficher un tableau et arréter ton script tu écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    print_f($montableau);
    exit;
    1°) Le type de bien

    Tes cases à cocher ont toutes un nom différent. Si tu ecris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo $_POST['type'];
    Tu n'auras rien car il n'existe aucune variable du nom de 'type' dans ton formulaire. Voici ce que tu dois écrire (pour avoir des cases a cocher multiple) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <input name="type[]" value="f1" id="f1" type="checkbox">F1
    <input name="type[]" value="f1" id="f2" type="checkbox">F2
    <input name="type[]" value="f1" id="f3" type="checkbox">F3
    <input name="type[]" value="f1" id="f4" type="checkbox">F4
    Toutefois, j'attire ton attention sur le fait qu'avec $_POST['type'] tu va récupérer un tableau (array) et non pas une variable...

    2°) Les tranches

    Si a l'éxécution de ton script tu fais un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    echo $_POST['tranche'];
    exit;
    Tu va récupérer quelque chose comme :
    de_401_a_550

    Encore une fois ce n'est pas la bonne façon de faire car dans ta base de données cela m'ettonnerait que c'est ce que tu as mis dans la case tranche (mais je me trompe peut-etre).
    Toujours à mon humble avis tu aurais du faire quelque chose de ce style dans le formulaire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <option value="401_550">De 401 à 550€</option>
    <option value="551_700">De 551 à 700€</option>
    <option value="701_850">De 701€ à 850€</option>
    <option value="851_1000">De 851€ à 1000€</option>
    Ensuite tu récupères la variable "tranche" pour l'exploiter (car dedans tu a un minimum et un maximum). Cela donnerais quelquechose comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    list($min, $max) = split('_', $_POST['tranche']);
    Je suppose que tu dois stocker le prix exact dans ta base, et je vais supposer que la colonne s'appelle "Price". Avec mon $min et mon $max, je vais pouvoir faire une comparaison de ce style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $SQL .= "AND price < ".$max." AND price > ".$min;
    3°) Département

    C'est la même chose que pour le 1°. Donc je te laisse les explications et je vais aller au fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <input name="departement[]" value="75" id="dpt75" type="checkbox">75
    <input name="departement[]" value="78" id="dpt78" type="checkbox">78
    <input name="departement[]" value="92" id="dpt92" type="checkbox">92
    <input name="departement[]" value="93" id="dpt93" type="checkbox">93
    4°) La requete

    Voici ce que je ferais à ta place....
    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
     
     
    $WHERES = "";
     
    // Si j'ai une tranche
    if ($_POST['tranche']) {
    //on coupe la variable en deux
    list($min, $max) = split('_', $_POST['tranche']);
    //on rempli $WHERES
    $WHERES .= "price < ".$max." AND price > ".$min;
    }
     
    //Si j'ai un ou plusieurs type de biens
    if ($_POST['type']) {
    //On initialise sqltype
    $sqltype="";
     
        //Pour tous les types de biens recus
        foreach ($_POST['type'] as $type) {
           if ($sqltype) {$sqltype .= ' OR ';} 
           $sqltype .= 'type = '.$type;
        }
     
        //Si il y a quelque chose dans $WHERES je met un AND pour séparer la condition
        if ($WHERES) {$WHERES .= ' AND ';}
        $WHERES .= '('.$sqltype.')';  
     
    }
     
    //Si j'ai un ou plusieurs département
    if ($_POST['departement']) {
    //initialisation
    $sqldpt="";
     
        foreach ($_POST['departement'] as $dpt) {
           //si sqldpt n'est pas vide
           if ($sqldpt) {$sqldpt .= ' OR ';} 
           $sqldpt .= 'departement = '.$dpt;
        }
     
        if ($WHERES) {$WHERES .= ' AND ';}
        $WHERES .= '('.$sqldpt.')';  
    }
     
    //si j'ai des conditions
    if ($WHERES) {$WHERE = 'WHERE '.$WHERES;}
     
    //Ma requete
    $sql = "SELECT * FROM location ".$WHERE; 
    $reponse = mysql_query($sql) or die('Erreur sur '.$sql.'<br/>'.mysql_error());
    }
    Voila, donc si tu as compris la plupart de ce que j'ai écris, je te dis bravo.
    Maintenant tu as au moins deux bonnes heures de boulot devant toi :-)
    J'espere ne pas avoir fais trop de coquille dans le code...


    @+
    cadou

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 9
    Par défaut
    Waouu ! La plupart des choses écrites dans les codes je ne les ai jamais vu ! Mais bon merci beaucoup pour ta réponse, je vais passer toute mon après midi de toute façon à essayer de comprendre point par point jusqu'à que je réussisse.

    Par ailleurs, il y a certains points aux quels je n'avais pas pensé comme le prix et la comparaison automatique avec la tranche, parce que dans ma base de données j'avais mis un champ prix dans le quel je mettais mon prix et un autre champs tranche avec les tranches comme sur la page php et je rajoutai manuellement le nom de la tranche, ce qui est pas top top ...

    Enfin en tout cas merci, je vais donc reprendre point par point jusqu'à ce que j'ai tout compris !

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 9
    Par défaut
    Bon même si je n'ai pas tout à fait compris le dernier code, j'ai testé pour voir ce que ça allait donner après avoir effectué les premières modifications.

    A la fin de ton dernier code, tu as écris ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    //Ma requete
    $sql = "SELECT * FROM location ".$WHERE; 
    $reponse = mysql_query($sql) or die('Erreur sur '.$sql.'<br/>'.mysql_error());
    }
    A priori il n'a pas aimé l'accolade donc je l'ai enlevé...

    Après avoir fais des recherches test, voici ce que j'obtiens :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Erreur sur SELECT * FROM location WHERE prix < 701 AND prix > de AND (type = studio OR type = f1 OR type = f2) AND (departement = paris OR departement = hauts_de_seine)
    Unknown column 'de' in 'where clause'
    Vu que je suis débutant, je comprends pas grand chose ...

  8. #8
    Membre émérite Avatar de cadoudal56
    Profil pro
    Inscrit en
    Février 2005
    Messages
    694
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2005
    Messages : 694
    Par défaut
    Hello,

    Ah ben oui, c'est normal...

    Donc après les conseils sur le debuggage (que je te conseille de bien mémoriser), voici le conseil sur les requetes SQL...

    Alors, quand on insère des valeurs numériques, il n'y a pas de précautions particulière à prendre. Ainsi tu peux tout a fait écrire :

    prix < 701 ou prix = 701

    Quand tu insère des valeurs alphanumériques (lettres et/ou chiffres), alors tu dois mettre des guillemets... Comme ceci :

    type = "studio" ou type = "F1"

    Mais bon, ton probleme ne se situe pas là (ce que je viens de te dire c'est ce qui va t'arriver quand tu auras résolu la première erreur...

    Ton erreur est ici :
    WHERE prix < 701 AND prix > de

    L'explication la plus logique serait que tu n'as pas modifié les valeurs des checbox de "tranche". Tu as du laisser ce qui était avant, c'est a dire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <option value="de_701_a_850">De 401 à 550€</option>
    Quand le code fait ce que tu lui dis, c'est a dire "découpe la variable en prenant comme délimiteur le _", avec ta valeur il trouve :

    1 - de
    2 - 701
    3 - a
    4 - 850

    Or le bout de code que je t'ai donné lui dis de prendre que les deux premiers. Ce qui fait qu'en max il trouve : 701 et en min il trouve : de

    Si tu te rappelles bien, les cases de tranche devait avoir des valeurs sous cette forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <option value="401_550">De 401 à 550€</option>
    Autre remarque... Il faut que tu modifie ta manière de gérer les départements, si tu veux etre un tant soit peu éfficace. Tu ne dois pas noter le département en toutes lettres comme tu le fais, mais insérer son numéro. D'ailleurs dans ce que je t'avais donné, c'est un numéro de département qui est renvoyé en valeur et pas son nom :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <input name="departement[]" value="75" id="dpt75" type="checkbox">75
    Dans ta table tu devrais avoir 75 et pas "Paris".

    Je ne sais pas comment sont faites ta/tes tables, mais tu devrais avoir une table "département" et une table "biens". Et tu fais une jointure entre les deux.
    Je sais la jointure en SQL cela a l'air compliqué, mais c'est en réalité super simple et diablement éfficace.

    Regarde sur ce site, il y a des cours sur le langage SQL. Si tu as besoin d'un coup de main pour structurer ta base de données, n'hésite pas à le dire...

    Pour en revenir à ton problème, voici ce à quoi devrait ressembler ta requète (et tu n'en est pas très loin alors courage) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT * FROM location WHERE prix < 701 AND prix > 850 AND (type = "studio" OR type = "f1" OR type = "f2") AND (departement = 75 OR departement = 92)
    Ce qui implique de modifier un des bouts de codes que je t'ai donné...
    Cette modification va permettre d'ajouter les guillemets pour la recherche alphanumérique sur le type de biens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    //Pour tous les types de biens recus
        foreach ($_POST['type'] as $type) {
           if ($sqltype) {$sqltype .= ' OR ';} 
           $sqltype .= 'type = "'.$type.'"';
        }
    Copie et colle cette modif et normalement, le type de bien devrait etre entre guillemets dans ta recherche SQL.




    @+
    Cadou

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 9
    Par défaut
    Salut
    Ok ! Donc je viens de comprendre que le séparateur _ est pris en compte pour les montants, ce que je n'avais pas compris avant. J'ai donc effectué ces modifications. J'ai aussi fait les modifications pour les départements et le bout de code a été remplacé. Cependant quand j'effectue une recherche je n'obtiens aucun résultat, la page se recharge et le formulaire redevient vierge. Mais je n'ai aucun message d'erreur

    J'ai crée une seule table dans ma base de données comportant 10 champs :
    -id (donc l'identifiant unique)
    -type (studio, f1 etc...)
    -prix (loyer)
    -departement
    -ville
    -code_postal
    -surface
    -descriptif_bien
    -descriptif_residence
    -tranche (tranche comme sur la page, mais je sais pas si c'est utile vu que le code repère le min et le max tout seul)

    Je ne sais pas si c'est la bonne méthode. En fait je pense qu'il faut que je revois tout ça. Il faut aussi que je revois le code qui afficherait une phrase du type : "Rien n'a été trouvé en fonction de vos critères" si le résultat est nul.

    Je viens de faire un MCD, je sais pas si il est correct, pourrais-tu me donner ton avis, merci :



    Mes questions :
    - Les types de données sont-ils bien choisis ?
    - Les cardinalités sont-elles bonnes ?
    - N'y a-t-il pas de table en trop ?

    Voici toutes mes contraintes :

    - Dans un premier temps lors de la recherche de l'utilisateur, pouvoir lui sortir des résultats même s'il ne donne qu'un seul critère de recherche. Ou 2 ou les 3.

    - Pouvoir lui dire que sa recherche n'a retourné aucun résultat si le résultat est nul. (mais bon là c'est un problème de programmation je pense et pas de conception de bdd)

    - Lorsqu'il cliquera sur l'annonce choisie, il pourra visualiser le descriptif du bien puis le descriptif de la résidence, les coordonnées du propriétaire (pour prendre contact avec lui) et enfin la gare la plus proche (avec un descriptif de la gare : exemple : Gare de Pierrefitte - Stains = gare située sur la ligne D du RER permettant de rejoindre la Gare du Nord en 10 minutes (enfin je sais pas exactement mais c'est ça l'esprit)).

    - Par la suite j'aurai à réaliser une page "admin" d'où on pourra rajouter une nouvelle annonce, il faudra que je puisse sélectionner déjà un propriétaire existant ou bien en rajouter un, pareil pour la gare soit en sélectionner une déjà enregistrée dans la base soit en rajouter une. Pour la ville, si elle n'existe pas, pouvoir la rajouter et sélectionner le département où elle se trouve, sinon si elle existe déjà pouvoir sélectionner le département automatiquement.

    Voilà, je pense n'avoir oublié aucune contrainte et merci beaucoup pour ton aide !

  10. #10
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Par défaut
    salut,

    une petite remarque : pour ce qui est du code postal et du numéro de téléphone, utilises plutôt des varchar en remplacement des integer
    (tu rentres 06 dans un int, cela va t'enregistrer 6 dans la base par exemple. de plus comment vas tu gérer ceux qui rentrent le numéro de cette façon +33 ...)

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 9
    Par défaut
    Citation Envoyé par Cybher Voir le message
    salut,

    une petite remarque : pour ce qui est du code postal et du numéro de téléphone, utilises plutôt des varchar en remplacement des integer
    (tu rentres 06 dans un int, cela va t'enregistrer 6 dans la base par exemple. de plus comment vas tu gérer ceux qui rentrent le numéro de cette façon +33 ...)
    Ok merci pour cette remarque, modifications effectuées. Mais j'ai pas compris, tu me dis en remplacement des "integer", il n'y en a aucun (à moins que int soit la même chose que integer, je ne sais pas...jsuis pas fort !)

  12. #12
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Par défaut
    oui int est la version courte de integer

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 9
    Par défaut
    Citation Envoyé par Cybher Voir le message
    oui int est la version courte de integer
    D'accord merci

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 9
    Par défaut
    A oui, j'oubliai une contrainte importante aussi, dans la future page "admin" pouvoir sélectionner le type de bien et ne pas avoir à le taper ! voilà ! encore merci

  15. #15
    Membre émérite Avatar de cadoudal56
    Profil pro
    Inscrit en
    Février 2005
    Messages
    694
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2005
    Messages : 694
    Par défaut
    Hello,

    C'est a dire que je vois pleins de problemes dans ton modele....

    On va se faire les tables une a une ce sera plus simple :

    Pour proprietaires, pas de probleme...

    Pour Gare, tu peux lui rajouter une relation sur la ville pour mieux la situer. Cela ne mange pas de pain, et cela permettra de dire "Il y a une gare dans cette ville".

    Pour la table Ville

    Pour commencer, l'identifiant du bien n'a rien a faire là. Donc retire le.
    Si tu a 5 biens a Paris, tu te retrouve avec cinq lignes Paris dans ta table. Ce n'est pas logique.
    Ta table Ville devrait avoir ceci :
    ID INT(11)
    Nom Varchar(255)
    Code_postal INT(5)
    ID_Dpt INT(11)

    ID_Dpt est ce qui te servira de jointure avec la table département.

    Pour la table département :

    Pour commencer, tu retire le champ Ville, et tu devrais avoir ceci :

    ID INT(11)
    Dpt TinyInt(2)
    Nom Varchar(255)


    Pour Bien_Location

    Pour commencer, tu peux retirer le champ "Tranche", il ne sert plus a rien...
    En l'état actuel, tu ne peux pas raccrocher ton bien à une ville ni à un département. Le champ Adresse ne peut pas te servir à cela.
    Ce qu'il faut faire c'est rajouter une relation entre la table Bien_location et la table Ville, avec par exemple un champ ID_Ville INT(11).
    Tu gardes bien evidemment ton champ adresse pour noter la rue.

    Pour optimiser l'affaire.....

    Tu retires le champ Type_bien. Tu crée une nouvelle table Type_bien avec comme champ :
    ID INT(11)
    Nom Varchar(255)

    A la place de Type_bien, tu crée un champ ID_Type INT(11) qui te permettra de faire la jointure entre les biens et les types.

    Ensuite, je te conseille de créer un champ adresse2 pour les compléments d'adresse. Un jour viendra ou tu souhaiteras afficher un plan goggle maps et certaines choses te generont dans le champ adresse. Ces choses génantes pourront etre mises dans le champ adresse2. Je penses par exemple a "Batiment B - Escalier 1 - Etage 6", que tu ne pourras pas envoyer à Google maps.

    Ensuite (dans une V2), il te manquera une table pour les photos des biens (cela fais toujours bien les photos de l'appart). Mais c'est une autre histoire.

    Dans un premier temps lors de la recherche de l'utilisateur, pouvoir lui sortir des résultats même s'il ne donne qu'un seul critère de recherche. Ou 2 ou les 3.
    Les solutions que je t'ai donné en tienne compte. Il peut choisir un ou plusieurs types de bien ou un ou plusieurs département.

    - Pouvoir lui dire que sa recherche n'a retourné aucun résultat si le résultat est nul. (mais bon là c'est un problème de programmation je pense et pas de conception de bdd)
    Rappelle toi ce bout de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    //Ma requete
    $sql = "SELECT * FROM location ".$WHERE; 
    $reponse = mysql_query($sql) or die('Erreur sur '.$sql.'<br/>'.mysql_error());
    Remplace le par ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    //Ma requete
    $sql = "SELECT * FROM location ".$WHERE; 
    $reponse = mysql_query($sql) or die('Erreur sur '.$sql.'<br/>'.mysql_error());
     
    if ($reponse) {echo "j'ai ".count($reponse)." réponses";}
    else {echo "Désolé, je n'ai aucun résultats"}
    - Lorsqu'il cliquera sur l'annonce choisie, il pourra visualiser le descriptif du bien puis le descriptif de la résidence, les coordonnées du propriétaire (pour prendre contact avec lui) et enfin la gare la plus proche (avec un descriptif de la gare : exemple : Gare de Pierrefitte - Stains = gare située sur la ligne D du RER permettant de rejoindre la Gare du Nord en 10 minutes (enfin je sais pas exactement mais c'est ça l'esprit)).
    Autre script, autre probleme. La seule chose que je peux te dire, c'est de créer un lien qui passera l'ID du bien au script suivant...


    - Par la suite j'aurai à réaliser une page "admin" d'où on pourra rajouter une nouvelle annonce, il faudra que je puisse sélectionner déjà un propriétaire existant ou bien en rajouter un, pareil pour la gare soit en sélectionner une déjà enregistrée dans la base soit en rajouter une. Pour la ville, si elle n'existe pas, pouvoir la rajouter et sélectionner le département où elle se trouve, sinon si elle existe déjà pouvoir sélectionner le département automatiquement.
    idem, autre script, autre probleme.

    A oui, j'oubliai une contrainte importante aussi, dans la future page "admin" pouvoir sélectionner le type de bien et ne pas avoir à le taper ! voilà ! encore merci
    C'est pour cela qu'une table Type_bien ce serait bien...

    Pour ton probleme de requete qui ne renvoi rien. Voici ce que tu dois faire...

    Affiche la requete avec un echo $sql;
    Tu copie la requete et tu va l'éxecuter soit dans l'outil Mysql, soit dans PHPMyadmin (que j'espere que tu as, parce que c'est quand meme bien pratique !!)

    Si PHPMyadmin renvoi quelque chose, c'est que tu a un probleme dans le traitement des données. Si il ne renvoi rien, le probleme est dans la requete (ou il n'y a effectivement rien dans la table).

    @+
    cadou

  16. #16
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 9
    Par défaut
    Merci pour toute cette aide ! J'ai effectué toutes les modifications dans mon MCD et j'y ai rajouté une table contact qui permettra de recevoir les messages des visiteurs, mais qui n'a aucun lien avec les autres tables.

    Par ailleurs, j'utilise PHPMyAdmin, demain j'y rajouterai toutes ces tables, il faut aussi que je fasse tous les Alter table pour les clés étrangères, mais faut que je revois la méthode avant de rajouter toute donnée dans ces nouvelles tables.

    En tout cas merci encore

Discussions similaires

  1. Requete en fonction de critère "date"
    Par b747fred dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 03/08/2006, 16h32
  2. Réponses: 6
    Dernier message: 20/07/2006, 12h25
  3. affiche résultat en fonction du login windows
    Par bichonjp dans le forum ASP
    Réponses: 4
    Dernier message: 18/08/2005, 17h04
  4. problème avec résultat de recherche multi-critères
    Par audrey_desgres dans le forum Access
    Réponses: 2
    Dernier message: 23/06/2005, 12h00
  5. Ajouter un signe avant résultat en fonction du champ
    Par davyd dans le forum Langage SQL
    Réponses: 10
    Dernier message: 10/03/2005, 12h59

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