Aller au contenu

Creation, insertion, affichage d'une table


Sujets conseillés

Posté

Bonjour,

Apres avoir passe une bonne partie de la nuit anaviguer sur different site d'info, pour creer une base de donne ainsi qu'une table, je vous livre le resultat afin que vous me disiez si je suis bien parti, ou si j'ai tout faux.

Voila ou j'en suis rendu :

Creation d'une table pour handicapcity :

CREATE TABLE lieux_tbl (id INT not null AUTO_INCREMENT, categorie VARCHAR (50) not null , nom VARCHAR (50) not null , adresse VARCHAR (90) not null , ville VARCHAR (90) not null , email VARCHAR (50) null , siteweb VARCHAR (50) null , description VARCHAR (200) not null , marche INT (10) not null , ascenseur VARCHAR (5) not null , porteentree VARCHAR (20) not null , toilette VARCHAR (50) not null , parking VARCHAR (20) not null , PRIMARY KEY (id))

Insertion d'info dans la table :

INSERT INTO lieux_tbl(id,categorie,nom,adresse,ville,email,siteweb,description,marche,ascens

ur,porteentree,toilette,parking)

Selection de certaines infos selon certain critere :

Affichage des lieux si la categorie est "association" et que la ville est "le mans" :

SELECT * FROM lieux_tbl WHERE categorie='association' AND ville="le mans"

Affichage des lieux si la categorie est "banque" et que la ville est "le mans" :

SELECT * FROM lieux_tbl WHERE categorie='banque' AND ville="le mans"

Affichage des lieux si la categorie est "commerce" et que la ville est "le mans"

SELECT * FROM lieux_tbl WHERE categorie='commerce' AND ville="le mans"

Affichage des lieux si la categorie est "cinemas" et que la ville est "le mans"

SELECT * FROM lieux_tbl WHERE categorie='cinemas' AND ville="le mans"

Creation des pages :

<?php

// on se connecte à MySQL

$db = mysql_connect('localhost', 'login', 'password');

// on sélectionne la base

mysql_select_db('nom_de_la_base',$db);

// on crée la requête SQL

$sql = 'SELECT categorie,nom,adresse,ville,email,siteweb,description,marche,ascenseur,porteentr

e,toilette,parking FROM lieu_tbl WHERE ville LIKE 'le mans' ORDER BY nom';

// on envoie la requête

$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());

// on fait une boucle qui va faire un tour pour chaque enregistrement

while($data = mysql_fetch_assoc($req))

{

// on affiche les informations de l'enregistrement en cours

echo '<b>'.$data['nom'].' '.$data['prenom'].'</b> ('.$data['statut'].')';

echo ' <i>date de naissance : '.$data['date'].'</i><br>';

}

// on ferme la connexion à mysql

mysql_close();

?>

A terme, je souhaite a partir de ce formulaire que cela remplisse ma table, et ensuite, afficher les informations, selon le critere de selection, a savoir, sur la page "association" je voudrais que cela affiche les "associations" et ce par ordre alphabetique, idem pour la page des banques etc.

Je vous demande donc de me dire si je suis bien parti ou si au contraire je fais fausse route, dans ce cas, merci de m'aiguiller.

Merci a vous d'aider un pauvre debutant dans ce dedale du langage PHP Mysql.

Posté

Je remarque un truc flagrant:

Tu définis ton champ catégorie à un VARCHAR 50, j'en conclu que tu souhaites y insérer du TEXTE (le nom de la catégorie). Si c'est une liste évolutive, je te conseille d'utiliser une valeur numérique (catégorie 1,2,3,4,5 etc...). Tu associes ensuite chaque valeur à une catégorie explicite par une structure SWITCH par exemple.

Ensuite tu as des cases à cocher, donc une valeur booléenne. Je suis pas expert mysql, mais je crois que celà peut se traduire plus efficacement par un champ ENUM ou un simple TINYINT(1) ou encore un VARCHAR(1).

Enfin les champs accueillant une valeur numérique peuvent être spécifiés UNSIGNED si leur valeur n'est pas négative, un TINYINT par exemple s'étale alors entre 0 et 255.

hum j'espère que j'ai dit trop de bétises...

essaie ça en tout cas, ça fera pas de mal :rolleyes:

ps: je te conseille aussi de centraliser tes commandes mysql_connect et mysql_select_db dans un script externe que tu attaches à tes scripts via un require_once. Tu évites ainsi de multiplier tes connexions.

Posté

Bonjour,

