UPLOAD fde fichier sur un serveur HTTP en PHP

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 fde fichier sur un serveur HTTP en PHP

par Tima007 » 07 avr. 2008, 17:13

Bonjour c'est encore moi et ce n'est pas un problème de virgule :oops: :oops: comme l'autre fois enfin j'espère . :?
voila je voudrais que à chaque ticket posté avec une pièce jointe cette pièce jointe uploadé prend le nom et un id spécifique $id_fichier_uploaded concatiné avec le nom du fichier uploadé .
et ce pour que le fichier ne s'écrase pas et aussi pour reconnaitre quelle pièce jointe est associée à kel ticket.
<?php
	$id_fichier_uploaded=0;
	if(isset($_POST['upload']))//si formulaire soumis
	{	
			$content_dir='upload/';//dossier où sera déplacer le fichier
			$tmp_file=$_FILES['fichier']['tmp_name'];
		
	if(!is_uploaded_file($tmp_file))
		{
			exit("Le fichier est introuvable");
		}
	//on vérifie maintenant l'extention  du file
	$type_file=$_FILES['fichier']['type'];
	if(!strstr($type_file,'jpg')&& !strstr($type_file,'jpeg')&& !strstr($type_file,'bmp')&& !strstr($type_file,'gif') 
		{
			exit("L'extension n'est pas autorisé");
		}
	//on copie le fichier dans le dossier de destination 
	$name_file=$_FILES['fichier']['name'];
	//vérifier que le nom du fichier uploadé ne comporte pas le caractère null ni, tant qu'à faire, aucun autre caractère de contrôle ou slashe et backslashe
	if( preg_match('#[\x00-\x1F\x7F-\x9F/\\\\]#', $name_file) )
		{
    		exit("Nom de fichier non valide");
		}
	else 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é";
	
	$id_fichier_uploaded++;
	$fichier_uploaded=$name_file.strval($id_fichier_uploaded);
	
	}
	?>
	
	
<?php
	$con=mysql_connect("localhost","root","") or die("erreur de connexion");//connexion à la base de donnée
	mysql_select_db("mypraxys")or die("erreur de selection");// selection de la base de donée
	//include('connection.php');
	$dt=date("Y-m-d H:i");
    $user_num=$_SESSION['id_user'];
	$ticket_name=$_POST['nom_ticket'];
	$ticket_type=$_POST['type_ticket'];
	$Description=$_POST['description_ticket'];
	$sql="Insert into ticket (ticket_name,ticket_type_id,content,ticket_status,user_id,date_post,attachement_type) values ('$ticket_name','$ticket_type','$Description','Open',$user_num,'$dt','$fichier_uploaded')";
	if (!mysql_query($sql,$con))
  		{
  			die('Error: ' . mysql_error());
  		}
	
	
   
   
	mysql_close($con);
	
  

	
?>
<script language="javascript">alert(" Votre ticket est crée ")</script>
est ce la bonne méthode ???? ou y a til une méthode plus pratique et plus efficace pour ce genre de cas.
Cordialement Tima

par guilt92 » 07 avr. 2008, 16:53

Oui j'avais vu votre message mais le message d'erreur que vous citez montre qu'il y a un problème dans l'appel de la fonction, c'est pourquoi je me demandais quelles modifications vous aviez apportées. Pouvez vous poster le code actuel de la ligne 81 ?

par Tima007 » 07 avr. 2008, 16:44

merci encore pour vos explication mais j'ai déja rectifié sauf que j'ai
Posté le: 07 Avr 2008, 15:33 Sujet du message:



Warning: Wrong parameter count for move_uploaded_file() in c:\program files\easyphp1-8\www\fatmamode05-04\confirmation_tcreate.php on line 81
Impossible de copier le fichier dans le dossier de destination

par guilt92 » 07 avr. 2008, 16:07

Tu dois avoir 2 parametres pour la fonction move_uploaded_file(), ni plus ni moins.

Tu as remplacé les deux "," par des "." ?

Normalement ton if devrait ressembler à cela :
if (!move_uploaded_file($tmp_file,$content_dir.$name_file))
$tmp_file étant le paramètre 1, à savoir le fichier à déplacer
$content_dir.$name_file le paramètre 2 : la destination.

par Tima007 » 07 avr. 2008, 15:33

merci pour vous réponses c'est vrai que j'ai confondu la virgule :oops: :oops: avec le point
sauf quand j'ai changé la virgule par le point ca me donne cette erreur

Warning: Wrong parameter count for move_uploaded_file() in c:\program files\easyphp1-8\www\fatmamode05-04\confirmation_tcreate.php on line 81
Impossible de copier le fichier dans le dossier de destination

par Ryle » 07 avr. 2008, 15:19

Modération :
Tima007, afin d'améliorer la lisibilité de ton message,
pense à utiliser les balises [code] ou [php] (selon le langage utilisé).

Elles sont disponibles au-dessus de la zone de saisie de ton message
lorsque tu postes un nouveau message.

Des indications sont disponibles sur la manière de mettre en forme vos messages dans la FAQ



Concernant le problème de syntaxe, c'est bien le "!" qu'il faut mettre à l'intérieur de la parenthèse. Une fois corrigé, tu dois avoir à mon avis un autre problème qui est que la fonction move_uploaded_file() ne prend en paramètre que 2 arguments alors que tu lui en passe 3.

A mon avis tu as confondu la virgule (qui sépare les arguments) avec le point (qui concatène des chaines) :)

