Bon, j'ai fait un peu de ménage: je ne sais pas comment tu arrives à lir ton propre code, mais c'est pas un cadeau.
Le premier if/else à sauté : le test sur $_POST['aFile'] ne sert strictement à rien et tu ne peux pas assigner manuellement une valeur à $_FILES.
Voici une proposition de correction, regarde en bas, j'ai ajouté des commentaires, tu devrais t'y retrouver:
<?php
function formatFileName($aFileName, $aMaxLength = 50)
{
$aFileName = strToLower(subStr($aFileName, 0, $aMaxLength));
$aFileName = ereg_replace('[^a-zA-Z0-9,._\+\()\-]', '_', $aFileName);
return $aFileName;
}
$destination_dir = '../consultation/photo/';
$file_max_size = 100000;
$authorized_extensions = array('jpg', 'gif');
if (!is_dir($destination_dir))
{
echo 'Veuillez indiquer un répertoire destination correct !'; die();
}
if (!is_writeable($destination_dir))
{
echo 'Veuillez spécifier des droits en écriture pour le répertoire destination !'; die();
}
if (isSet($_POST['submitFile']))
{
if (isSet($_FILES) && is_array($_FILES))
{
if ($_FILES['aFile']['error'] == UPLOAD_ERR_OK)
{
if ($_FILES['aFile']['size'] <= $file_max_size)
{
$lastPos = strRChr($_FILES['aFile']['name'], ".");
if ($lastPos !== false && in_array(strToLower(subStr($lastPos, 1)), $authorized_extensions))
{
$destination_file = time().formatFileName($_FILES['aFile']['name']);
if (move_uploaded_file($_FILES['aFile']['tmp_name'], $destination_dir.DIRECTORY_SEPARATOR.$destination_file))
{
echo 'Votre annonce nous est bien parvenue et notre service la enregistrée avec votre photo.';
}
else
{
echo 'La photo n\'a pas été envoyée correctement !';
}
}
else
{
echo 'Mauvaise extension !';
}
}
else
{
echo 'Photo trop volumineuse !';
}
}
else
{
switch ($_FILES['aFile']['error'])
{
case UPLOAD_ERR_INI_SIZE:
echo 'La photo envoyée dépasse la valeur spécifiée pour upload_max_filesize dans php.ini.';
break;
case UPLOAD_ERR_FORM_SIZE:
echo 'La photo na pas été envoyée, elle dépasse 100 ko.';
break;
case UPLOAD_ERR_PARTIAL:
echo 'La photo n\'a été que partiellement envoyée.';
break;
default:
echo 'Votre annonce nous est bien parvenue et notre service la enregistrée sans photo.';
}
}
}
else
{
/* Ici, on sait qu'aucun fichier n'a été envoyé, on peut préciser dans le message qu'on utilisera une image par défaut */
echo 'Pas de photo recu';
}
}
$destination_file = (isset($_FILES['aFile']['name'])) ? time().formatFileName($_FILES['aFile']['name']) : "";
$destination_lect = '../photo/';
$db_link = mysql_connect($sql_serveur,$sql_user,$sql_passwd);
if(!$db_link)
{
echo "Connexion impossible à la base de données <b>$sql_bdd</b> sur le serveur <b>$sql_server</b><br>Vérifiez les paramètres du fichier";
exit;
}
/*
* Ici, on détermine la requête d'insertion: soit on a un fichier et on en utilise les informations,
* soit on en a pas et on mettra les valeur du fichier par défaut
*/
$sql = (isset($_FILES['aFile']) && $_FILES['aFile']['name'] != "") ? "INSERT INTO ann VALUES ('','". $destination_lect.$destination_file ."')" : "INSERT INTO ann VALUES ('','". $destination_lect ."nom_fichier_par_defaut.jpg')";
$result=mysql_db_query($sql_bdd,$sql,$db_link) or die(mysql_error());
$id= mysql_insert_id();
print "<br>Lisez bien ce qui suit!";
mysql_close($db_link);
?>
Note :
J'ai utilisé un opérateur ternaire pour définir la requête, si tu ne comprends pas ce système, en voici l'explication: j'ai mis:
$sql = (isset($_FILES['aFile']) && $_FILES['aFile']['name'] != "") ? "INSERT INTO ann VALUES ('','". $destination_lect.$destination_file ."')" : "INSERT INTO ann VALUES ('','". $destination_lect ."nom_fichier_par_defaut.jpg')";
C'est exactement la même chose que:
if(isset($_FILES['aFile']) && $_FILES['aFile']['name'] != "")
{
$sql = "INSERT INTO ann VALUES ('','". $destination_lect.$destination_file ."')";
}
else
{
$sql = "INSERT INTO ann VALUES ('','". $destination_lect ."nom_fichier_par_defaut.jpg')";
}
Mais sur une seule ligne, c'est plus simple. Demandes si tu ne comprends pas un truc.