Page 1 sur 2

Créer dossier php

Posté : 29 oct. 2011, 12:37
par TRUNCKS
Bonjour à vous,

J'ai une petite base de données où je rentre des catégories avec une interface admin.
J'aimerais, que lorsque je rentre le nom d'une catégorie, avec l'enregistrement sur la bdd, il me crée un dossier du même nom que la catégorie dans mon dossier image.

L'inscription dans la bdd marche, c'est la création de dossier qui ne veut pas se faire.
( J'ai fait un peu ça comme je le sentais, je n'ai pas trouvé comment créer des dossiers à partir d'une variable :( )
Sachant que mon dossier images existe déja, mon but est de créer dans ce dossier image, un dossier qui se nomme comme le nom_catégorie.
Et à l'intérieur de ce nom-catégorie, deux dossiers, un images et un mini.

Le but, est que pour que, à chaque nouvelle catégorie, son dossier correspondant soit créé.

Voici où j'en suis, j'ai une erreur comme cela:

Warning: mkdir() [function.mkdir]: No such file or directory in C:\wamp\www\categories\addcategorie.php on line 44
Impossible de créer le dossier de base des photos ../images/exemple/images/
$sq="insert into categories values('',\"$nom_categorie\")";   
$quer=mysql_query($sq ) or die('erreur sq: '.mysql_error());  

$dir = "../images/$nom_categorie/images/";  
$dir_mini = "../images/$nom_categorie/mini/";  
   
mkdir($dir);  
if(!is_dir($dir))  
{  
 echo 'Impossible de créer le dossier de base des photos ' . $dir;  
}  
else  
{  
 chmod($dir, 0777);  
   
 mkdir($dir_mini);  
 if(!is_dir($dir_mini))  
 {  
  echo 'Impossible de créer le dossier des miniatures ' . $dir_mini;  
 }  
 else  
 {  
  chmod($dir_mini, 0777);  
 }  
}  
}

Re: Créer dossier php

Posté : 29 oct. 2011, 13:10
par xTG
Il faut créer le dossier $nom_categorie avant de créer les sous-dossiers. ;)

Re: Créer dossier php

Posté : 29 oct. 2011, 13:13
par Alf?>
Salut TRUNCKS,

Le problème actuel se manifeste car tu dois créer le dossier "../images/$nom_categorie" avec un mkdir() puis lancer la suite de ton code (code que tu as publié).

En espérant que ça puisse t'aider, Alf?> :mrgreen:

Re: Créer dossier php

Posté : 29 oct. 2011, 13:15
par Ryle
Par défaut, mkdir ne permet de créer qu'un dossier à la fois. Si tu veux créer une arborescence, il faut passer à TRUE le paramètre recursif de mkdir()

A noter également que pour pouvoir créer un répertoire, php doit disposer des droits suffisant sur le répertoire dans lequel il tente d'écrire.

Concernant tes interrogations sur les variables, dis-toi qu'une variable php ne contient rien de plus qu'une valeur et qu'un chemin de fichier pour php n'est rien d'autre qu'une chaine de caractère (tout comme les requêtes sql). Il te suffit donc de créer la bonne chaine de caractère (que ce soit une chaine sql, un chemin sur le disque, ...) en positionnant tes variables là où c'est nécessaire pour constituer cette chaine. Une fois que tu as obtenu ta chaine de caractère, elle pourra être interprété par le système de fichier, par le moteur sql ou tout ce à quoi tu la destines ;)

Re: Créer dossier php

Posté : 29 oct. 2011, 13:33
par TRUNCKS
Impeccable, merci pour vos réponses et vos explications !

J'ai une question bonus du coup, comment faire pour par exemple, si la personne entre des espaces ou des accents, les virer ou les remplacer ?

Car je crois que ce n'est pas conseillé de laisser des espaces ou des accents sur un nom de dossier ?

Re: Créer dossier php

Posté : 29 oct. 2011, 13:46
par xTG
En effet vaux mieux utiliser une fonction remplaçant les caractères non voulus. :)

Re: Créer dossier php

Posté : 29 oct. 2011, 13:49
par TRUNCKS
Mais du coup, quand je vais vouloir uploader des fichiers dans ce dossier ( qui n'aura pas d'accents ) en me basant sur le nom de la catégorie, qui elle, garde ses accents dans la bdd, comment cela va t'il se goupiller ?

Ouf... Désolé... :)

Re: Créer dossier php

Posté : 29 oct. 2011, 13:54
par Alf?>
Salut,

Voici une fonction très utils pour les accents et souvent utilisé:

function supprAccent($texte){
return strtr($string,'àáâãäçèéêëìíîïñòóôõöùúûüýÿÀÁÂÃÄÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝ', 'aaaaaceeeeiiiinooooouuuuyyAAAAACEEEEIIIINOOOOOUUUUY');
}

et pour les espaces tu fais :

function supprEspace($texte){
return str_replace(' ','',$text);
}

Bon je t'ai un peu macher le travail, désoler.
Tu peux ensuite t'amuser a faire appel à l'une dans l'autre, genre:

function supprtout($texte){
return supprAccent(supprEspace(supprAccent($texte));
}

Re: Créer dossier php

Posté : 29 oct. 2011, 15:14
par TRUNCKS
Re-bonjour :)

J'ai testé le code pour enlever les accents mais je n'ai pas réussis à le faire fonctionner :(
Il y a quelque chose que je n'ai pas du comprendre :(

J'ai fait cela:

$main= "../images/$nom_categorie/";
$dir = "../images/$nom_categorie/images/";
$dir_mini = "../images/$nom_categorie/mini/";

function stripAccents($main){
	return strtr($main,'àáâãäçèéêëìíîïñòóôõöùúûüýÿÀÁÂÃÄÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝ',
'aaaaaceeeeiiiinooooouuuuyyAAAAACEEEEIIIINOOOOOUUUUY');
}

mkdir($main);


Re: Créer dossier php

Posté : 29 oct. 2011, 17:12
par xTG
Oui, tu n'as pas compris comment on appelait une fonction. ;)
function foo($bar){
  return $bar + 1;
}

echo foo(1);
$nombre = 4;
echo foo($nombre);

Re: Créer dossier php

Posté : 29 oct. 2011, 17:19
par Alf?>
AH !
Effectivement, ton code devrais plutôt ressembler à ceci :

$main= "../images/$nom_categorie/";
$dir = "../images/$nom_categorie/images/";
$dir_mini = "../images/$nom_categorie/mini/";

function stripAccents($nom_categorie){
return strtr($main,'àáâãäçèéêëìíîïñòóôõöùúûüýÿÀÁÂÃÄÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝ',
'aaaaaceeeeiiiinooooouuuuyyAAAAACEEEEIIIINOOOOOUUUUY');
}

mkdir($main);

Bien que la sémantique ne sois peut-être pas la meilleur :mrgreen:

Re: Créer dossier php

Posté : 29 oct. 2011, 19:23
par TRUNCKS
Merci de prendre la peine de me répondre.

Malheureusement cela ne fonctionne toujours pas :(
J'ai toujours les caractères bizarres à la place des accents.

Re: Créer dossier php

Posté : 29 oct. 2011, 19:53
par Alf?>
c'est normal :
Regarde ta fonction. Tu lui fait passer $nom_categorie mais tu traite $main :?: :!:

Correction :
function stripAccents($nom_categorie){
return strtr($nom_categorie,'àáâãäçèéêëìíîïñòóôõöùúûüýÿÀÁÂÃÄÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝ',
'aaaaaceeeeiiiinooooouuuuyyAAAAACEEEEIIIINOOOOOUUUUY');
}

Re: Créer dossier php

Posté : 29 oct. 2011, 21:06
par TRUNCKS
Alors après vérification, pour les caractères bizarres, cela vient de ma ligne:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

Le problème,c 'est que si je l'enlève, je n'ai plus les accents dans les titres et intitulés de mes formulaires.
Si je vire la ligne, je n'ai plus les caractères, mais les accents restent quand même malgré l'ajout conseillé, je capte plus trop :(

Voilà où j'en suis:
$nom_categorie = mysql_real_escape_string($_POST['nom_categorie']);

$sq="insert into categories values('',\"$nom_categorie\")"; 
$quer=mysql_query($sq ) or die('erreur sq: '.mysql_error());

$main= "../images/$nom_categorie/";
$dir = "../images/$nom_categorie/images/";
$dir_mini = "../images/$nom_categorie/mini/";

function stripAccents($nom_categorie){
return strtr($nom_categorie,'àáâãäçèéêëìíîïñòóôõöùúûüýÿÀÁÂÃÄÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝ',
'aaaaaceeeeiiiinooooouuuuyyAAAAACEEEEIIIINOOOOOUUUUY');
}

mkdir($main);

Re: Créer dossier php

Posté : 29 oct. 2011, 21:39
par xTG
L'encodage d'un site forme un tout, on fait rarement un bric à brac de plusieurs encodage sinon on a ce genre de problème.
- Réglage de l'encodage du serveur PHP (voir fonction header())
- Réglage de l'encodage de connexion au sgbd (voir le driver correspondant, dans ton cas le lot de fonctions mysql_)
- Réglage de l'encodage des fichiers (à voir dans ton éditeur de texte)
- Réglage de l'encodage d'interprétation des fichiers HTML générés (balise meta)

Tous ces encodages doivent être les mêmes et non pas un coup en iso et l'autre en utf-8.