Jai telecharge ce programme "duevera formulaire" mais je ne comprend pas son fonctionnement.

Pour commmint : Comme j'ai dis, je n'ai jamais touche a PHP Mysql, ce que j'ai tente de faire c'est apres avoir lu sur different site en particulier "phpdebutant.org".

il est sur que j'ai fait des betises, pour les categories, comme c'est visible sur mon formulaire de depart, ce sera un menu deroulant, les gens selectionneront la bonne option.

Ensuite, pour les cases a cocher, dans l'exemple de phpdebutant, je n'ai pas vu ce cas de figure, pour moi "boleenne" c'est donc du chinois.

Sinon pour la connexion a la base de donne, quand j'aurais vraiment compris, je ferais une page par exemple "connect.php" dans laquelle je mettrais les infos de connexion a la base de donnee.

Je suis sur que pour une eprsonne qui maitrise php, mon formulaire doit se faire en 10 minutes, moi ca fait + de 24h que je suis dessus.

Ca m'ennuie, car en attendant, je ne peut pas ouvrir le site.

Patrick.

Posté
Je remarque un truc flagrant:

Tu définis ton champ catégorie à un VARCHAR 50, j'en conclu que tu souhaites y insérer du TEXTE (le nom de la catégorie). Si c'est une liste évolutive, je te conseille d'utiliser une valeur numérique (catégorie 1,2,3,4,5 etc...). Tu associes ensuite chaque valeur à une catégorie explicite par une structure SWITCH par exemple.

Un switch ?? Ca va se compliqué mais il faudrait très certainement passer par une seconde table.

Bon reste que visiblement, il faudrait très certainement faire la même chose pour les infos suivantes :

Marches* : Aucune - de 2 cm + de 2 cm

Ascenseur* : Oui Non

Porte d'entrée* : + 80 cm de 70 à 80 cm - de 70 cm

porte manuelle à tirer porte manuelle à pousser porte automatique

Toilettes* : adaptés inaccessibles

Parking* : réservés non réservés

Ensuite tu as des cases à cocher, donc une valeur booléenne. Je suis pas expert mysql, mais je crois que celà peut se traduire plus efficacement par un champ ENUM ou un simple TINYINT(1) ou encore un VARCHAR(1)

Il me semble que le type booleen existe.

Posté

Dites, il y aurait pas quelqu'un qui voudrait me le faire ce formulaire, ainsi que le code pour afficher selon les categories demande ??

Si la personne pourrait me le faire, en commentant au maximum ce qu'il a fait, cela me permettrait de comprendre le systeme, et je pourrais ainsi refaire le meme genre de chose plus tard, sans demander a qq'un.

Merci a la personne qui accepterait de me le faire, je pense que cela ne dit pas prendre un temps excessif, surtout si la personne se debrouille dans ce genre de chose.

Merci d'avance, a celui ou celle qui ferait ma demande.

Patrick.

Si personne n'accepte,e t bien tant pis, je me contenterais d'un simple formulaire HTML et je classerais les fiches par ordre alphabetique, mais je suis que ca me prendrait plus de temps, qu'a l'un de vous pour faire mon petit formulaire.

Posté

Pour info, une "booléenne" c'est une donnée strictement vraie ou fausse, soit 1 soit 0, idéal pour une case à cocher.

Un switch ?? Ca va se compliqué mais il faudrait très certainement passer par une seconde table.

si le nombre de catégories n'est pas très important, un petit script PHP peu correctement établir les correspondance lors de l'insertion dans la table et lors de sa lecture.

Il me semble que le type booleen existe.

hum alors je vois pas sous quel nom SQL il est représenté :huh:

Posté

Salut,

Sous PostGresql il existe un type BOOL... Mais il ne s'agit que d'un raccourci pour désigner un entier non signé codé sur un octet... :)

Posté
Sous PostGresql il existe un type BOOL... Mais il ne s'agit que d'un raccourci pour désigner un entier non signé codé sur un octet... :)

<{POST_SNAPBACK}>

donc l'usage d'un INT(1) est pertinent dans le cas d'une case à cocher :rolleyes:

Posté

Bonjour,

Donc pour finir, personne ne souhaite me faire ce que j'aimerais avoir ??

Je laisse mon MSN au cas ou : lunaboys[at]hotmail.com

Merci encore.

Posté
donc l'usage d'un INT(1) est pertinent dans le cas d'une case à cocher :rolleyes:

<{POST_SNAPBACK}>

Effectivement :

BIT  , BOOL  , BOOLEAN

