Upload dans un dossier précis

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 : Upload dans un dossier précis

par Lorenzo » 19 mars 2006, 06:30

fonctionnement general :

-le navigateur, lors de la validation du formulaire va envoyer le fichier au serveur (surement Apache).

-le serveur va le stocker dans un repertoire temporaire avec un nom qu'il va lui meme choisir pour etre sur qu'il n'existe pas 2 fichiers temporaires avec le meme nom.



ton script :

-tu dois verifier que le fichier a bien été envoyé avec is_uploaded_file()

-et ensuite faire un move_uploaded_file()

regarde la DOC :
http://fr2.php.net/manual/fr/function.i ... d-file.php
http://fr2.php.net/manual/fr/function.m ... d-file.php

par alexdarcy » 19 mars 2006, 06:06

oh la la :oops: :oops: :oops:

ca va etre trop difficile pour mes petites connaissances en php ...

Ce que je n'arrive pas à comprendre entre autre est: comment l'image va t-elle se retrouver dans mon dossier "images" sur le serveur ???

:cry:

par Lorenzo » 19 mars 2006, 05:44

juste ceci :
<input name="NomFichier" type="file" size="16">


----------
"comprendre le systeme" -> comprendre comment fonctionne l'envoit de fichier par POST et le test de cet envoit .... etc


----------
cette ligne n'a rien a voir avec ton probleme, j'aurais du epurer l'exemple avant de te l'envoyer ....
$stRepDest = $stRepPhotos.$tbClient[$_REQUEST['nbIdClient']][2].'/';

j'ai marqué les parties importantes dans le message precedent, c'etait surtout sur ces parties que tu dois porter ton attention et tes recherches, le script que j'ai copié/collé etait surtout la pour que tu ais un exemple, les noms des variables et autres actions ne correspondent pas obligatoirement a ce que tu veux faire.

fait un print_r() sur :
$_FILES ( http://fr2.php.net/manual/fr/features.file-upload.php)
$_REQUEST (logiquement tu peux la zapper mais peux aussi etre utile http://fr2.php.net/manual/fr/reserved.v ... es.request)
et tu verras ce qu'elles contiennent et donc ce que tu dois faire de ces tableaux.

par alexdarcy » 19 mars 2006, 05:35

dis moi là :
$stRepDest = $stRepPhotos.$tbClient[$_REQUEST['nbIdClient']][2].'/';
je dois mettre le nom de ma table, hein ?

:oops:

par alexdarcy » 19 mars 2006, 05:26

dois je mettre ceci :

<input type="file" name="img" value=""><input name="NomFichier" type="file" size="16"> ???

je vais essayer de l'intégrer ..
:wink:

ps comprendre le system cad ?? :oops:

par Lorenzo » 19 mars 2006, 04:57

oui, tu peux :)
tu dois juste comprendre le systeme avant d'attaquer la chose



il y a une pitite bizarerie avec ton formulaire :

Code : Tout sélectionner

<input type="hidden" name="img" value=""> <input name="NomFichier" type="file" size="16">
pourquoi tu mets ceci ?
<input type="hidden" name="img" value="">

par alexdarcy » 19 mars 2006, 04:47

lol
Merci Lorenzo .. mais ton script ci dessus puis je l'intégrer dans le fichier php add.php (post) ci dessous :
<?php 
// On commence par récupérer les champs 
if(isset($_POST['nom']))      $nom=$_POST['nom'];
else      $nom="";

if(isset($_POST['titre']))      $titre=$_POST['titre'];
else      $titre="";

if(isset($_POST['adresse']))      $adresse=$_POST['adresse'];
else      $adresse="";

if(isset($_POST['telephone']))      $telephone=$_POST['telephone'];
else      $telephone="";

if(isset($_POST['fax']))      $fax=$_POST['fax'];
else      $fax="";

if(isset($_POST['mail']))      $mail=$_POST['mail'];
else      $mail="";

if(isset($_POST['agent1']))      $agent1=$_POST['agent1'];
else      $agent1="";

if(isset($_POST['mail1']))      $mail1=$_POST['mail1'];
else      $mail1="";

if(isset($_POST['agent2']))      $agent2=$_POST['agent2'];
else      $agent2="";

if(isset($_POST['mail2']))      $mail2=$_POST['mail2'];
else      $mail2="";

if(isset($_POST['agent3']))      $agent3=$_POST['agent3'];
else      $agent3="";

if(isset($_POST['mail3']))      $mail3=$_POST['mail3'];
else      $mail3="";

if(isset($_POST['img']))      $img=$_POST['img'];
else      $img="";


     
    { 
       // connexion à la base
$db = mysql_connect('localhost', 'agence', 'xxx')  or die('Erreur de connexion '.mysql_error());
// sélection de la base  

    mysql_select_db('agences',$db)  or die('Erreur de selection '.mysql_error()); 
     
    // on écrit la requête sql 
    $sql = "INSERT INTO agences_tbl(ID,nom, titre, adresse, telephone,fax, mail, agent1, mail1, agent2, mail2, agent3, mail3, id_img) VALUES('','$nom','$titre','$adresse','$telephone','$fax','$mail','$agent1','$mail1','$agent2','$mail2','$agent3','$mail3','$img')"; 
     
    // on insère les informations du formulaire dans la table 
    mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error()); 

$path = "logo/";

    // on affiche le résultat pour le visiteur 
    echo '<a href="http://www.castingsurf.com/agences/ad_agents.htm">Vos infos on été ajoutées.</a>';


    mysql_close();  // on ferme la connexion 
    }  
