UPLOAD fde fichier sur un serveur HTTP en PHP

Petit nouveau ! | 8 Messages

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 ??

Mammouth du PHP | 1353 Messages

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 ?
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Petit nouveau ! | 8 Messages

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()

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

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) :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Petit nouveau ! | 8 Messages

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

Mammouth du PHP | 1353 Messages

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.
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Petit nouveau ! | 8 Messages

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

Mammouth du PHP | 1353 Messages

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 ?
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Petit nouveau ! | 8 Messages

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