Pb insertion dans 2 tables

Eléphant du PHP | 287 Messages

05 nov. 2008, 18:48

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

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

05 nov. 2008, 19:26

Ben, pour commencer...
Nous fournir les modèles de tes tables et le code de ton script d'insertion, non ? ;)

Eléphant du PHP | 287 Messages

05 nov. 2008, 19:43

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...

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

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.
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 287 Messages

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.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

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"
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 287 Messages

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

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

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é.
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 287 Messages

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...

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

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 ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 287 Messages

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...

Avatar du membre
ViPHP
ViPHP | 3008 Messages

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

Eléphant du PHP | 287 Messages

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());

Avatar du membre
ViPHP
ViPHP | 3008 Messages

06 nov. 2008, 12:33

Ta table s'appelle PAYS ou T_PAYS ?

Eléphant du PHP | 287 Messages

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