pb enregistrement dans 2 tables base mysql

pb enregistrement dans 2 tables base mysql - PHP - Programmation

Marsh Posté le 24-10-2009 à 09:23:34    

Bonjour,
 
Je saisi un formulaire (date, heure, titre, texte) et éventuellement, je veux y uploader un fichier. Le tout dans deux tables ("manifestations" pour le texte, et "upload" pour le fichier). Voici déjà mon script qui met la base à jour (en sachant que "monfichier" correspond au fichier uploadé (optionnel). Le reste, ce sont les champs texte) :
 

Code :
  1. // récupération des variables issues du formulaire
  2. $date = $_POST['date'];
  3. $heure = $_POST['heure'];
  4. $titre = $_POST['titre'];
  5. $message = $_POST['texte'];
  6. $monfichier = $_POST['monfichier'];
  7. $frdate = $date; // conservation date saisie  
  8. ...........
  9. //----------Convertion "date" au format texte-fr---------------
  10. list($year, $month, $day) = explode("-", $dateMySQL);
  11. $months = array("janvier", "février", "mars", "avril", "mai", "juin", "juillet", "août", "septembre", "octobre", "novembre", "décembre" );
  12. $datefr = " $day ".$months[$month-1]." $year ";
  13. // ----------------test upload fichier------------------
  14. if (isset($monfichier))
  15. {
  16. $dossier = './dossier_upload/';
  17. $fichier = basename($_FILES['monfichier']['name']);
  18. $taille_maxi = 2000000;
  19. $taille = filesize($_FILES['monfichier']['tmp_name']);
  20. $extensions = array('.gif', '.jpg', '.jpeg', '.doc', '.png', '.txt', '.TXT', '.PNG', '.GIF', '.JPG', '.JPEG', '.DOC');
  21. $extension = strrchr($_FILES['monfichier']['name'], '.');
  22. //--------------------upload fichier----------------------
  23. if(move_uploaded_file($_FILES['monfichier']['tmp_name'], $dossier . $fichier)) //Si la fonction renvoie TRUE, c'est que ça a fonctionné...
  24. {
  25. // si la variable monfichier existe, j'enregistre tout dans les deux tables
  26. $sql = "INSERT INTO manifestations(heure, jour, date, frdate, datefr, titre, texte) VALUES('$heure', '$jour_sem', '$dateMySQL', '$frdate', '$datefr', '$titre', '$chaine')";
  27. mysql_query($sql) or die('Erreur SQL !'.$sql.mysql_error());
  28. $id=mysql_insert_id();
  29. $req_fich = "INSERT INTO upload(id_liaison, lien_fichier, fichier, extension) VALUES('$id', '$dossier$fichier', '$fichier', '$extension')";
  30. mysql_query($req_fich) or die('Erreur SQL !'.$req_fich.mysql_error());
  31. }
  32. }
  33. else
  34. {
  35. // si la variable monfichier n'existe pas, j'enregistre uniquement l'id=id_liaison dans la table upload
  36. $sql = "INSERT INTO manifestations(heure, jour, date, frdate, datefr, titre, texte) VALUES('$heure', '$jour_sem', '$dateMySQL', '$frdate', '$datefr', '$titre', '$chaine')";
  37. mysql_query($sql) or die('Erreur SQL !'.$sql.mysql_error());
  38. $id=mysql_insert_id();
  39. $req_fich = "INSERT INTO upload(id_liaison) VALUES('$id')";
  40. mysql_query($req_fich) or die('Erreur SQL !'.$req_fich.mysql_error());
  41. }


 
Ainsi, si je saisi un texte + titre sans fichier à uploader : l'enregistrement texte est ok, et l'id dans id_liaison ok également (le reste en NUL), ce qui est normal et correct.
Si je saisi un texte + titre avec fichier à uploader : l'enregistrement texte est ok, mais pour le fichier uploadé, c'est comme si il n'y en avait pas (l'id dans id_liaison ok, le reste en NUL). Normalement, toutes les variables devraient être enregistrées (id_liaison, lien_fichier, fichier, extension).
En fait, j'éxécute toujours le dernier "else" !!!!! Alors, est-ce que mon "if (isset($monfichier))" est bon ? Où est mon erreur ?  :cry:  
 
J'ai enlevé le "if (isset($monfichier))", et le dernier "else", et là, le fichier est bien uploadé. Ce qui prouve que la variable $monfichier existe bien !!!!
 
Pouvez-vous m'aider à débuguer car je ne sais plus quoi faire .....   :??:  
 
Merci

Reply

Marsh Posté le 24-10-2009 à 09:23:34   

Reply

Marsh Posté le 26-10-2009 à 09:13:11    

Bonjour,
 
Je pense que tu devrais revoir tes bases.
 
Affecter des variables POST à des variables temporaires ne sert à rien...
En plus, tu les affectes à ces variables sans tester leurs existences...

Reply

Marsh Posté le 26-10-2009 à 11:34:33    

le $_POST["monfichier"] ca ne marche pas il me semble. c est direct $_FILES
 
=> $_POST["monfichier"] n'existe pas pour moi donc ton test isset est tj faux
 
 
pour tester si tu as sélectionné un fichier ou non :
 
if(empty($_FILES["monfichier"][name])){
}
 
ya surement plus simple
 
fait un print_r($monfichier) et print_r($_FILES["monfichier"]) pour comparer le résultat


Message édité par d@kn1ko le 26-10-2009 à 11:43:56
Reply

Marsh Posté le 27-10-2009 à 14:02:01    

pas tip top tout ca,
 
deja pour la date, pour se compliquer a faire une liste a "la main" du nom des mois,  strftime est la pour toi et date_parse si tu l'importe d'un format particulier (ca marche dans pas mal de cas),  pour ton fichier (les info, extention, MIME)  t'as fileinfo
 
apres pourquoidans ta base tu rajoute une ligne meme si tu n'as pas de fichier ?

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed