mkdir et apostrophe

Sioux
Invité n'ayant pas de compte PHPfrance

03 mai 2013, 16:02

Bonjour à tous,
J'ai un léger soucis de création de dossier avec la fonction mkdir().
J'ai un petit formulaire qui récupère une variable $nom. Celui ci indique le titre d'une catégorie et créé en même temps un dossier avec comme nom cette variable.Jusque là tout va bien...
Jusqu'au moment ou j'ai un titre avec une apostrophe.La variable est bien créé et s'inscrit bien tel quel dans ma base de donnée mais le dossier refuse de se créer.
Donc est-ce qu'il est possible de créé un dossier avec caractère spécial avec mkdir()?
Mon code
if(!empty($_POST["nom"])){
	$erreurs = array(); //initialise un tableau d'erreurs au cas ou :)
	$nom = mysql_escape_string(trim($_POST["nom"])); //enleve les espaces de chaque côté de la variable
	$date = mysql_escape_string(trim($_POST["date"])); 
	$categorie="galerie_3d";
	$desc = mysql_escape_string(trim($_POST["description"]));
	$lienimage = "";
	$typesacceptes = array("image/jpeg","image/jpg","image/png","image/gif");
	//vérifie si les images existent et qu'elles sont au bon format
	if(!empty($_FILES["image"]["name"]) && in_array($_FILES["image"]["type"],$typesacceptes))
	  {
		
		if(!is_dir("galerie/3d/".$nom))
		     {  
		         mkdir("galerie/3d/".$nom."", 0777);//création d'un dossier si il n'existe pas
			  mkdir("galerie/3d/".$nom."/min", 0777);//création d'un dossier pour les miniature
			  mkdir("galerie/3d/".$nom."/vid", 0777);//création d'un dossier pour les vidéos
		      }
			
			$lienimage = mysql_escape_string($_FILES["image"]["name"]);
			copy($_FILES["image"]["tmp_name"],"projet/3d/".$lienimage);
			
			//connexion à la BDD
			$connect=mysql_connect(DB_HOST,DB_LOGIN,DB_PASS) or die ('erreur de connexion'); 
			mysql_select_db(DB_BDD) or die ('erreur de connexion à la base'); 
	
			$requeteinsert = "INSERT INTO projet_3d(nom,lienimage,categorie,description,date) VALUES(\"".$nom."\",\"".$lienimage."\",\"".$categorie."\",\"".$desc."\",\"".$date."\")";
			$result = mysql_query($requeteinsert,$connect);
			echo "<p class='styletexte'>Votre image a bien été enregistrée!</p>";
			mysql_close($connect);	
	   }
	else{
		$erreurs[] = "Veuillez uploader une image valide (format jpg, png ou gif)!";
	}
}

Merci d'avance

ViPHP
ViPHP | 2577 Messages

03 mai 2013, 16:16

je viens de faire un test avec mkdir en ligne de commande. Il faut remplacer ' par \'.

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

03 mai 2013, 16:21

oubli ce type de chose c'est une source d'emmerde.

un nom de dossier c'est sans espace, apostrophe, caractère accentué ou caractère spécial (en gros [A-Za-a0-9\-_]) sinon tu va au devant d'ennuie pour l'utilisation des répertoires, tu devras tout échapper, tu aura des problèmes si tu doit naviguer dans les répertoires etc etc.

si le nom de répertoire n'est pas une donnée vitale (et ne devrait pas l'être) tu peux très bien choix le nom arbitrairement et le stocker en base vu que c'est ainsi que tu semble faire la liaison.


@+
Il en faut peu pour être heureux ......