Formulaire et upload d'image

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Formulaire et upload d'image

par Moker » 14 juin 2006, 15:41

ralala !!!

ca y est j'ai trouvé une solution a mon probleme et comme d'hab ca se situait au niveau des conditions que j'interpretait mal :(

voici le code qui fonctionne :

img_upload.php
<fieldset>
<legend>Photo</legend>
<?php
// Si aucune photo n'est memorisée dans le formulaire
if(!isset($_POST["photo"])){
	// Si aucune photo n'est uploadée ou une erreur est survenue pendant l'upload
	if(!isset($_FILES["photo"]) || $_FILES["photo"]["error"] != 0){
		// Demande  de la photo
		echo '<input type="file" name="photo" size="30">';
	}else{
		// params
		unset($erreur);
		$extensions_ok = array('png', 'gif', 'jpg', 'jpeg');
		$taille_max = 100000;
		$dest_dossier = $_SERVER["DOCUMENT_ROOT"].'/trombi2/photos/';  // utilisez également des slashes sous windows : $dest_dossier  = 'd:/damien/photos/';
		
		// vérifications
		if( !in_array( substr(strrchr($_FILES['photo']['name'], '.'), 1), $extensions_ok ) ){
			$erreur = 'Veuillez sélectionner un fichier de type png, gif ou jpg !';
		}
		elseif( file_exists($_FILES['photo']['tmp_name']) and filesize($_FILES['photo']['tmp_name']) > $taille_max){
			$erreur = 'Votre fichier doit faire moins de 500Ko !';
		}
		
		// copie du fichier
		if(!isset($erreur)){
			$dest_fichier = basename($_FILES['photo']['name']);
			// copie du fichier
			move_uploaded_file($_FILES['photo']['tmp_name'], $dest_dossier . $dest_fichier);
			// Affiche la photo uploadée
			echo "La photo à bien été envoyée, veuillez valider le formulaire";
			// Memorise le nom de la photo dans le formulaire
			echo "<input type=\"hidden\" name=\"photo\" value=\"$dest_fichier\" />\n";
		}

	}
}else{
	echo "<img src=\"".$_SERVER["DOCUMENT_ROOT"]."/trombi2/photos/".$_POST["photo"]."\" />";
	echo "<input type=\"hidden\" name=\"photo\" value=\"".$_POST["photo"]."\" />\n";
}
?>
</fieldset>
voila le code n'est surement pas trés propre mais ca marche!
milles merci pour votre aide !!!

par Mouet » 14 juin 2006, 14:31

Tu peux toujours enregistrer la photo dans une table et faire passer l'id de la photo en question de formulaire en formulaire à la limite tu peux meme pousser l'affaire en recherchant dans la table les dernières photos ajoutée et la reperer par l'ip de l'utilisateur.

Ca peut p-ê t'aider?

par Moker » 14 juin 2006, 14:28

En fait le formulaire peut etre soumit plusieurs fois avant sa validation, la validation n'est vrai que lorsque tout les champs sont remplis (nom,prenom,photo,...), lorsque le formulaire est soumit mais aucune photo n'est uploadée le champs input d'upload reste affiché.

par contre si la photo est uploadée (champs input d'upload remplit et formulaire soumit) mais que le formulaire n'est pas valide (ex : champs nom pas renseigné) je desire afficher la photo uploadée.

c'est pourquoi je desirait recuperer $_FILES["photo"]["nom"] dans $_POST["photo"] pour afficher la photo tant que le formulaire n'est pas valide et ainsi pouvoir l'inserer dans la base 2 ou 3 soumissions plus tard.

ce n'est pas trés simple à expliquer, je suis dezolé mais j'essai d'etre le plus clair possible :?

merci pour ton aide jpaul

par jpaul » 14 juin 2006, 12:14

Hum il y a longtemps que je n'ai pas fait ça mais il me semble que tu fais une confusion :
si j'ai bien compris,ton fichier img_upload.php contient un champ input que tu veux traiter hors le formulaire est déjà envoyé...

Mais de toutes façons tu dois avoir toutes les billes
le nom d'origine devrait être dans :
$_FILES['photo']['name']
et le nom temporaire dans :
$_FILES['photo']['tmp_name']

De quoi as tu besoin d'autre ?

Formulaire et upload d'image

par Moker » 14 juin 2006, 12:00

Bonjour,

je crée un trombinoscope pour une mairie ou je suis en stage et qui doit permettre a l'admin d'ajouter une personne dans la base de donnée.

Pour ce faire j'utilise un formulaire qui demande differentes infos sur la personne (nom,prenom,poste,hierarchie,...) ainsi que l'upload de sa photo.

j'aimerait une fois la photo uplodée garder le nom de cette derniere pour l'insertion dans la base.

voici la page qui apel les different champs:
add_personne.php
<form action="" method="post" name="personne" enctype="multipart/form-data">
<?php
switch(true){
	
	## Informations Personnelles ##
	default:
	case	empty($_POST["nom"]) ||
			empty($_POST["prenom"]) ||
			(!isset($_POST["idsituation"]) || $_POST["idsituation"] == -1) ||
			// ect ... ect ....
			!isset($_POST["photo"]):

			require_once "fieldset/nom.php";
			require_once "fieldset/prenom.php";
			// apel de la page d'upload
			require_once "fieldset/img_upload.php";
			require_once "fieldset/valider.php";
			break;
}
?>
</form>
un exemple de recuperation de donnée avec le nom:
fieldset/nom.php
<fieldset>
	<legend>Nom</legend>
	<input type="text" name="nom" <?php echo "value=\"".(isset($_POST["nom"])?$_POST["nom"]:NULL)."\""; ?> />
</fieldset>
puis enfin le code d'upload d'image (merci a phpfrance d'ailleur :wink: )
fieldset/img_upload.php
<fieldset>
<legend>Photo</legend>
<input type="file" name="photo" size="30">
<?php
if(isset($erreur)){
	echo '<p>', $erreur ,'</p>';
}
if(isset($_FILES['photo'])){
	// params
	unset($erreur);
	$extensions_ok = array('png', 'gif', 'jpg', 'jpeg');
	$taille_max = 100000;
	$dest_dossier =   // utilisez également des slashes sous windows : $dest_dossier  = 'd:/damien/photos/';
	// vérifications
	if( !in_array( substr(strrchr($_FILES['photo']['name'], '.'), 1), $extensions_ok ) ){
		$erreur = 'Veuillez sélectionner un fichier de type png, gif ou jpg !';
	}
	elseif( file_exists($_FILES['photo']['tmp_name']) and filesize($_FILES['photo']['tmp_name']) > $taille_max){
		$erreur = 'Votre fichier doit faire moins de 500Ko !';
	}
	// copie du fichier
	if(!isset($erreur)){
		$dest_fichier = basename($_FILES['photo']['name']);
		// copie du fichier
		move_uploaded_file($_FILES['photo']['tmp_name'], $dest_dossier . $dest_fichier);
		// Memorise le nom de la photo dans le formulaire
		echo "<input type=\"hidden\" name=\"photo\" value=\"$dest_fichier\" />\n";
	}
}
?>
</fieldset>
echo "<input type=\"hidden\" name=\"photo\" value=\"$dest_fichier\" />\n";
devrait me creer la variable $_POST["photo"] mais cela ne fonctionne pas :(

Pouvez vous m'aider ?