Ce sont des synonymes de TINYINT(1). Le synonyme BOOLEAN a été ajouté en version 4.1.0

Un type booléen complet, qui sera introduit pour être en accord avec la norme SQL-99.

http://dev.mysql.com/doc/mysql/fr/numeric-type-overview.html

Niveau boulot, je peux pas aider, car je suis un peu surchargé cette semaine.

Posté

Bonjour,

quelques infos, en vrac :

lieux_tbl : Inutile de mettre _tbl, on ne peut confondre la table avec le champ. => "lieux" se suffit à lui même.

id : Là, par contre, il aurait été judicieux de mettre id_lieux, pour ne pas le confondre avec l'"id" catégorie, ou l'"id" membre, etc.. => id_lieux

categorie : il faut séparer le 'categorie', en créer une table distinct, même simpliste. A moins que tu n'ais pas l'intention d'en créer tous les jours, dans ce cas tu peux te limiter à un tableau, le tableau 'categories'. Pour ce champ, donc, soit tu te réfères à la table que tu auras créé, et donc à son index, soit tu te réfères au tableau 'categories', et à son index. On peut donc mettre :

categorie_id qui pointe sur le champ categorie_id de la table categorie, ou du tableau $categorie = array..

Nom : En fait, on arrive très vite à 50 caractères. Il vaut mieux mettre 100 voire même 150, on n'est jamais assez prudent..

Adresse et ville : Idem, mais prévois aussi code_postal, qui pourrait par la suite te permettre de trier les villes en fonction de leur département. Si tu avais idée de mettre le code postal avec 'ville', c'est une mauvaise idée. Par contre, mettre 2 champs pour adresse n'est pas inutile, voire mettre 255 caractères.

siteweb : idem, ajoutes un peu plus de caractères, tu peux aller jusqu'à 150 pour une url.

description : A moins que tu ne limites volontairement le nombre de caractères dans ton interface, sinon tu aurais tout aussi intéret à mettre un autre type de données, style blob ou text.

Pour les autres : marche, etc.. tu peux les regrouper tous dans une même table, voire mettre des tabeaux en place.

le type (int) peut contenir 10 caractères. Tu devrais choisir le type tinyint, qui n'en contient que 3, voire un type varchar sur 1 caractère suffit aussi.

Voilà,

désolé de ne pouvoir t'aider d'avantage, mais continue à poster tes questions, nous serons heureux de te savoir progresser.

ps : Tu devrais aligner ton formulaire sur une ligne verticale, histoire que tes 'champs texte' ne soient pas désordonnés. Utilises les tableaux, ou poses ton problème dans le forum 'html & css'.

Anonymus.

Posté

Bonjour,

Voila ou j'en suis rendu :

La source de mon formulaire :

