Page 1 sur 1

Construction BDD et recuperation formulaire

Posté : 24 avr. 2009, 11:02
par Romuald632
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.

Posté : 24 avr. 2009, 11:35
par Ryle
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.

Posté : 24 avr. 2009, 11:53
par Romuald632
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

Posté : 24 avr. 2009, 15:04
par Ryle
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, ...)

Posté : 24 avr. 2009, 15:40
par Romuald632
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ù ?

Posté : 24 avr. 2009, 15:48
par GiorgioLino
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

Posté : 24 avr. 2009, 15:55
par Romuald632
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...

Posté : 24 avr. 2009, 16:18
par GiorgioLino
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.

Posté : 24 avr. 2009, 16:53
par Romuald632
Pour récuperer les pictos je vois pas comment faire, en effet je dois les attribuer à l'établissement qui vient de s'inscrire

Posté : 24 avr. 2009, 17:02
par Ryle
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

Posté : 24 avr. 2009, 17:17
par Romuald632
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.

Posté : 24 avr. 2009, 17:34
par Ryle
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....