Construction BDD et recuperation formulaire

Eléphant du PHP | 287 Messages

24 avr. 2009, 11:02

Bonjour,
J'aurai besoin de votre aide pour mon site internet en PHP.
Je vous explique mon problème :
Je dois créer une BDD pour des établissements (hôtels, camping...)
Lors de leur inscription sur mon site, ils devront cocher des cases permettant de savoir, s'ils sont ouvert à l'année, s'il y a une piscine... Ce sont des pictogrammes sous forme d'image (environ 100 choix possibles)
Mon problème et de savoir comment créer ma table picto, et surtout comment attribuer les résultats par établissement.
J'essaye de creer un formlaire où je liste les pictos qui sont dans ma base, mais j'ai un probleme avec my sql array ou assoc !!
Merci de votre aide.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

24 avr. 2009, 11:35

C'est une relation n..n : un établissement peut avoir coché de 0 à n picto, et un picto peut être utilisé par 0 ou n établissement. La concrétisation d'une telle relation en base de données, c'est simplement une table intermédiaire comportant pour chaque picto sélectionné l'id de l'établissement et l'id du picto :

Code : Tout sélectionner

Etablissement Lien_Etablissement_Picto Picto ---------------- ------------------------ -------- id_etabliseement id_etabliseement id_picto ... id_picto ...
Un simple select sur cette table te permet de connaitre les pictos d'un établissement dont tu spécifies l'id, ou dans l'autre sens, de connaitre tous les établissements dont qui possède le picto dont tu spécifie l'id.
Une jointure sur les autres tables te permet de les lier facilement.
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 287 Messages

24 avr. 2009, 11:53

Bonjour,
J'ai créé 3 tables :
- etab
- option (pictos)
- liaison

Mon formulaire est comme ceci, mais j'ai un pb avec ùy_sql_assoc
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<form method="post" enctype="multipart/form-data" action="recup_donnee.php">
  <table border="0" align="center" cellpadding="2" cellspacing="2">
    <tr> 
      <td>Nom :</td>
      <td><input type="text" name="nom_etab" size="40" value="" maxlength="70"></td>
    </tr>
    <tr> 
      <td>Texte :</td>
      <td><textarea name="texte_etab" cols="40"></textarea></td>
    </tr>
    <tr>
      <td>Pictos :</td>
      <td>
<?php
$db=mysql_connect('localhost', 'root', '') or die('Erreur de connexion '.mysql_error());
mysql_select_db('test_picto',$db);
$picto = "SELECT id_option, option_nom, option_image FROM option";
$result = mysql_query($picto);
while ($row = mysql_fetch_assoc($result)) {
echo '<input type="checkbox" name="option[]" value="' . $row['id_option'] . '"/>
<img src="picto/' . $row['option_image'] . '">';
}
?>
</td>
    </tr>
    <tr>
      <td>&nbsp;</td>
      <td><input type="submit" name="upload" value="Envoyer"></td>
    </tr>
  </table>
</form>
</body>
</html>
Dans la partie PHP j'affiche les pictos qui sont dans ma base (enfi j'essaye) pcq j'ai tjs ce message d'erreur :
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in D:\Romuald\Travail\wamp\www\test_picto\formulaire.php on line 25

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

24 avr. 2009, 15:04

Bah faut faire confiance à php... s'il te dit qu'il y a une erreur, c'est qu'il y a une erreur. A partir de là, suffit de remonter et voir d'où elle vient :)
mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource
Ca veut dire que la valeur que tu passes en argument de cette fonction n'est pas une ressource mysql valide. Donc qu'en gros, $result contient un truc pas correct. Faut donc regarde ce que contient $result
$result = mysql_query($picto);
Il contient le retour de la fonction mysql_query() qui si tout fonctionne bien renvoi un résultat correct et un FALSE en cas de problème... vu le résultat, on peut supposer qu'il y a un problème et faire appel dès maintenant à mysql_error(). Ca ne nous empêche pas de remonter et de voir s'il n'y a pas un problème dans la requête $picto et/ou dans la connexion :
$picto = "SELECT id_option, option_nom, option_image FROM option"; 
La requête à l'air correcte d'un point de vue structure. A vérifier si la table option existe bel et bien et si les champs sont bien présents (tu peux jouer la requête directement dans MySQL ou phpMyAdmin pour vérifier) ... et puis t'assurer que la connexion à la base est également correcte (nom de la base, serveur, user, ...)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 287 Messages

24 avr. 2009, 15:40

Dans PHPMyAdmin voilà le résultat de la requete :
#1064 - 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 'option' at line 1
Daonc il y a 1 erreur c'est sûr, mais je vois pas où ?

Eléphant du PHP | 60 Messages

24 avr. 2009, 15:48

L'erreur c'est que pour une raison étrange, MySQL n'aime pas que tu appelles ta table 'option'.

Donnes un autre nom à ta table (et n'oublie de le changer dans ta requête) et tu m'en diras des nouvelles).

Bonne chance
"La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information"
Albert Einstein.

Eléphant du PHP | 287 Messages

24 avr. 2009, 15:55

Ma base renommée, mes pictos s'affichent !!
Bien, maintenant je dois récupérer l'enregistrement de ces pictos et les attribuer à l'établissement qui vient de s'inscrire.
D'où la création de la troisième table (appelée : liaison, qui j'espère n'est pa réservée à MySQL)
Pour la première partie du formulaire, c'est bon ça fonctionne, mon établissement s'enregistre dans la table "etab" comme ceci :
<?php 
// On commence par récupérer les champs 
if(isset($_POST['nom_etab']))      $etab=$_POST['nom_etab'];
else      $etab="";

if(isset($_POST['texte_etab']))      $texte=$_POST['texte_etab'];
else      $texte="";
Pour la site c'est plus compliqué pour moi...

Eléphant du PHP | 60 Messages

24 avr. 2009, 16:18

Pour la site c'est plus compliqué pour moi...
Et pourtant il va falloir que tu t'y attèles...


En attendant tu as gagné le droit de cliquer sur le bouton résolu (ta première victoire :)).
EDIT = enfin...je viens de me rendre compte que c'était pas tout à fait fini. Dc patiente encore un peu.

Bonne chance pour la suite.
"La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information"
Albert Einstein.

Eléphant du PHP | 287 Messages

24 avr. 2009, 16:53

Pour récuperer les pictos je vois pas comment faire, en effet je dois les attribuer à l'établissement qui vient de s'inscrire

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

24 avr. 2009, 17:02

Fort heureusement, le forum FAQ est une véritable mine d'or pour qui prend la peine de le parcourir ;)
:arrow: Récupérer la saisie : cases à cocher et select multiple
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 287 Messages

24 avr. 2009, 17:17

Ce forum ne correspond pas à ce que je viens de faire !
Dans son fomulaire il ajoute ligne par ligne les cases à cocher.
Dans mon formulaire, j'appelle tous les pictos en une seule ligne de code, sans mettre la valeur dans le code.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

24 avr. 2009, 17:34

Euh... peu importe comment vous générez le formulaire, qu'il soit dynamique ou en dur (d'autant plus que tu as déjà réussi à gérer cette étape) :)

La partie intéressante pour toi, c'est surtout, comment à partir de ce type de formulaire, il récupère chacune des cases qui ont été cochées... ensuite, pour chaque case/picto, au lieu de les afficher, tu insères dans ta table l'id correspondant et l'id de l'établissement que tu es en train de créer....
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...