<form method="post" action="insert.php">
 <p>
   <input type="hidden" name="recipient" value="handicity_AT_yahoo.fr">
   <input type="hidden" name="conform_copy" value="autre adresse e-mail">
   <input type="hidden" name="subject" value="Ajout d'un lieu">
   <input type="hidden" name="priority" value="priorité (High)">
   <input type="hidden" name="supp_names" value="submit">
 </p>
 <p>Votre nom * :
       <input type="text" name="name">
 </p>

 <p> Votre email * :
     <input type="text" name="email">
   </p>
 <p>Type de lieu* :
       <select name="type_lieu">
         <option>Bars
         <option>Banques
         <option>Cinémas
         <option>Cliniques-Hôpital
         <option>Commerces
         <option>Cultes (eglise, mosquée,..)
         <option>Discothèques
         <option>Enseignement (ecole, colleges,...)
         <option>Hôtels - hébergement
         <option>Jardin public
         <option>Musées - Monuments
         <option>Piscines
         <option>Restaurants
         <option>Salles de spectacles
         <option>Sports
   </select>

 </p>
 <p>Nom du lieu* :
       <input name="nom_lieu" type="text" id="textfield3" value="">
 </p>
 <p>Adresse du lieu* :
       <input type="text" name="adresse_lieu">
 </p>
 <p>Code postal* :
       <input name="cp" type="text" id="textfield22" maxlength="6">
 </p>

 <p>Ville* :
       <input type="text" name="ville">
 </p>
 <p>Téléphone :
       <input type="text" name="tel">
 </p>
 <p>Fax :
       <input type="text" name="fax">
 </p>
 <p>Email :
       <input type="text" name="email">
 </p>
 <p>Site
     Web :
       <input type="text" name="site_web">
 </p>
 <p align="center"> </p>

 <p>Description du lieu* :
       <textarea name="description_lieu"></textarea>
 </p>
 <p align="center"> </p>
 <p>Niveau d'accessibilité</p>
 <p>Marches* :
   <input type="radio" name="*marches" value="aucune">
   Aucune
   <input type="radio" name="*marches" value="- de 2 cm">

   - de 2 cm
   <input type="radio" name="*marches" value="+ de 2 cm">
   + de 2 cm </p>
 <p>Ascenseur* :
       <input type="radio" name="*ascenseur" value="Oui">
   Oui
   <input type="radio" name="*ascenseur" value="Non">
   Non</p>

 <p>Porte d'entrée* :
   <input type="radio" name="*largeur de porte" value="+ 80 cm">
   + 80 cm
   <input type="radio" name="*largeur de porte" value="de 70 a 80 cm">
   de 70 à 80 cm
   <input type="radio" name="*largeur de porte" value="- de 70 cm">
   - de 70 cm </p>
 <p><input type="radio" name="*type de porte" value="porte manuelle a tirer">
    porte
   manuelle à tirer
   <input type="radio" name="*type d eporte" value="porte manuelle a pousser">
   porte manuelle à pousser
   <input type="radio" name="*type de porte" value="porte automatique">
   porte automatique</p>
 <p>Toilettes* :
   <input type="radio" name="*type de toilettes" value="toilettes adaptes">
   adaptés
   <input type="radio" name="*type de toilettes" value="toilettes inaccessibles">
   inaccessibles </p>
 Parking* :
   <input type="radio" name="*type de parking" value="parking reserves">
   réservés
   <input type="radio" name="*type de parking" value="parking non reserves">
   non réservés</p>  
   <p><input name="submit" type="submit" value="Envoyer"></p>  
</form>

Le fichier insert.php :

<?php
echo $nom;
echo $prenom;
echo $type_lieu;
echo $nom_lieu;
echo $adresse_lieu;
echo $cp;
echo $ville;
echo $tel;
echo $fax;
echo $email;
echo $site_web;
echo $description_lieu;

?>
<p> Vous avez bien rempli le formulaire. On insère les données dans la table</p>
<?php
$sql = "insert into indentity VALUES (0,'". $nom ."','". $prenom "')";
$sql_result = mysql_query($sql);

/* affichage du résultat de l'insert:*/

if (mysql_errno() > 0) echo "erreur lors de l\'insert";
else echo "Insertion ok";
?>

La page initvar.php :

$nom = ( isset ( $_REQUEST['nom'] ) ) ? $_REQUEST['nom'] : '';
$prenom = ( isset ( $_REQUEST['prenom'] ) ) ? $_REQUEST['prenom'] : '';
$type_lieu = ( isset ( $_REQUEST['type_lieu'] ) ) ? $_REQUEST['type_lieu'] : '';
$nom_lieu = ( isset ( $_REQUEST['nom_lieu'] ) ) ? $_REQUEST['nom_lieu'] : '';
$adresse_lieu = ( isset ( $_REQUEST['adresse_lieu'] ) ) ? $_REQUEST['adresse_lieu'] : '';
$cp = ( isset ( $_REQUEST['cp'] ) ) ? $_REQUEST['cp'] : '';
$ville = ( isset ( $_REQUEST['ville'] ) ) ? $_REQUEST['ville'] : '';
$tel = ( isset ( $_REQUEST['tel'] ) ) ? $_REQUEST['tel'] : '';
$fax = ( isset ( $_REQUEST['fax'] ) ) ? $_REQUEST['fax'] : '';
$email = ( isset ( $_REQUEST['email'] ) ) ? $_REQUEST['email'] : '';
$site_web = ( isset ( $_REQUEST['site_web'] ) ) ? $_REQUEST['site_web'] : '';
$description_lieu = ( isset ( $_REQUEST['description_lieu'] ) ) ? $_REQUEST['description_lieu'] : '';

Voila, sinon, pour ma table, je sais pas quoi faire, faut il en faire plusieurs, par exemple, une table avec les coordonee du lieu, et une avec les critere d'accessibilite, les deux etant relie par un "id_lieu" auto incremente, ou dois je me satisfaire d'une seule table ??

Quoiqu'il en soit, si il faut 2 tables, je ne sais pas comment les "relie" correctement, de plus, je sais toujours pas comment faire pour la liste deroulante et les cases a coche.

Merci de votre aide.

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...