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é. Le reste, ce sont les champs texte) :


$date = $_POST['date'];
$heure = $_POST['heure'];
$titre = $_POST['titre'];
$message = $_POST['texte'];
$monfichier = $_POST['monfichier'];

$frdate = $date; // conservation date saisie 
...........

//----------Convertion "date" au format texte-fr---------------
list($year, $month, $day) = explode("-", $dateMySQL); 
$months = array("janvier", "février", "mars", "avril", "mai", "juin", "juillet", "août", "septembre", "octobre", "novembre", "décembre"); 
$datefr = " $day ".$months[$month-1]." $year ";

// ----------------test upload fichier------------------
if (isset($monfichier))
{

$dossier = './dossier_upload/';
$fichier = basename($_FILES['monfichier']['name']);
$taille_maxi = 2000000;
$taille = filesize($_FILES['monfichier']['tmp_name']);
$extensions = array('.gif', '.jpg', '.jpeg', '.doc', '.png', '.txt', '.TXT', '.PNG', '.GIF', '.JPG', '.JPEG', '.DOC');
$extension = strrchr($_FILES['monfichier']['name'], '.'); 

//--------------------upload fichier----------------------

if(move_uploaded_file($_FILES['monfichier']['tmp_name'], $dossier . $fichier)) //Si la fonction renvoie TRUE, c'est que ça a fonctionné...
{
$sql = "INSERT INTO manifestations(heure, jour, date, frdate, datefr, titre, texte) VALUES('$heure', '$jour_sem', '$dateMySQL', '$frdate', '$datefr', '$titre', '$chaine')";
mysql_query($sql) or die('Erreur SQL !'.$sql.mysql_error());
$id=mysql_insert_id(); 
$req_fich = "INSERT INTO upload(id_liaison, lien_fichier, fichier, extension) VALUES('$id', '$dossier$fichier', '$fichier', '$extension')";
mysql_query($req_fich) or die('Erreur SQL !'.$req_fich.mysql_error());
}
}
else
{
$sql = "INSERT INTO manifestations(heure, jour, date, frdate, datefr, titre, texte) VALUES('$heure', '$jour_sem', '$dateMySQL', '$frdate', '$datefr', '$titre', '$chaine')";
mysql_query($sql) or die('Erreur SQL !'.$sql.mysql_error());
$id=mysql_insert_id(); 
$req_fich = "INSERT INTO upload(id_liaison) VALUES('$id')";
mysql_query($req_fich) or die('Erreur SQL !'.$req_fich.mysql_error());
}


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).
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).
En fait, j'éxécute toujours le dernier "else" !!!!! Alors, est-de que mon "if (isset($monfichier))" est bon ?

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
Modifié par t671 (24 Oct 2009 - 15:00)
Salut,

il ne faut pas faire if (isset($monfichier)) puisque cela ne fait que tester l'existence de la variable... qui existe forcément puisque tu l'as initialisée :
$monfichier = $_POST['monfichier']; 

Tu pourrais supprimer cette variable qui ne sert à rien et remplacer par exemple ton test par :
if (!empty($_FILES['monfichier']['tmp_name']))