EMPTY ou ISSET

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 : EMPTY ou ISSET

par Nad21 » 27 déc. 2008, 16:06

Bonjour
Voilà je recupere le script apres quelques semaines et je regalere sur le code
j'ai du rajouter quelques champs a mon formulaire et là ca bug tout
POur ceux qui n'avaient pas suivi, le but est d'avoir un formulaire du'pload qui modifie texte et photo. J'ia 11 photos a uploader, le probleme vient de quand j'ai déjà une photo dans le champs et que j'envoi le formulair vide ca m'efface ce que j'avais dans ma base
voilà le code de la fonction, je fais juste un test sur la photo E pour l'instant apres je corrigerais les autres

Code : Tout sélectionner

function modifier_rea($id_rea,$id_langue,$domaine_rea, $annee_rea, $titre_rea, $maitreoeuvre_rea, $maitreouvrage_rea, $lieu_rea, $zipcode_rea, $ville_rea, $shon_rea, $budget_rea, $equipe_rea, $photoA_rea, $photoB_rea, $photoC_rea, $photoD_rea, $photoE_rea,$photoF_rea, $photoG_rea, $photoH_rea, $photoI_rea, $photoJ_rea, $photoK_rea, $programme_rea, $livraison_rea, $duree_rea, $descriptif_rea){ //si le champs photo est vide on garde quand meme celle enregistrée dans la base echo "2- $photoE_rea<br>"; if (isset($photoE_rea)) echo '3-fichier photo défini<br>'; if (!empty($photoE_rea)) echo '4-fichier photo défini et non vide<br>'; if (!isset($photoE_rea)) echo '5-fichier photo non défini<br>'; if (empty($photoE_rea)) echo '6-fichier photo non défini et vide<br>'; // pour info il n'y a que le 5 et le 6 qui fonctionne (string)$maj_photo = ""; if( !empty($photoE_rea) ) { $maj_photo = "realisation.photoE='$photoE_rea'"; } $up="UPDATE realisation INNER JOIN realisation_lang ON (realisation.id=realisation_lang.id_rea) SET realisation.domaine='$domaine_rea', realisation.annee='$annee_rea', realisation.titre='$titre_rea', realisation.maitreoeuvre='$maitreoeuvre_rea', realisation.maitreouvrage='$maitreouvrage_rea', realisation.lieu='$lieu_rea', realisation.zipcode='$zipcode_rea', realisation.ville='$ville_rea', realisation.shon='$shon_rea', realisation.budget='$budget_rea', realisation.equipe='$equipe_rea',realisation.photoA='$photoA_rea', realisation.photoB='$photoB_rea', realisation.photoC='$photoC_rea', realisation.photoD='$photoD_rea', $maj_photo , realisation.photoF='$photoF_rea', realisation.photoG='$photoG_rea', realisation.photoI='$photoI_rea', realisation.photoJ='$photoJ_rea', realisation.photoK='$photoK_rea', realisation_lang.programme='$programme_rea', realisation_lang.livraison='$livraison_rea', realisation_lang.duree='$duree_rea', realisation_lang.descriptif='$descriptif_rea' WHERE realisation.id=$id_rea"; echo $up.'<br>'; $resultat=mysql_query($up); if ($resultat){ return true; } else { return false; } }
voilà le resultat sur ma page :
Array ( [name] => [type] => [tmp_name] => [error] => 4 [size] => 0 ) 1-
2-
5-fichier photo non défini
6-fichier photo non défini et vide
UPDATE realisation INNER JOIN realisation_lang ON (realisation.id=realisation_lang.id_rea) SET realisation.domaine='culture', realisation.annee='2006', realisation.titre='test', realisation.maitreoeuvre='test', realisation.maitreouvrage='test', realisation.lieu='test', realisation.zipcode='test', realisation.ville='rien', realisation.shon=' test', realisation.budget='3 645 000', realisation.equipe='sans',realisation.photoA='', realisation.photoB='', realisation.photoC='miniat_migennes1.jpg', realisation.photoD='', , realisation.photoF='', realisation.photoG='', realisation.photoI='', realisation.photoJ='', realisation.photoK='', realisation_lang.programme='sabs', realisation_lang.livraison='aucun', realisation_lang.duree='2 ans', realisation_lang.descriptif='gdfg dfgd fg dgn dsgnd gd$gg dfd g d g df gdf' WHERE realisation.id=12
probleme d'insertion
le photoE n'apparait pas
qqu'lqu'un peut il m'expliquer d'ou veint le probleme?
merci beaucoup

par AB » 05 nov. 2008, 19:22

De rien, t'a plus qu'a cliquer sur résolu maintenant :wink:

[RESOLU]

par Nad21 » 05 nov. 2008, 17:55

Bon alors voilà cesst resolu
c'est donc un melange des 2
j'ai remis
(string)$maj_photo  =  ""; 
if( !empty($nom_fichier) ) 
{ 
   $maj_photo  =  ",photo='$nom_fichier'"; 
} 


$up = "UPDATE info SET ordre='$ordre_info',titre='$titre_info',texte='$texte_info' $maj_photo WHERE id=$id_info"; 
Qui me permet de gérer mon code et c'set isset pour l'upload dans ce cas ca marche
je dois avouer que je ne comprensd tjrs pas pour ca a buggué au niveau de l'isset alor qu'il suffisait de vérifier la variable $nomfichier
....
en tout ca merci a tout le monde
Nadege

par yaug » 05 nov. 2008, 15:20

question bête nad21, mais as tu pensé à mettre le enctype = "multipart/form-data" ?

Il serait utile, je pense, que tu nous copies aussi le formulaire html dont tu te sers.

par AB » 05 nov. 2008, 14:30

Quand ça ne marche pas il faut isoler les blocs pour bien comprendre, et partir de choses simples.
echo '<pre>';
print_r($_FILES);
echo '</pre>';

if (isset($_FILES['photo']['name'])) echo 'fichier photo défini';
if (!empty($_FILES['photo']['name'])) echo '<br>fichier photo défini et non vide';
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Document sans titre</title>
</head>

<body>
<form id = "form_fich" enctype = "multipart/form-data" action = "#" method = "post">
<input type="file" name="photo"  />
<input type="submit" name="envoyer" value="Envoyer" />
</form>
</body>
</html>
Pour comprendre le mécanisme tu peux tester ce code dans une page isolée.
Si tu cliques sur envoyer sans charger de fichier tu obtiendras 'fichier photo défini'
Si tu cliques sur envoyer après avoir charger un fichier tu obtiendras 'fichier photo défini' et 'fichier photo défini et non vide'.
Au passage tu pourras voir le tableau $_FILES correctement structuré.

par Nad21 » 05 nov. 2008, 13:56

non je me disperse pas
j'ai essayé c'est tjours pareil
"il ne s'agit pas d'une extension autorisée"

l'upload se fait alors qu'il n'y a rien dedanset fatalement il y a un message d'erreur
l'update arrive bien apres et le code n'est meme pas lu , ca s'arrete bien avant
je ne pense pas (mais ce n'est que mon avis) que le probleme doit etre resolu a ce niveau mais plutot o niveau du isset $_FILES non??

merci de ton aide
je te cache pas que ca me soule grave

par AB » 05 nov. 2008, 13:45

Tu te disperses... Et qu'as tu fais du dernier conseil de stopher dans ce topic http://www.phpfrance.com/forums/viewtop ... highlight=

par Nad21 » 05 nov. 2008, 12:35

Bonjour
Alors quand je fais
if(isset($nomfichier)) echo '$nomfichier est défini et égale à rien'; else echo '$nomfichiern\'est pas
défini';

dans mon cas ca me mets $nomfichier n'set pas défini

D'ailleurs c'est normal quand je mets print_r $_FILES, j'ai la ligne suivante:
Array ( [name] => [type] => [tmp_name] => [error] => 4 [size] => 0 )

le probleme c'est que dans ma base ca m'ecrase le nom du fichier existant par rien

merci

par AB » 04 nov. 2008, 20:43

alors ma question est la suivante
pourquoi quand photo n'est pas défini il s'arrete pas et va aux lignes suivantes??
Ben si, photo est bien défini mais défini et égale à rien. Dans ton cas tu devrais plutôt utiliser
if (!empty($_FILES['photo']))...

En effet, testes
$a = ''; if(isset($a)) echo '$a est défini et égale à rien'; else echo '$a n\'est pas défini';

par Nad21 » 04 nov. 2008, 19:52

alors ma question est la suivante
pourquoi quand photo n'est pas défini il s'arrete pas et va aux lignes suivantes??

par orgerix » 04 nov. 2008, 19:43

Non.

if(isset($_FILES['photo'])) ca vérifie si la variable est définie.

Si la variable est définie, on entre dans la condition. Sinon, ca s'arrete la.

par Nad21 » 04 nov. 2008, 19:39

moi je veux bien qu'il y ai une solution avec des tests mais je dois avouer que je vois pas ce que je peux faire de plus
le probleme vient de ces quelques lignes le reste du code de la page n'est pas pris en compte
le truc c'est que if (isset($_FILES['photo'])) ca veut bien dire que si il n'y a rien dans mon champs photo on va pas plus loin
c'est bien ca??
alors pourquoi est ce qu'il me lis la fonction et me dit que 'il ne s'agit pas d'une extension autorisé
en principe il devrait pas faire ca, si???

par orgerix » 04 nov. 2008, 19:34

Peut être que le plus simple (pas le plus propre) serait de mettre dans le formulaire un chekbox à cocher si on veut changer l'image. On peut en plus avec javascript cocher automatiquement la case en cas de selection d'un fichier.

Cela dis, il est probable qu'il y ait une solution juste avec des tests.

EMPTY ou ISSET

par Nad21 » 04 nov. 2008, 19:26

Je reviens avec mon probleme car je n'ai toujorus pas trouver de reponse depuis plusieurs heures que je suis dessus et je dois avouer que je ne vois pas bien ou est le probleme.
Mon probleme vient d'un formulaire d'upload pour modifier un enregistrement existant
Je voudrais que le champs type "file" qui me sert a uploader la photo ne soit pas toujours obligatoire a remplir.C'est à dire qu'on peut modifier un enregistrement sans pour autant modifier la photo
or avec mon script si on ne va pas chercher la photo, et que le champs est vide ca m'ecrase l'enregistrement en mettant rien a la place
j'ai donc mis une condition pour uploade avec un if (!empty (£_FILES('photo'] ...mais bon ca ne fonctionne pas , si c'est empty ca m'ecrase en mettant rien, si c'est !isset ca me mets que l'extension n'est pas autorisée
et là je dosi dire que je seche
voici le code
et merci a ceux qui auront l'amabilité de m'aider
bonne soirée
Nadege

print_r($_FILES['photo']);

if(!empty($_FILES['photo']['name'])){

	//extensions acceptées
	$extension_ok = array('doc','xls','pdf');
	$taille_max=500000;
	$dest_dossier= "../img/info/";

	//vérification de l'extension du fichier a uploader
	if (!in_array( substr(strchr($_FILES['photo']['name'],'.'),1), $extension_ok) ){
		$erreur="il ne s'agit pas d'une extension autorisée";
	}
	elseif ($_FILES['photo']['error']==2){
		$erreur = " Le fichier est trop lourde, il doit etre inférieur à 500ko";
	}


	//copie du fichier
	if (!isset($erreur)){
		$dest_fichier = basename($_FILES['photo']['name']);

		//on enleve les accents du nom de fichier
		$dest_fichier = strtr($dest_fichier,
		'àéèùöôüäâëêîï',
		'aeeuoouaaeeii');
		//remplacement des caracteres speciaux
		$dest_fichier = preg_replace('/([^.a-z0-9]+)/i','_',$dest_fichier);


		//copie du fichier dans le dossier de destination
		move_uploaded_file($_FILES['photo']['tmp_name'],$dest_dossier.$dest_fichier);
		//pour faciliter la recup
		$nom_fichier=$dest_fichier;
			}else {
		echo $erreur;
		echo '<br/><a href="info_modif.php">retour</a>';
		exit();
	}
}