Grouper un $_POST avec une Variable.

Eléphanteau du PHP | 26 Messages

05 avr. 2006, 16:12

Bonjour,

Quelqu'un aurait il déjà fait la modification de ce tut qui changerai le nom des fichiers à envoyer par un nom donné dans un input?

Donc j'envoie des fichiers qui s'appelle photo.jpg, photo2.jpg et photo3.jpg en fonction d'un input qui donne réalisation2 ce qui fait qu'on aurait réalisation2.jpg, réalisation2.pdf, réalisation2.eps.
Ceci évitera qu'on efface des fichiers vu qu'un test est fait pour voir si le nom entré dans l'input existe déjà dans la base de données.

Voici le code d'envoie et d'enregistrement
//Enregistre
		if(isset ($_POST['submit_add'])){
		if(verifform()){
			//add image de base
			if(isset($_FILES['image']))
			{
			  // params
			  unset($erreur);
			  $extensions_ok_image = array('jpg', 'jpeg', 'JPG');
			  $taille_max_image = 200000;
			  $dest_dossier_image = $_SERVER['DOCUMENT_ROOT'].'/etstudio/images/base/';
			  // vérifications
			  if( !in_array( substr(strrchr($_FILES['image']['name'], '.'), 1), $extensions_ok_image ) )
			  {
				$erreur = 'Veuillez sélectionner un fichier de type jpg !';  
			  }
			  elseif( file_exists($_FILES['image']['tmp_name']) 
					  and filesize($_FILES['image']['tmp_name']) > $taille_max_image)
			  {
				$erreur = 'Votre fichier doit faire moins de 200Ko !';
			  }
			  // copie du fichier
			  if(!isset($erreur))
			  {
				$dest_fichier_image = basename($_FILES['image']['name']);
				// formatage nom fichier
				// enlever les accents
				$dest_fichier_image = strtr($dest_fichier_image, 'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
				// remplacer les caracteres autres que lettres, chiffres et point par _
				$dest_fichier_image = preg_replace('/([^.a-z0-9]+)/i', '_', $dest_fichier_image);
				// copie du fichier
				move_uploaded_file($_FILES['image']['tmp_name'], $dest_dossier_image . $dest_fichier_image);
			  }	
				//add image detail
				if(isset($_FILES['detail']))
				{
				  // params
				  unset($erreur);
				  $extensions_ok_detail = array('jpg', 'jpeg', 'JPG');
				  $taille_max_detail = 200000;
				  $dest_dossier_detail = $_SERVER['DOCUMENT_ROOT'].'/etstudio/images/detail/';
				  // vérifications
				  if( !in_array( substr(strrchr($_FILES['detail']['name'], '.'), 1), $extensions_ok_detail ) )
				  {
					$erreur = 'Veuillez sélectionner un fichier de type jpg !';  
				  }
				  elseif( file_exists($_FILES['detail']['tmp_name']) 
						  and filesize($_FILES['detail']['tmp_name']) > $taille_max_detail)
				  {
					$erreur = 'Votre fichier doit faire moins de 200Ko !';
				  }
				  // copie du fichier
				  if(!isset($erreur))
				  {
					$dest_fichier_detail = basename($_FILES['detail']['name']);
					// formatage nom fichier
					// enlever les accents
					$dest_fichier_detail = strtr($dest_fichier_detail, 'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
					// remplacer les caracteres autres que lettres, chiffres et point par _
					$dest_fichier_detail = preg_replace('/([^.a-z0-9]+)/i', '_', $dest_fichier_detail);
					// copie du fichier
					move_uploaded_file($_FILES['detail']['tmp_name'], $dest_dossier_detail . $dest_fichier_detail);
				  }	
					//add image detail2
					if(isset($_FILES['detail2']))
					{
					  // params
					  unset($erreur);
					  $extensions_ok_detail2 = array('jpg', 'jpeg', 'JPG');
					  $taille_max_detail2 = 200000;
					  $dest_dossier_detail2 = $_SERVER['DOCUMENT_ROOT'].'/etstudio/images/detail2/';
					  // vérifications
					  if( !in_array( substr(strrchr($_FILES['detail2']['name'], '.'), 1), $extensions_ok_detail2 ) )
					  {
						$erreur = 'Veuillez sélectionner un fichier de type jpg !';  
					  }
					  elseif( file_exists($_FILES['detail2']['tmp_name']) 
							  and filesize($_FILES['detail2']['tmp_name']) > $taille_max_detail2)
					  {
						$erreur = 'Votre fichier doit faire moins de 200Ko !';
					  }
					  // copie du fichier
					  if(!isset($erreur))
					  {
						$dest_fichier_detail2 = basename($_FILES['detail2']['name']);
						// formatage nom fichier
						// enlever les accents
						$dest_fichier_detail2 = strtr($dest_fichier_detail2, 'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
						// remplacer les caracteres autres que lettres, chiffres et point par _
						$dest_fichier_detail2 = preg_replace('/([^.a-z0-9]+)/i', '_', $dest_fichier_detail2);
						// copie du fichier
						move_uploaded_file($_FILES['detail2']['tmp_name'], $dest_dossier_detail2 . $dest_fichier_detail2);
					  }	
					}
				}
			}	
			//ADD Oeuvre
			$oeuvre_name = trim($_POST['oeuvre_name']);
			$legende = trim($_POST['legende']);
			$pub = trim($_POST['pubList']);	
			$date = trim($_POST['date']);
			$query_add_oeuvre = "INSERT INTO t_oeuvre VALUES ('','$oeuvre_name','$dest_fichier_image','$legende',";
			if(empty($dest_fichier_detail) && empty($dest_fichier_detail2)){
				$query_add_oeuvre .= "'','','$date','$pub')";
			}elseif (isset($dest_fichier_detail) && empty($dest_fichier_detail2)){
			$query_add_oeuvre .= "'$dest_fichier_detail','','$date','$pub')";
			}elseif (empty($dest_fichier_detail) && isset($dest_fichier_detail2)){
			$query_add_oeuvre .= "'','$dest_fichier_detail2','$date','$pub')";
			}else{
			$query_add_oeuvre .= "'$dest_fichier_detail','$dest_fichier_detail2','$date','$pub')";
			}
			mysql_query($query_add_oeuvre) or die("Ajout d'oeuvre : ".mysql_error());
			//ADD Table Intermédiaire pour la Catégorie
			$cat = trim($_POST['catId']);
			$last_oeuvre = mysql_insert_id();
			$query_add_int_cat = "INSERT INTO t_oeuvre_cat VALUES ('$cat','$last_oeuvre')";
			mysql_query($query_add_int_cat) or die("Ajout d'oeuvre table intermédiaire : ".mysql_error());
			//ADD Table Intermédiaire pour l'Expo (projet)
			if (empty($_POST['expo_add'])){
				$expoList = trim($_POST['expoList']);
				$query_add_int_expo = "INSERT INTO t_oeuvre_expo VALUES ('$expoList','$last_oeuvre')";
				mysql_query($query_add_int_expo) or die("Ajout d'oeuvre table intermédiaire : ".mysql_error());
				}
				else{
					$expo_add = trim($_POST['expo_add']);
					$query_new_expo = "INSERT INTO t_expo VALUE ('','$expo_add')";
					mysql_query($query_new_expo) or die("Ajout d'oeuvre table intermédiaire : ".mysql_error());	
					$last_expo = mysql_insert_id();
					$query_add_int_expo = "INSERT INTO t_oeuvre_expo VALUES ('$last_expo','$last_oeuvre')";
					mysql_query($query_add_int_expo) or die("Ajout d'oeuvre table intermédiaire : ".mysql_error());	
				}
			}
		}
Voici le formulaire
    <form id="add1" method="post" enctype="multipart/form-data" name="add_oeuvre" action="<?php echo $_SERVER['PHP_SELF']; ?>">
      Obligatoire:<br />
      <p>
        <label>L&eacute;gende*:</label>
      </p>
      <textarea name="legende" cols="50" rows="5"></textarea>
      <p>
        <label>Date*:</label>
        <input name="date" type="text" size="4" maxlength="4" />
      </p>
      <p>
        <label>Cr&eacute;ation*:</label>
        <input name="image" type="file" />
      </p>
      Facultatif:<br />
      <p>
        <label>D&eacute;tail:</label>
        <input name="detail" type="file" />
      </p>
      <p>
        <label>D&eacute;tail:</label>
        <input name="detail2" type="file" />
      </p>
      <p>
        <label>Publication:</label>
        <select name="pubList">
          <option value="y">Oui</option>
          <option value="n">Non</option>
        </select>
      </p>
      Projet:<br />
      <p>
        <label>S&eacute;lectionnez un Projet:</label>
        <select name="expoList">
          <option value=""></option>
          <?php $expoList = listExpo(); 
		foreach($expoList as $key=>$val){
		echo '<option value="'.$key.'"';echo '>'.$val['nom']."</option>\n";
		}
	?>
        </select>
      </p>
      <p>
        <label>Ajoutez un Projet:</label>
        <input name="expo_add" type="text" />
      </p>
      <input name="catId" type="hidden" value="<?php echo $_POST['catId']; ?>" />
      <input name="oeuvre_name" type="hidden" value="<?php echo $_POST['oeuvre_name']; ?>" />
      <input name="submit_add" type="submit" value=" Enregistrer " />
	  <input name="submit_centre" type="submit" value=" Centre de ressources " />
    </form>
Si ça a deja été fait un lien vers le sujet me suffit. :wink:

Merci
@+
Kev
Modifié en dernier par freemen le 06 avr. 2006, 14:38, modifié 1 fois.
Etudiant -- Infographiste Web/Multimédia

Eléphanteau du PHP | 26 Messages

06 avr. 2006, 13:29

En fait il ne me faudrait que l'extention. Comme ceci ??
   1.
      <?php
      // récupère la partie de la chaine à partir du dernier .
      $extension = strrchr($_FILES['photo']['name'], '.');
      // récupère la partie après le .
      $extension = substr($extension, 1);
      ?> 
Donc j'ai ceci:
if(!isset($erreur))
			  {
			  	$dest_fichier_image = trim($_POST['oeuvre_name']);
				// formatage nom fichier
				// enlever les accents
				$dest_fichier_image = strtr($dest_fichier_image, 'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
				// remplacer les caracteres autres que lettres, chiffres et point par _
				$dest_fichier_image = preg_replace('/([^.a-z0-9]+)/i', '_', $dest_fichier_image);
				// copie du fichier
				move_uploaded_file($_FILES['image']['tmp_name'], $dest_dossier_image . $dest_fichier_image);
			  }	
Mais il faut que j'ajoute ma variable $extension après mon $dest_fichier_image = trim($_POST['oeuvre_name']);

Comment dois je faire?

Merci
Etudiant -- Infographiste Web/Multimédia

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

06 avr. 2006, 14:47

Si j'ai bien comrpis, tu fais juste une simple concaténation de l'extension après le nom du fichier :)

Soit lorsque tu as définie le nom de l'image (après le preg_replace)
$dest_fichier_image.= "." . $extension;
// ce qui revient au meme que 
$dest_fichier_image = $dest_fichier_image . "." . $extension;
Ou bien lorsque tu déplaces le fichier :
move_uploaded_file($_FILES['image']['tmp_name'], $dest_dossier_image . $dest_fichier_image . "." . $extension); 
Si jamais ton extension comporte déjà le point, tu peux virer le "." des lignes ci dessus :)

Eléphanteau du PHP | 26 Messages

06 avr. 2006, 15:12

Si avec ce code
			  if(!isset($erreur))
			  {
				$dest_fichier_image = trim($_POST['oeuvre_name']);
				/*$dest_fichier_image = basename($_FILES['image']['name']);*/
				// formatage nom fichier
				// enlever les accents
				$dest_fichier_image = strtr($dest_fichier_image, 'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
				// remplacer les caracteres autres que lettres, chiffres et point par _
				$dest_fichier_image = preg_replace('/([^.a-z0-9]+)/i', '_', $dest_fichier_image);
				  // récupère la partie de la chaine à partir du dernier .
				  $extension = strrchr($_FILES['photo']['name'], '.');
				  // récupère la partie après le .
				  $extension = substr($extension, 1);
                                 // redéfini la variable avec l'extension
				  $dest_fichier_image = $dest_fichier_image.".".$extension; 
				// copie du fichier
				move_uploaded_file($_FILES['image']['tmp_name'], $dest_dossier_image . $dest_fichier_image);
			  }	
Et le nom TEST2 entré dans l'input de nom il va me crée un fichier TEST2 sans extention et dans ma DB il va m'entrée "TEST2."
Donc il manque l'extension.

Ce code pour récupérer l'extension est il juste?
				  // récupère la partie de la chaine à partir du dernier .
				  $extension = strrchr($_FILES['photo']['name'], '.');
				  // récupère la partie après le .
				  $extension = substr($extension, 1);
Etudiant -- Infographiste Web/Multimédia

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

06 avr. 2006, 15:31

Ton code pour récupérer l'extension est bon, mais tu ne l'appliques pas sur le bon élément :) :

$extension = strrchr($_FILES['photo']['name'], '.');
alors que ton fichier est $_FILES['image']

En fonction de ce que tu veux dans ta base de données, mais si tu veux le nom du fichier avec l'extension, il te faudra l'ajouter également ou réutiliser la variable $dest_fichier_image lors de l'insertion :)

Eléphanteau du PHP | 26 Messages

06 avr. 2006, 15:37

Bien vu Ryle...encore une fois je mérite des mandales... :lol:

Merci :wink:
Etudiant -- Infographiste Web/Multimédia

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

06 avr. 2006, 15:46

Si ca peut te rassurer, j'en fait des pires ;)

Sinon soit dit en passant, au lieu de virer le point de l'extension et de le rajouter ensuite, autant le garder des le départ :
$extension = strrchr($_FILES['photo']['name'], '.'); 
// $extension = substr($extension, 1); // à virer, on garde le point en fait :)
$dest_fichier_image = $dest_fichier_image.$extension; // du coup pas besoin de le rajouter entre le nom et l'extension :)