Pb insertion dans 2 tables

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Pb insertion dans 2 tables

par Romuald632 » 06 nov. 2008, 13:19

Grâce à vous j'ai avancé ! Hé oui...

Pour récupére mes données dans 2 tables voilà ce que j'ai fait et ça marche :
$pays = mysql_query("SELECT DISTINCT pays FROM photo LEFT JOIN pays ON photo.id_pays = pays.id") or die(mysql_error());

while ($affichage = mysql_fetch_array($pays) )     
{    
 echo '<a href="aff_photo_pays.php?pays='.$affichage['pays'].'">'.$affichage['pays'].'</a>';  
}
Maintenant pour afficher mes photos par pays c'est un peu plus compliqué. En effet j'ai une page blanche qui s'affiche, pas de message d'erreur, donc peut-être que la solution n'est pas bien loin :

if(isset($_GET["id_pays"]))
{
$image = mysql_query("SELECT image,titre_image,id_pays FROM photo WHERE id_pays='".$_GET["id_pays"]."'") or die(mysql_error()); //*/WHERE pays=".$_GET["id_pays"]) while ($affichage = mysql_fetch_array($image) )      
{    
    echo '<img src="upload/'.$affichage['image'].'" width="220" height="165">';   
    echo "<br />";   
    echo $affichage['titre_image'];
Si vous trouvez l'erreur
Merci

par AB » 06 nov. 2008, 13:08

Pour les jointures, en cas de besoin, en plus du lien donné par charabia - qui s'adresse plutôt à des personnes déjà expérimentées - tu peux aussi aller voir http://www.siteduzero.com/tutoriel-3-38 ... urces.html qui propose des exemples plus parlants pour les débutants.

Par ailleurs si tu veux que l'on t'aide plus efficacement il faudrait nous donner le schéma de tes tables
Ben, pour commencer...
Nous fournir les modèles de tes tables et le code de ton script d'insertion, non ? ;)
Pour ce faire, le plus rapide est d'utiliser cette méthode http://www.phpfrance.com/forums/voir_sujet-34456.php

par charabia » 06 nov. 2008, 12:51

Mmmhh il ne faut pas faire du copier/coller tout bête sans comprendre. Ils mettent T_XXX parce que leurs tables commencent avec ce préfixe (voir leurs tables ici : http://sqlpro.developpez.com/cours/bddexemple/ modèle physique).

Tu dois donc utiliser PAYS de ton côté.
Le problème c'est que si je ne met que pays, j'ai tous les pays qui s'affichent
D'où la jointure que tu n'as apparemment pas encore fait. Regarde l'exemple 3 et les tables concernées, tu comprendras mieux.

par Romuald632 » 06 nov. 2008, 12:46

Ma table s'apelle pays, mais dans leur exemple il mette T_xxx, donc j'ai rajouté T
Le problème c'est que si je ne met que pays, j'ai tous les pays qui s'affichent

par charabia » 06 nov. 2008, 12:33

Ta table s'appelle PAYS ou T_PAYS ?

par Romuald632 » 06 nov. 2008, 12:15

Bon, Je suis allé voir sur le Forum des Développeurs
J'ai bien lu leurs exemples
Mais à chaque fois que je teste un truc j'ai un message d'erreur : Table 'vol.t_pays' doesn't exist
pourtant j'ai ecrit ça : $pays = mysql_query("SELECT DISTINCT pays FROM T_PAYS") or die(mysql_error());

par charabia » 06 nov. 2008, 11:17

Je débute en php, alors il y a des trucs pas toujours évident.
Faire une jointure (houlala...!!??)
Il doit y avoir du if dans le coup...
Nope, plustôt un coup de SQL ;)

http://sqlpro.developpez.com/cours/sqlaz/jointures

par Romuald632 » 06 nov. 2008, 11:12

Je débute en php, alors il y a des trucs pas toujours évident.
Faire une jointure (houlala...!!??)
Il doit y avoir du if dans le coup...

par zeus » 06 nov. 2008, 11:02

Il faut que tu fasses une jointure entre les tables "Pays" et "Photo" pour récupérer tous les pays associé à au moins une photo ;)

par Romuald632 » 06 nov. 2008, 10:56

Dans un premier temps je ne veux afficher que les pays pour lesquels il y a des photos, donc il faut que j'interroge ma table de "photo". Problème c'est que je n'est que le "12" et le "3" qui s'affichent (pour tester j'ai rajouté nos amis belges) mais pas le nom du pays.
Après j'ai essayé d'interroger la table "pays", là j'ai tout les pays qui s'affichent...

par zeus » 06 nov. 2008, 10:40

Non, il faudra suivre la même logique.

Tu proposes la liste de tes pays, l'utilisateur en sélectionne un, et toi, tu récupère l'id de ce pays, et tu sélectionnes toutes les photos dont l'id_photo correspond à celui récupéré.

par Romuald632 » 06 nov. 2008, 10:36

En fait je m'embête pour des clous pour remplir deux tables !
Maintenant je vais peut-être un peu galérer pour afficher mes images par pays...
Merci

par zeus » 06 nov. 2008, 10:14

Aujourd'hui, avec

Code : Tout sélectionner

<select name="nom_pays"> <option value="France">France</option> </select>
$_POST['nom_pays']
contient le nom du pays

Donc, avec

Code : Tout sélectionner

<select name="pays"> <option value="id_pays">nom_pays</option> </select>
$_POST['pays']
va contenir l'id sélectionné.

Ensuite, il ne faut pas que tu fasses d'insertion dans la table "Pays", mais juste que tu utilises cet id récupéré pour le mettre dans ta table "Photo"

par Romuald632 » 06 nov. 2008, 09:46

Merci pour ton aide !
Comment récupérer l'info saisie et non pas l'insérer ?
D'autre part j'ai cherché plusieurs solutions pour que ça marche, c'est pourquoi j'ai mis le nom pays dans ma able photo, parce qu'au départ j'avais mis "id_pays" : donc pour un photo en France doit s'afficher "12" dans mon cas.

par zeus » 05 nov. 2008, 19:58

Dans ton formulaire, il faut que tu affiches la liste des pays présents dans ta table "Pays", dans la forme suivante :

Code : Tout sélectionner

<option value="id_pays">nom_pays</option>
Ensuite, lorsque tu enregistres les données récupérées, il ne faut pas créer un nouvel enregistrement dans la table "Pays", mais juste insérer l'id_pays récupérer dans ta table "Photo".

edit : je viens de voir que tu stockes le nom du pays dans ta table "Photo", ce qui est une erreur.