Page 1 sur 2

Pb insertion dans 2 tables

Posté : 05 nov. 2008, 18:48
par Romuald632
Bonjour,
Je vous ai déjà demandé de l'aide à ce sujet, mais je cherche aussi de mon côté.
Voilà j'ai un formulaire qui me permet d'enregistrer des photos de plusieurs pays dans ma base.
Je teste avec un seul pays, le France.
Lorsque j'envoie mon fomulaire pas de problème tout part.
Mais dans ma table pays (la France existe déjà avec id_pays=12) mais ça me rajoute automatiquement des id.
Pour info j'ai 248 pays enregistrés et ça vient se mettre à la suite.
En revanche dans ma table photo j'ai le bon nom du pays qui s'affiche !
Comment faire ?
Merci

Posté : 05 nov. 2008, 19:26
par albat
Ben, pour commencer...
Nous fournir les modèles de tes tables et le code de ton script d'insertion, non ? ;)

Posté : 05 nov. 2008, 19:43
par Romuald632
Ca c'est le fromulaire :

Code : Tout sélectionner

<form method="post" enctype="multipart/form-data" action="upload.php"> <table> <tr> <td>Choisissez un Pays :</td> <td><select name="nom_pays"> <option value="France">France</option> </select></td> </tr> <tr> <td>Fichier à transf&eacute;rer :</td> <td><input type="file" name="fichier" size="30"></td> </tr> <tr> <td>Donnez un titre à votre photo :</td> <td><input type="text" name="titre_image" size="40" value="" maxlength="70"></td> </tr> <tr> <td>Critère :</td> <td><select name="critere_photo"> <option value="mer">Mer</option> <option value="ville">Ville</option> <option value="monument">Monuments</option> <option value="montagne">Montagne</option> <option value="nature">Nature</option> </select>
Et ça c'est le fichier upload :
<?php
// On commence par récupérer les champs 
if(isset($_POST['nom_pays']))      $nom_pays=$_POST['nom_pays'];
else      $nom_pays="";

if(isset($_POST['titre_image']))      $titre_image=$_POST['titre_image'];
else      $titre_image="";

if(isset($_POST['email']))      $email=$_POST['email'];
else      $email="";

if(isset($_POST['critere_photo']))      $critere_photo=$_POST['critere_photo'];
else      $critere_photo="";

#Enregistrement de la date et heure
$date  = date("ymd");
$heure = date("His");

#Ajout de la date et l'heure au nom de fichier
$nom= $date."-".$heure;
echo "Référence de votre image : $nom";
echo  '<br />';

if( isset($_POST['upload']) ) // si formulaire soumis
{
    $content_dir = 'upload/'; // dossier où sera déplacé le fichier

    $tmp_file = $_FILES['fichier']['tmp_name'];

// on vérifie maintenant l'extension
    $type_file = $_FILES['fichier']['type'];

    if( !strstr($type_file, 'jpg') && !strstr($type_file, 'jpeg') && !strstr($type_file, 'png') && !strstr($type_file, 'gif') )
    {
        exit("L'extension de votre fichier n'est pas acceptée !");
    }
	
	$nom .= ".".pathinfo($_FILES['fichier']['name'], PATHINFO_EXTENSION);

    // on copie le fichier dans le dossier de destination
    $name_file = $_FILES['fichier']['name'];

    if( !move_uploaded_file($tmp_file, $content_dir . $nom) )
    {
        exit("Impossible de copier le fichier dans $content_dir");
    }
    echo "Votre fichier a été transféré avec succès";
}
 	
$db = mysql_connect('localhost', 'root', '')  or die('Erreur de connexion '.mysql_error());
// sélection de la base  

mysql_select_db('***',$db)  or die('Erreur de selection '.mysql_error()); 

//else 
  //  { 
    $sql = "INSERT INTO pays(id_pays, nom_pays, drapeaux) VALUES('','$nom_pays','')"; 
    mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); 

    // on récupère l'id_site qui vient d'être généré 
    $id_pays = mysql_insert_id();
  
// on écrit la requête sql 
$sql = "INSERT INTO photo (id_photo,nom_pays,image,titre_image,email,critere_photo) VALUES('','$nom_pays','$nom','$titre_image','$email','$critere_photo')"; 
     
// on insère les informations du formulaire dans la table 
mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); 

mysql_close();  // on ferme la connexion 
?>
Voilà,
j'espère que vous pourrez m'aider ça fait deux jours que je cherche une solution...

Posté : 05 nov. 2008, 19:58
par zeus
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.

Posté : 06 nov. 2008, 09:46
par Romuald632
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.

Posté : 06 nov. 2008, 10:14
par zeus
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"

Posté : 06 nov. 2008, 10:36
par Romuald632
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

Posté : 06 nov. 2008, 10:40
par zeus
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é.

Posté : 06 nov. 2008, 10:56
par Romuald632
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...

Posté : 06 nov. 2008, 11:02
par zeus
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 ;)

Posté : 06 nov. 2008, 11:12
par Romuald632
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...

Posté : 06 nov. 2008, 11:17
par charabia
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

Posté : 06 nov. 2008, 12:15
par Romuald632
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());

Posté : 06 nov. 2008, 12:33
par charabia
Ta table s'appelle PAYS ou T_PAYS ?

Posté : 06 nov. 2008, 12:46
par Romuald632
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