par Tima007 » 07 avr. 2008, 15:08

J'ai meme fait comme vous avez dit ca change pas l'erreur
Parse error: parse error, expecting `'('' in c:\program files\easyphp1-8\www\fatmamode05-04\confirmation_tcreate.php on line 81

et c'est la ligne ou se trouve move_uploaded_file()

par guilt92 » 07 avr. 2008, 15:03

Sans avoir lu le code je dirai que ce qui ne va pas c'est
if !(move_uploaded_file($tmp_file,$content_dir,$name_file)) 
auquel je préférerai
if (!move_uploaded_file($tmp_file,$content_dir,$name_file)) 
Le texte du message d'erreur peut souvent aider. Quel est il ?

UPLOAD fde fichier sur un serveur HTTP en PHP

par Tima007 » 07 avr. 2008, 14:47

Bonjour
mon problème est que je veux uploader des pièce joite dans mes posts (etant donées que c'est un module tickets sous forme de forum à chaque ticket on veut uploader une pièce jointes)
voici mon code de Creer ticket.php
							  <form name="formulaire" action="confirmation_tcreate.php" method="post" enctype="multipart/form-data" onSubmit="return(verifForm(formulaire));">
							    <script language="JavaScript">
		<!--
		function MM_jumpMenu(targ,selObj,restore){ //v3.0
		  eval(targ+".location='"+selObj.options[selObj.selectedIndex].value+"'");
		  if (restore) selObj.selectedIndex=0;
		}
		//--></script>
                                <br>
                                <table class="border" align="center" border="0" cellpadding="0" cellspacing="0" width="100%">
                                  <tbody>
                                    <tr>
                                      <td><table border="0" cellpadding="5" cellspacing="1" width="100%">
                                        <tbody>
                                          <tr >
    
        <td colspan="2" bgcolor="#f1f3f5" height="48" align="left" ><b>Expéditeur</b></td>
		</tr>
                                          <tr>
                                            <td bgcolor="#f1f3f5" width="204" height="48" align="right" >Centre d'appel :</td>
                                                    <td class="back" width="585"><?php $con=mysql_connect("localhost","root","") or die("erreur de connexion");//connexion à la base de donnée
	mysql_select_db("mypraxys")or die("erreur de selection");


		$sql="SELECT call_center_name FROM profil_call_center WHERE profil_id=$call_center";
		$exec=mysql_query($sql);
		while($data=mysql_fetch_array($exec))
		$center=$data[0];

	echo $center;
													?></td>
                                                                                                     
                                            </tr>
                                          </tbody>
                                        </table></td>
                                    </tr>
                                  </tbody>
                                </table>
                                    <br>
                                <table class="border" align="center" border="0" cellpadding="0" cellspacing="0" width="100%">
                                  <tbody>
                                    <tr>
                                      <td><table border="0" cellpadding="5" cellspacing="1" width="100%">
                                        <tbody>
                                          
                                          
                                          
                                          </tbody>
                                        </table></td>
                                    </tr>
                                  </tbody>
                                </table>
                                    <br>
                                <table class="border" align="center" border="0" cellpadding="0" cellspacing="0" width="100%">
                                  <tbody>
                                    <tr>
                                      <td><table border="0" cellpadding="5" cellspacing="1" width="100%">
                                        <tbody>
                                          <tr >
    
        <td colspan="2" bgcolor="#f1f3f5" height="48" align="left" ><b>Details ticket</b></td>
		</tr>
                                          <tr>
                                            <td bgcolor="#f1f3f5" align="right" width="27%">Intitul&eacute; du ticket :</td>
                                                    <td width="120" colspan="3" class="back">
											
    <input size="60" name="nom_ticket" value="" type="text" id="nom_ticket" maxlength="20" onsubmit="return(verifForm(formulaire)">    
                                                </td>
                                            </tr>
                                          
                                          <tr>
                                            <td bgcolor="#f1f3f5" align="right" width="27%">Type du ticket  :</td>
                                                    <td width="120" colspan="3" class="back">
<select name ="type_ticket" size=1> <option value ="1" > proposition </option> <option value ="2" > problème </option> <option value ="3" > aide </option> </select>&nbsp;</td>
                                            </tr>
                                          <tr>
                                            <td bgcolor="#f1f3f5" align="right" valign="top" width="27%">Description: </td>
                                                    <td class="back" colspan="3">
				<textarea name="description_ticket" rows="5" cols="60" id="description_ticket"  onsubmit="return(verifForm(formulaire));"></textarea></td>
                                            </tr>
                                          <tr>
                                            <td bgcolor="#f1f3f5" align="right" valign="top" width="27%">Fichier attach&eacute;: </td>
                                                    <td class="back" colspan="3" valign="bottom">
													<input name="MAX_FILE_SIZE" value="1000000" type="hidden">
                                                    <input type="file" name="fichier" size="35">
													<input type="hidden" name="upload" value="Uploader"> 
													 </td>
                                            </tr>
                                          </tbody>
                                        </table></td>
                                    </tr>
                                  </tbody>
                                </table>
                                    <br>
                                <center>
                                  <input name="create" value="Valider" type="submit">
                                  &nbsp;&nbsp;&nbsp;
                                  <input name="reset" value="Rénitialiser" type="reset">
                                  <input name="sg" value="2" type="hidden">
								  
                                </center>
                                </form>
//////////////////////////////////////////////////////////////////
pour le fichier confirmation_tcreate.php voici le code
/////////////////////////////////////////////////////////////////
<?php
	if(isset($_POST['upload']))//si formulaire soumis
	{	
			$content_dir='upload/';//dossier où sera déplacer le fichier
			$tmp_file=$_FILES['fichier']['tmp_name'];
		
	if(!is_uploaded_file($tmp_file))
		{
			exit("Le fichier est introuvable");
		}
	//on vérifie maintenant l'extention  du file
	$type_file=$_FILES['fichier']['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['fichier']['name'];
	if !(move_uploaded_file($tmp_file,$content_dir,$name_file))
		{
			exit("Impossible de copier le fichier dans le dossier de destination");
		}
	echo"Le fichier a bien été uploadé";
	}
	?>
	
<?php
	$con=mysql_connect("localhost","root","") or die("erreur de connexion");//connexion à la base de donnée
	mysql_select_db("mypraxys")or die("erreur de selection");// selection de la base de donée
	//include('connection.php');
	$dt=date("Y-m-d H:i");
    $user_num=$_SESSION['id_user'];
	$ticket_name=$_POST['nom_ticket'];
	$ticket_type=$_POST['type_ticket'];
	$Description=$_POST['description_ticket'];
	$sql="Insert into ticket (ticket_name,ticket_type_id,content,ticket_status,user_id,date_post) values ('$ticket_name','$ticket_type','$Description','Open',$user_num,'$dt')";
	if (!mysql_query($sql,$con))
  		{
  			die('Error: ' . mysql_error());
  		}
	
	
   
   
	mysql_close($con);
	
  

	
?>
/////////////////////////
et ca me donne toujours une erreur au niveau de if !(move_uploaded_file($tmp_file,$content_dir,$name_file))

Pourriez vous me dire qu'est ce qui ne va pas avec mon code ??