?> 

:wink:

par Lorenzo » 19 mars 2006, 04:26

ahhhhhhhhhhhhhhhhhhhhhhhhh ... j'me disais bien que j'avais pas tout compris :lol:

c'est pas grave, t'inquiete pas, du moment que l'image est bien envoyé, y a pas de problemes pour la deplacer/renommer/....


apres l'envoit, ton code PHP qui fait la verif+deplacement doit ressembler a ceci :
$stFichier = $_FILES['img']['name'];
$stNom = substr($stFichier, 0, strrpos($stFichier, '.'));
$stExt = substr($stFichier, strrpos($stFichier, '.')+1);
$stRepDest = $stRepPhotos.$tbClient[$_REQUEST['nbIdClient']][2].'/';

$stExt = strtolower($stExt);
if( !in_array($stExt, array('jpg', 'jpeg')) ){
	$nbError = 3;
	$stError = "Erreur dans l'extension de l'image, ce n'est pas une image ou le format n'est pas acceptable :<br />".$_FILES['img']['name'];
	break;
}

if( file_exists($stRepDest.$stFichier) ){
	$stNom = $stNom . '1';
	$stFichier = $stNom . '.' . $stExt;
}

if( !is_uploaded_file($_FILES['img']['tmp_name']) ){
	$nbError = 3;
	$stError = "Erreur lors de l'envoie de l'image : <br>".($_FILES['img']['name']).'<br>'.($_FILES['img']['tmp_name']);
	break;
}

if( !move_uploaded_file($_FILES['img']['tmp_name'], $stRepDest.$stFichier) ){
	$nbError = 3;
	$stError = "Erreur lors du déplacement de l'image : <br>".($_FILES['img']['tmp_name']).'<br>'.($stRepDest.$stFichier);
	break;
}

$nbError = 1;
$stError = "Envoie et stockage de l'image réussi";

ne fait pas trop attention a la programmation, c'est un tres vieux script que j'ai fait avant de me servir de la POO :?

parties importantes :
$_FILES
$_REQUEST
is_uploaded_file
move_uploaded_file

par alexdarcy » 19 mars 2006, 04:09

je crois pas avoir compris ton probleme ... il est 3h et je bosse depuis 8h du matin sur une connerie de script.
tu veux envoyer des variables en + de l'image a partir du meme formulaire ?

tu peux tres bien le faire :wink:


ou alors si tu veux modifier le nom de l'image apres le telechargement, tu as une fonction move_uploaded_file qui permet de la deplacer et au passage de la renommer :wink:
Oui mais comment indiquer le dossier de réception de l'image ??
Voici mon formulaire
http://www.castingsurf.com/agences/ad_agents.htm

:oops:

par Lorenzo » 19 mars 2006, 04:07

je crois pas avoir compris ton probleme ... il est 3h et je bosse depuis 8h du matin sur une connerie de script.
tu veux envoyer des variables en + de l'image a partir du meme formulaire ?

tu peux tres bien le faire :wink:


ou alors si tu veux modifier le nom de l'image apres le telechargement, tu as une fonction move_uploaded_file qui permet de la deplacer et au passage de la renommer :wink:

par alexdarcy » 19 mars 2006, 03:55

Ouh la difficile !
J'ai un dossier sur ftp qui se nomme "images" et j'aimerai que les images téléchargées atterissent dans ce dossier et qu'en plus elles aient un ID propre !

L'image téléchargée fait par formulaire est simultanément accompagnée de renseignements, lesquels atterissent dans une table !

Je sais po si je suis clair

Mumm !
:oops:

par Lorenzo » 18 mars 2006, 20:13

non, un formulaire d'envoit de fichiers ressemblerait plutot a ca :
<form method="post" action="popImg.php" name="formulaireImg" enctype="multipart/form-data">
	<div class="adminnote" style="width:650px">
		<div align="left">
			<h5>Choix de l'image à envoyer sur le Serveur :</h5>
			<div align="center">
				<input type="file" name="img" /><br /><br />
				<input type="submit" value="Validation" id="validChoixAction" name="validChoixAction" />
			</div>
		</div>
	</div>
</form>
parties importantes :
enctype="multipart/form-data"
<input type="file"

par alexdarcy » 18 mars 2006, 20:02

voici le code html du formulaire ad.agents.html d'où partent les enregistrements ...
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>Nouvelle page 1</title>
</head>

<body>
<form method="POST" action="add.php">
Nom : <input type="text" name="nom" size="46" value="" maxlength="35"><br>
Titre : <input type="text" name="titre" size="46" value="" maxlength="35"><br>
Adresse : <input type="text" name="adresse" size="100" value="" maxlength="70"><br>
Téléphone : <input type="text" name="telephone" size="46" value="" maxlength="70"><br>
Fax : <input type="text" name="fax" size="46" value="" maxlength="70"><br>
Mail : <input type="text" name="mail" size="70" value="" maxlength="70"><br>
Agent 1 : <input type="text" name="agent1" size="46" value="" maxlength="255"><br>
Mail 1 : <input type="text" name="mail1" size="70" value="" maxlength="255"><br>
Agent 2 : <input type="text" name="agent2" size="46" value="" maxlength="255"><br>
Mail 2 : <input type="text" name="mail2" size="70" value="" maxlength="255"><br>
Agent 3 : <input type="text" name="agent3" size="46" value="" maxlength="255"><br>
Mail 3 : <input type="text" name="mail3" size="70" value="" maxlength="255">
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>
<center>
<input type="hidden" name="img" value=""><input name="NomFichier" type="file" size="16">
<br>
<input type="submit" value="Envoyer" name="envoyer">
</center>
</p>
</form>

</body>

</html>

l'upload est donc bon, non ?

:oops:

Re: Upload dans un dossier précis

par Truc » 18 mars 2006, 19:51

Le problème est, si l'envoi de l'image à l'air de se faire, je ne sais pas ou elle va !!!!
Pas sûr du tout que l'image bouge où que ce soit :wink:
Regarde la FAQ pour l'upload

par Lorenzo » 18 mars 2006, 19:42

il y a rien la dedans pour le deplacement/envoit d'une image :lol:

juste stockage de données dans un BD