upload d'une image

pat
Eléphant du PHP | 132 Messages

02 oct. 2007, 14:16

Bonjour,

J' ai fait un formulaire qui doit charger une image et quelques donnés.
Mon problème est que je souhaite insérer les données dans la table même si l'utilisateur ne met pas de photo. Par contre je ne veux pas insérer les données si l'image chargée ne correspond pas à mes critères.
J'ai essayé de résoudre le problème avec
if(isset($_FILES["monfichier"]["name"] ))
mais ça ne marche pas.
Que le champs monfichier soit vide ou pas il exécute toujours la suite.
$editFormAction = $HTTP_SERVER_VARS['PHP_SELF'];
if (isset($HTTP_SERVER_VARS['QUERY_STRING'])) {
  $editFormAction .= "?" . $HTTP_SERVER_VARS['QUERY_STRING'];
}

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form5"))
{

    $content_dir = '../image/image-article/'; // dossier où sera déplacé le fichier

    $tmp_file = $_FILES['monfichier']['tmp_name'];
	
if(isset($_FILES["monfichier"]["name"] ))
        {
    if( !is_uploaded_file($tmp_file) )
    {
		
		echo $_FILES['monfichier']['type'];
		exit("Le fichier est introuvable");
		
    }

    // on vérifie maintenant l'extension
    $type_file = $_FILES['monfichier']['type'];

    if( !strstr($type_file, 'jpg') && !strstr($type_file, 'jpeg') && !strstr($type_file, 'bmp') && !strstr($type_file, 'gif') )
    {
		
        exit("Le fichier n'est pas une image");
    }

    // on copie le fichier dans le dossier de destination
    $name_file = $_FILES['monfichier']['name'];

    if( !move_uploaded_file($tmp_file, $content_dir . $name_file) )
    {
        exit("Impossible de copier le fichier dans $content_dir");
    }

    echo "Le fichier a bien été uploadé";
	}

				   
				   
  $insertSQL = sprintf("INSERT INTO t_article (article, id_fourn, id_marque, id_prod, texte, nouveaute, promotion, photo, textepromo) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s)",
                       GetSQLValueString($_POST['article'], "text"),
                       GetSQLValueString($_POST['id_fourn'], "int"),
                       GetSQLValueString($_POST['id_marque'], "int"),
                       GetSQLValueString($_POST['id_prod'], "int"),
                       GetSQLValueString($_POST['texte'], "text"),
                       GetSQLValueString($_POST['nouveaute'], "text"),
                       GetSQLValueString($_POST['promotion'], "text"),
					   GetSQLValueString($_FILES["monfichier"]["name"], "text"),
                       GetSQLValueString($_POST['textepromo'], "text"));




  mysql_select_db($database_connectgl, $connectgl);
  $Result1 = mysql_query($insertSQL, $connectgl) or die(mysql_error());


}
Modifié en dernier par pat le 02 oct. 2007, 18:19, modifié 1 fois.

Mammouth du PHP | 881 Messages

02 oct. 2007, 15:48

Bonjour,
Que le champs monfichier soit vide ou pas il exécute toujours la suite.
Dans ce cas, traite en le contenu de la variable.
if ($monfichier == "") { procédure pour vide } else { procédure pour non-vide }


Il serait certainement avantageux de vérifier si le champ est complété avant que ne soit soumis le formulaire

Code : Tout sélectionner

<form OnSumit="Verif(this)">
Soyez artisans de paix

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

02 oct. 2007, 16:07

Il serait certainement avantageux de vérifier si le champ est complété avant que ne soit soumis le formulaire

Code : Tout sélectionner

<form OnSumit="Verif(this)">
C'est un peu hors de propos sans voir le formulaire et sans donner plus d'infos sur ta fonction Verif()... s'il est soumit par une action javascript .submit() l'événement ne sera pas déclenché. De plus un contrôle javascript ne dispense pas d'une véritable validation sur le serveur. Dans tous les cas, le champ en question étant optionnel, ça ne changera pas grand chose :)


Quant à savoir si le fichier a été uploadé ou pas, tu peux le tester avec is_uploaded_file(). Par ailleurs utilise $_SERVER plutôt que $HTTP_SERVER_VARS
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

pat
Eléphant du PHP | 132 Messages

02 oct. 2007, 18:17

Merci pour vos renseignements.

J'ai ajouté des condition mais çà ne fonctionne toujours pas.

Si le fournisseur n' a pas uploadé de photo je donne une valeur par default
$_FILES["monfichier"]["name"] = "article-default.gif";
Mais lorsque j'essai il me dit que le champs photo ne peut être null
$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER'QUERY_STRING'])) {
  $editFormAction .= "?" . $_SERVER['QUERY_STRING'];
}

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form5"))
{

    $content_dir = '../image/image-article/'; // dossier où sera déplacé le fichier

    $tmp_file = $_FILES['monfichier']['tmp_name'];
	$monfichier = $_FILES['monfichier']['type'];
	
	
	/* si l'utilisateur a uploadé un fichier, je verifie le fichier */	
	if ($monfichier <> "" )
        {
    if( !is_uploaded_file($tmp_file) )
    {
		
		echo $_FILES['monfichier']['type'];
		exit("Le fichier est introuvable");
		
    }

    // on vérifie maintenant l'extension
    $type_file = $_FILES['monfichier']['type'];

    if( !strstr($type_file, 'jpg') && !strstr($type_file, 'jpeg') && !strstr($type_file, 'bmp') && !strstr($type_file, 'gif') )
    {
		
        exit("Le fichier n'est pas une image");
    }

    // on copie le fichier dans le dossier de destination
    $name_file = $_FILES['monfichier']['name'];

    if( !move_uploaded_file($tmp_file, $content_dir . $name_file) )
    {
        exit("Impossible de copier le fichier dans $content_dir");
    }

    echo "Le fichier a bien été uploadé";
	}
		
		/* si l'utilisateur n'a pas uploadé de photo. $monfichier est nul et je lui donne une valeur par default*/
	if ($monfichier = "" )
        {  
		$_FILES["monfichier"]["name"] = "article-default.gif";		
		}		   
				   
  $insertSQL = sprintf("INSERT INTO t_article (article, id_fourn, id_marque, id_prod, texte, nouveaute, promotion, photo, textepromo) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s)",
                       GetSQLValueString($_POST['article'], "text"),
                       GetSQLValueString($_POST['id_fourn'], "int"),
                       GetSQLValueString($_POST['id_marque'], "int"),
                       GetSQLValueString($_POST['id_prod'], "int"),
                       GetSQLValueString($_POST['texte'], "text"),
                       GetSQLValueString($_POST['nouveaute'], "text"),
                       GetSQLValueString($_POST['promotion'], "text"),
					   GetSQLValueString($_FILES["monfichier"]["name"], "text"),
                       GetSQLValueString($_POST['textepromo'], "text"));




  mysql_select_db($database_connectgl, $connectgl);
  $Result1 = mysql_query($insertSQL, $connectgl) or die(mysql_error());


}
C'est bon j'ai trouvé.
Merci pour vos renseignements

Django
Invité n'ayant pas de compte PHPfrance

08 oct. 2007, 17:19

C'est un array. Donc c'est pour ca que c'est pas nul.

J'ai le meme soucis que toi en ce moment !