Page 1 sur 1

photo automatique dans type="file"?

Posté : 12 oct. 2005, 20:28
par olivia
Bonsoir à vous tous, j'ai installé un formulaire et je n'arrive pas à mettre une photo automatique dans mon sript si l'internaute n'en choisi pas sur son micro.

j'ai essayé cela dans le formulaire
<input type="hidden" name="MAX_FILE_SIZE" value="100000" />
<input type="file" name="aFile" value="photo.jpg"/>

et aussi cela dans le fichier de traitement
if(isset($_POST['aFile']))
{
$FILE = $_POST['aFile'];
}
else
{
$FILE = 'photo.jpg';
}

mais sans aucun résultat. Pourriez vous m'aider?
Merci

Posté : 12 oct. 2005, 20:34
par Cyrano
Tu ne peux pas forcer la valeur de $_FILES: c'est une variable qui va récupérer un chemin vers un fichier sur la machine de l'internaute: or tu ne connais pas l'organisation des répertoires clients. Par conséquent, si l'internaute ne sélection aucun fichier et que tu veux mettre une image par défaut, tu dois la choisir coté serveur d'une part et le faire indépendament de la super-globale $_FILES.

En clair :
if(!isset($_FILES) || $_FILES['nom_input_file']['tmp_name'] == "")
{
    //instruction pour enregistrer un autre fichier déjà présent sur le serveur sans utiliser la variable $_FILES.
}

Posté : 12 oct. 2005, 20:37
par Truc
SAlut, tu veut certainement ajouter un avatar ou quelque chose dans ce genre... pas besoin de mettre de valeur pas défaut a $_FILLE (meme pas possible d'ailleur, je crois) ajoute l'image par défaut dans la requete finale au lieu du nom de l'image dans le champ file

Posté : 12 oct. 2005, 21:40
par Invité
bonsoir cyrano, j'ai bien essayé avec ton code mais cela ne fonctionne toujours pas .

Posté : 12 oct. 2005, 21:47
par Cyrano
Tu as essayé quoi au juste? Si tu n'as pas de fichier uploadé, il faut que tu aies une image par défaut et dans ce cas, le chemin est écrit en dur parce que l'image est déjà sur ton serveur ou alors tu n'enregistres pas de fichier du tout et tu gères ça à l'affichage.

Posté : 12 oct. 2005, 21:54
par Invité
j'ai utilisé dans le formulaire

<input type="hidden" name="defaut" value="photo.jpg"/>

et dans le fichier traitement

if(!isset($_FILES) || $_FILES['defaut']['tmp_name'] == "")
{
echo 'enregistré avec une photo par defaut.';
}

Posté : 12 oct. 2005, 21:57
par Cyrano
Et qu'est-ce qui ne fonctionne pas au juste : sans plus de code ni d'explications que ça, on va pas deviner :-k

Posté : 12 oct. 2005, 22:23
par Invité
ok je reprends à zéro.
j'ai une formulaire avec
<input type="hidden" name="MAX_FILE_SIZE" value="100000" />Inserez une <b>photo</b> si vous le souhaitez <br>
<font size="2">(format reconnu JPEG ou GIF, poid de la photo 100ko maximun)</font> 
<input type="file" name="aFile" />
et d'autres champs,
je l'envoi dans une fichier qui traite et enregistre les info dans ma bdd afin de l'editer par la suite.


if(isset($_POST['aFile'])) 
{ 
    $FILE = $_POST['aFile']; 
} 
else 
{ 
    $FILE = ''; 
}
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&eacute que partiellement envoyée.'; 
break;                             
default: 


echo 'Votre annonce nous est bien parvenue et notre service la enregistrée sans photo.'; } }  
} else { echo 'Pas de photo recu'; } } 


if(isset($_FILES['aFile']['name'])) 
{ 
$destination_file = time().formatFileName($_FILES['aFile']['name']); 
} 
else 
{ 
$destination_file = ""; 
}
$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;}
$result=mysql_db_query($sql_bdd,"INSERT INTO ann VALUES ('','$destination_lect$destination_file')",$db_link) or die(mysql_error());
$id= mysql_insert_id();
print "<br>Lisez bien ce qui suit!";
mysql_close($db_link);

Si j'ai une photo dans upload, pas de probleme tous fonctionne mais si ce n'est pas le cas alors il me faut une photo par defaut et je ne sais pas comment faire.Merci à toi cyrano

Posté : 12 oct. 2005, 22:56
par Truc
essai comme ça:
<?
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&eacute que partiellement envoyée.';
				break;
				default:	
				echo 'Votre annonce nous est bien parvenue et notre service la enregistrée sans photo.'; 
			} 
		}
	} 
	else 
	{ 
		echo 'Pas de photo recu'; 
	} 
}

if(isset($_FILES['aFile']['name']))
{
	$destination_file = time().formatFileName($_FILES['aFile']['name']);
}
else
{
	$destination_file = "photo.jpg";
}
$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;
}
$result=mysql_db_query($sql_bdd,"INSERT INTO ann VALUES ('','$destination_lect$destination_file')",$db_link) or die(mysql_error());
$id= mysql_insert_id();
print "<br>Lisez bien ce qui suit!";
mysql_close($db_link);
enfaite j'ai juste ajouté => $destination_file = "photo.jpg"; dans le dernier test if(isset($_FILES['aFile']['name']))... si la condition n'est pas verifiée donc image par défaut.

Posté : 12 oct. 2005, 23:04
par Cyrano
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&eacute 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.

Posté : 12 oct. 2005, 23:14
par Truc
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.
c'est vrai qu'on voit tout de suite mieux avec un code bien propre :wink:

Posté : 13 oct. 2005, 18:45
par olivia
merci cyrano pour ton aide qui à été trés instructive.

Posté : 13 oct. 2005, 19:05
par Truc
merci cyrano pour ton aide qui à été trés instructive.
Oh, ben voila chacun son tour la dernière fois Cyrano a été oublié et maintenant c'est moi :| (tu m'en lache quelque miettes Cyrano ? :P )

et pourtant je l'avais dit des le début :wink: