Création d'un répertoire avec un champ nom d'un mail

Résolu
blog-machine Messages postés 114 Date d'inscription samedi 27 juillet 2013 Statut Membre Dernière intervention 7 mai 2014 - 15 févr. 2014 à 16:50
jordane45 Messages postés 37529 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 5 juin 2023 - 17 févr. 2014 à 01:19
Bonjour,

Voici mon fichier mail.php, ce sont deux champs si vous donnez un email dans le champ dédier vous recevez un mal personnaliser assez bien fichu, il vérifie les champs, vérifie les mails, en fait jusqu'ici tout va bien

Voici la source de mail.php


<?php
// Headers
$headers .= "";
$headers .= "Mime-Version: 1.0 \r\n";
$headers .= 'Content-Type: text/plain; charset=iso-8859-1' . "\r\n";
$headers .= 'Content-transfer-encoding: 8bit' . "\r\n";
$headers .= 'Content-Type: multipart/mixed; boundary=frontier' . "\r\n";
$headers .= 'Content-Type: image/jpeg' . "\r\n";


/* Si le formulaire est envoyé alors on fait les traitements */
if (isset($_POST['envoye']))
{
/* Récupération des valeurs des champs du formulaire */
if (get_magic_quotes_gpc())
{
$civilite = stripslashes(trim($_POST['civilite']));
$nom = stripslashes(trim($_POST['nom']));
$expediteur = stripslashes(trim($_POST['email']));
}
else
{
$civilite = trim($_POST['civilite']);
$nom = trim($_POST['nom']);
$expediteur = trim($_POST['email']);
}

/* Expression régulière permettant de vérifier si le
* format d'une adresse e-mail est correct */
$regex_mail = '/^[-+.\w]{1,64}@[-.\w]{1,64}\.[-.\w]{2,6}$/i';

/* Expression régulière permettant de vérifier qu'aucun
* en-tête n'est inséré dans nos champs */
$regex_head = '/[\n\r]/';

/* Si le formulaire n'est pas posté de notre site on renvoie
* vers la page d'accueil */
if($_SERVER['HTTP_REFERER'] != 'http://www.terminal-media.fr/dev/visite/pages/mail.php')
{
header('Location: http://www.terminal-media.fr/dev/visite/pages/mail.php');
}
/* On vérifie que tous les champs sont remplis */
elseif (empty($civilite)
|| empty($nom)
|| empty($expediteur))
{
$alert = 'Tous les champs doivent être renseignés';
}
/* On vérifie que le format de l'e-mail est correct */
elseif (!preg_match($regex_mail, $expediteur))
{
$alert = 'L\'adresse '.$expediteur.' n\'est pas valide';
}
/* On vérifie qu'il n'y a aucun header dans les champs */
elseif (preg_match($regex_head, $expediteur)
|| preg_match($regex_head, $nom)
|| preg_match($regex_head, $sujet))
{
$alert = 'En-têtes interdites dans les champs du formulaire';
}
/* Si aucun problème et aucun cookie créé, on construit le message et on envoie l'e-mail */
elseif (!isset($_COOKIE['sent']))
{
/* Destinataire (votre adresse e-mail) */
$to = $expediteur;


/* Construction du message */
$sujet .= 'Carte de Visite - Online'."\r\n";
$msg = 'Bonjour,'."\r\n\r\n";
$msg .= 'Ce mail vous est parvenu depuis terminal-media.fr par '.$civilite.' '.$nom."\r\n\r\n";
$msg .= '_________________________________________________________________________'."\r\n";
$msg .= 'Voici votre message, nous vous souhaitons bonne lecture :'."\r\n";
$msg .= 'Vous avez souscrit à notre offre et nous remercions pour votre confiance'."\r\n";
$msg .= '_________________________________________________________________________'."\r\n";

/* En-têtes de l'e-mail */
$headers = 'From: '.$nom.'<'.$expediteur.'>'."\r\n\r\n";

/* Envoi de l'e-mail */
if (mail($to, $sujet, $msg, $headers))
{
$alert = 'Mail envoyé avec succès';

/* On créé un cookie de courte durée (ici 120 secondes) pour éviter de*/
/* renvoyer un mail en rafraichissant la page */
/*setcookie("sent", "1", time() + 120);*/

/* On détruit la variable $_POST */
unset($_POST);
}
else
{
$alert = 'Erreur d\'envoi de l\'e-mail';
}

}
/* Cas où le cookie est créé et que la page est rafraichie, on détruit la variable $_POST */
else
{
unset($_POST);
}
}
?>

<html>
<head>

<meta http-equiv="Content-type" content="text/html; charset=iso 8859-1" />

<title>Mail avec répertoire créer</title>

</head>
<body>

<form action="mail.php" method="post" id="boite">
<p>
<label for="civilite">Civilité :</label>
<select id="civilite" name="civilite">
<option
value="Mr"
<?php
if (!isset($_POST['civilite']) || $_POST['civilite'] == 'Mr')
{
echo ' selected="selected"';
}
?>
>
Monsieur
</option>
<option
value="Mme"
<?php
if (isset($_POST['civilite']) && $_POST['civilite'] == 'Mme')
{
echo ' selected="selected"';
}
?>
>
Madame
</option>
<option
value="Mlle"
<?php
if (isset($_POST['civilite']) && $_POST['civilite'] == 'Mlle')
{
echo ' selected="selected"';
}
?>
>
Mademoiselle
</option>
</select>
</p>
<p>
<label for="nom">Nom :</label>
<input type="text" id="nom" name="nom"
value="<?php echo (isset($_POST['nom'])) ? $nom : '' ?>" />
</p>
<p>
<label for="email">E-mail :</label>
<input type="text" id="email" name="email"
value="<?php echo (isset($_POST['email'])) ? $expediteur : '' ?>" />
</p>
<p>
<input type="submit" name="envoye" value="Envoyer" />
</p><?php
if (!empty($alert))
{
echo '<p style="font-family: arial, geneva, sans-serif; times new-roman; font-size:13px; ">'.$alert.'</p>';
}
?>
</form>

</body>
</html>

Pourtant et voici mon problème je voudrai pour bien faire qu'avec le champ nom qui est renseigné par le client, créer avec ce nom, un répertoire.

exemple :

monsieur
nom : dupont
email : / dupont@toto.com

et que donc le nom dupont soit le nom d'un répertoire créer avec mkdir

Les bases du programme mkdir les voici :



<?php
// Structure de répertoire désirée
$structure = './depth1/depth2/depth3/';

// Pour créer une stucture imbriquée, le paramètre $recursive
// doit être spécifié.

if (!mkdir($structure, 0777, true)) {
die('Echec lors de la création des répertoires...');
}

// ...
?>

mais comment faire pour fusionner le tout et qu'à partir du moment où le client, de sa messagerie, il clic sur un lien qui l'amènera vers son espace membres vers un répertoire avec son nom, dans une page d'accueil index.htm
c'est mon souci

Je suis quasiment néophyte et je travaille de façon empirique

merci pour vos explications, vos exemples et votre patience


cs

9 réponses

jordane45 Messages postés 37529 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 5 juin 2023 341
15 févr. 2014 à 19:41
Bonjour,

Que se passera t'il si plusieurs M. DUPONT s'inscrivent sur ton site ? Ils utiliseront le même répertoire ??
Le mieux serait de générer un nom de répertoire à partir d'un "encodage" md5. ( des exemples sont disponibles sur le net).

Pour ce qui est de fusionner tout ça.. je dirais qu'il te suffit de placer le code de création du répertoire dans le bloc if de vérification que ton mail est bien parti.


Pour ce qui est du lien.. il te suffit de l'inclure dans le corps de ton mail.
Tu peux le construire sous la forme:
$url_du_site . $Nom_du_repertoire.

voilou...

PS: il est rare que des espaces membres soient gérés par des répertoires... en règle général TOUT se fait par l'intermédiaire d'une base de donnée.
Après tout;. si tous tes membres doivent afficher des pages "comunes" (même structure de la page, seul les infos diffèrent) tu ne vas pas générer tes pages en dur pour les stocker dans tes répertoires... tu ne vas créer qu'une PAGE qui, grâce au PHP, javascript... affichera les informations pour chaque utilisateur....


Bonne prog.




0
blog-machine Messages postés 114 Date d'inscription samedi 27 juillet 2013 Statut Membre Dernière intervention 7 mai 2014
15 févr. 2014 à 21:18
Bonjour,

Effectivement s'il y a plusieurs dupont ça se complique.

Encodage md5 ok je vais voir ça mais je reviendrai car c'est un peu chaud pour moi ça

Ok pour la création du répertoire dans le if

Le lien, ça va, je vais pouvoir me débrouiller avec tes infos

Et pour aucun répertoire avec une seule page qui stocke des paramètres pour chacun des utilisateurs ça je n'y avait pas pensé et ça change beaucoup de chose dans ma manière d'aborder le problème, mais d'ores et déjà ça me plait beaucoup, j'en conviens c'est un métier et la base de donnée, Ouch vais-je y arriver ? Je cogite tout ça et je vois ce que je peux faire seul. merci
0
blog-machine Messages postés 114 Date d'inscription samedi 27 juillet 2013 Statut Membre Dernière intervention 7 mai 2014
16 févr. 2014 à 14:22
Oui en fait j'ai un soucis avec le lien dans le corps du message

voici mon code



$url = 'http://www.terminal-media.fr';


/* Construction du message */
$sujet .= 'Carte de Visite - Online'."\r\n";
$msg = 'Bonjour,'."\r\n\r\n";
$msg .= 'Ce mail vous est parvenu depuis terminal-media.fr par '.$civilite.' '.$nom. "\r\n\r\n";
$msg .= '_________________________________________________________________________'."\r\n";
$msg .= 'Voici votre message, nous vous souhaitons bonne lecture :'."\r\n";
$msg .= 'Vous avez souscrit à notre offre et nous remercions pour votre confiance'."\r\n";
// et c'est ici que ça cloche
$msg .= 'Voici l'adresse de votre site '.$url'."\r\n";
$msg .= '_________________________________________________________________________'."\r\n";




voilà et j'ai un message que je ne comprends pas malgré avoir tout tenté avec la syntaxe

Parse error: syntax error, unexpected T_STRING in/ visite/pages/mail.php on line 79

help !!! je suis perdu
0
jordane45 Messages postés 37529 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 5 juin 2023 341
16 févr. 2014 à 14:37
Tu peux faire un print_r($url); et nous dire ce que ça t'affiche ?
il n'y a pas d'apostfophe ou de guillemets DANS ta variable $url ?
0
blog-machine Messages postés 114 Date d'inscription samedi 27 juillet 2013 Statut Membre Dernière intervention 7 mai 2014
16 févr. 2014 à 15:27
Je ne comprends pas même sans la variable $url avec une phrase tout simple il y a toujours une erreurs sur la ligne 79 dans la syntaxe

que faire ?
0
jordane45 Messages postés 37529 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 5 juin 2023 341
16 févr. 2014 à 16:46
ben tu as quoi à la ligne 79 ?

Le souci peut aussi venir d'au dessus... un ";" manquant, des apostrophes ou des guillemets en trop ou en moins...
0
blog-machine Messages postés 114 Date d'inscription samedi 27 juillet 2013 Statut Membre Dernière intervention 7 mai 2014
16 févr. 2014 à 21:16
Bon j'ai réussi
le bon code est le suivant


$url = 'http://www.terminal-media.fr';
$dossier = 'mon-dossier';

...
$msg .= "Voici l'adresse de votre site : $url$dossier \r\n\r\n";

effectivement c'était les quottes qui étaient mal placés


attaquons nous à la création de répertoire
0
jordane45 Messages postés 37529 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 5 juin 2023 341
Modifié par jordane45 le 16/02/2014 à 21:40
effectivement c'était les quottes qui étaient mal placés
c'etait une quote en effet (celle juste dérrière $url ):
$msg .= 'Voici l'adresse de votre site '.$url'."\r\n";

A écrire :
$msg .= "Voici l'adresse de votre site ".$url."\r\n";


Edit : Ainsi que l'apostrophe dans ta phrase.
j'ai donc modifié l'encadrement de ton texte par des Guillemets à la place... mais tu aurais aussi pu "echaper" l'apostrophe
$msg .= 'Voici l\'adresse de votre site '.$url."\r\n";
0
blog-machine Messages postés 114 Date d'inscription samedi 27 juillet 2013 Statut Membre Dernière intervention 7 mai 2014
16 févr. 2014 à 23:28
oui parfait j'ai fait la modification et je n'avais pas vu pour l'apostrophe remplacé par l'antislash

merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
blog-machine Messages postés 114 Date d'inscription samedi 27 juillet 2013 Statut Membre Dernière intervention 7 mai 2014
16 févr. 2014 à 21:40
Opération réussi j'arrive à créer un répertoire à envoi du mail, il est bien dans le bloc vérification de l'envoi du mail, voici le code



/* Structure de répertoire désirée, la variable $structure et les trois répertoires
$structure = './depth1/depth2/depth3/';

/* Envoi de l'e-mail */
if (mail($to, $sujet, $msg, $headers))
{
$alert = 'Mail envoyé avec succès';

/* On créé un cookie de courte durée (ici 120 secondes) pour éviter de*/
/* renvoyer un mail en rafraichissant la page */
/*setcookie("sent", "1", time() + 120);*/

/* On détruit la variable $_POST */
unset($_POST);
}
else
{
$alert = 'Erreur d\'envoi de l\'e-mail';
}

}
/* Cas où le cookie est créé et que la page est rafraichie, on détruit la variable $_POST */
else
{
unset($_POST);
}

/* début de l'instruction pour créer le répertoire
if (!mkdir($structure, 0777, true)) {
/* message si échoué
die('Echec lors de la création des répertoires...');
}
}

0
jordane45 Messages postés 37529 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 5 juin 2023 341
16 févr. 2014 à 21:41
Opération réussi j'arrive à créer un répertoire

Question résolue alors ?
0
blog-machine Messages postés 114 Date d'inscription samedi 27 juillet 2013 Statut Membre Dernière intervention 7 mai 2014
16 févr. 2014 à 21:42
Maintenant passons au md5 et comment l'intégrer dans le mail pour que le lien soit une clé pour accéder au répertoire qui a été créer
vous avez des idées ?
0
jordane45 Messages postés 37529 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 5 juin 2023 341
16 févr. 2014 à 22:04
Tu peux utiliser md5 comme je te l'avais proposé
mais aussi UniqID
ou encore Hash

Exemple avec md5:
$newfilename = md5(time().$dossier);
0
blog-machine Messages postés 114 Date d'inscription samedi 27 juillet 2013 Statut Membre Dernière intervention 7 mai 2014
16 févr. 2014 à 22:37
J'ai trouvé ça mais de nombreuses questions subsistent
car il me faut une fonction qui :

à savoir :

- que mon répertoire qui a été créé soit unique pour chaque utilisateur s'il ne l'est pas pouvoir rajouté un chiffre exemple : dupont1 si dupont existe

// là je ne sais pas, j'attends vos commentaires

- donne un mot de passe au client dans son mail d'accueil

- que ce mot de passe soit dans le lien du mail pour accéder au dossier qui a été créé, donc qu'il donne accès à un répertoire

- que ce mot de passe soit sécurisé dans une base de donnée, mysql, donc une table avec 1) le login 2)le mail 3) le mot de passe

- que cela soit super sécurisé ça je m'en moque un peu si un type veut s'amuser avec et s'il a du temps à perdre ou quelque chose à se prouver c'est son truc, mais ce n'est pas une priorité


dites-moi si je me plante, tous vos conseils sont les bienvenus

il y a ça, ce code, mais pour l'instant je ne l'ai pas intégrer à une base de donnée il me faudrait écrire la table mais je peine à trouver comment faire

à vous...


<?php
// Exemple d'implémentation de Auth_HTTP avec mot de passe crypté (md5)
// et une récupération de colonnes annexes.

require_once("Auth/HTTP.php");

// Connexion à la base
$AuthOptions = array(
'dsn'=>"pgsql://test:test@localhost/testdb",
'table'=>"testable", // Nom de votre table
'usernamecol'=>"username", // Nom de la colonne contenant le nom d'utilisateur
'passwordcol'=>"password", // Nom de la colonne contenant le mot de passe
'cryptType'=>"md5", // Type de cryptage du mot de passe dans la BD
'db_fields'=>"*" // Active la récupération des données des autres colonnes
);

$a = new Auth_HTTP("DB", $AuthOptions);

$a->setRealm('votreRoyaume'); // Nom du royaume (ensemble de l'espace protégé)
$a->setCancelText('<h2>Erreur 401</h2>'); // Message d'erreur en cas d'echec
$a->start(); // Démarrage de la procédure d'authentification.


if($a->getAuth()) { // en cas de réussite
echo "Salut ".$a->username." bienvenue dans ma page protégée";
echo "Nos info sur vous: <BR>";
echo $a->getAuthData('userid'); // On a retrouvé d'autres info dans la table
echo $a->getAuthData('telephone'); // Dans cet exemple, l'id user, son téléphone
echo $a->getAuthData('email'); // et son adresse email.
};
?>
0
jordane45 Messages postés 37529 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 5 juin 2023 341
16 févr. 2014 à 23:33
- que mon répertoire qui a été créé soit unique pour chaque utilisateur s'il ne l'est pas pouvoir rajouté un chiffre exemple : dupont1 si dupont existe


Pour ça : Lorsque tu génère le nom de ton répertoire.. tu testes si il existe.
Si c'est le cas.. tu génère un nouveau non... et ainsi de suite jusqu'à en avoir un qui n'existait pas déjà. ( chose assez peu probable avec les méthodes (md5 ou Uniqid ou Hash ) que je t'ai proposé avant....


Un truc du genre :
 do {
	$newfilename = md5(time().$dossier . mt_rand());
} while( file_exists( $newfilename ) == true );



Pour le reste... NOUVELLES QUESTIONS = NOUVELLES DISCUSSIONS
donc.. ouverture de nouvelles discussions sur le forum ( Une discussion par question .. c'est la règle ici. .)

mais bon.. tu peux déjà, avant de venir poser tes questions sur le forum, chercher un peu par toi même..
Voici quelques pistes à suivre (et au cas où à chercher sur le net..)

- donne un mot de passe au client dans son mail d'accueil
=>Mot de passe : Générer password aléatoire.

- que ce mot de passe soit dans le lien du mail pour accéder au dossier qui a été créé, donc qu'il donne accès à un répertoire
Pour le mettre dans le mail : Même façon que pour ton Nom de dossier

- que ce mot de passe soit sécurisé dans une base de donnée, mysql, donc une table avec 1) le login 2)le mail 3) le mot de passe
1 - Créer une table "UTILISATEURS"
2 - Créer dans cette table les champs :
- id ( auto incrémenté )
- Nom (varchar)
- Prenom (varchar)
- Login(varchar)
- Pasword (varchar)
- Email (varchar)

NB: pour les champs tu peux en ajouter (ou en retirer sauf l'ID).

3 - Trouver les codes qui permetent :
a) - Connexion à la BDD
b) - Insertion en BDD de données
puis pour la connexion au site :
c) - Recherche de l'utilisateur et de son pasword pour le comparer à ce que l'utilisateur aura saisi pour se loguer.

Voila.. tu as un peu de travail. (surtout de recherche).
Il n'y a plus cas...


PS : au cas où tu ne l'aurais pas vu.. je déplace régulièrement tes commentaires en REPONSES. (c'est plus lisible sur le forum).
Merci à l'avenir d'utiliser le bouton REPONDRE.



0
jordane45 Messages postés 37529 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 5 juin 2023 341
17 févr. 2014 à 01:19
edit : Dans la table utilisateur : ajouter un champ DOSSIER (pour y stocker le nom du dossier généré par ton md5 et ainsi pouvoir le retrouver facilement dans ta bdd si nécéssaire.
0
blog-machine Messages postés 114 Date d'inscription samedi 27 juillet 2013 Statut Membre Dernière intervention 7 mai 2014
17 févr. 2014 à 01:13
Bon ça fonctionne, j'ai ainsi toutes les réponses à mes questions du départ de cette discussion.

Voici le code



// comme indiqué par Jordanne avec l'heure et l'accès aléatoire
do {
$newfilename = md5(time().$dossier . mt_rand());
} while( file_exists( $newfilename ) == true );


...
// la variable filename accollé à celle $url
$msg .= 'Voici l\adresse de votre site : '.$url.$newfilename. "\r\n\r\n";

...

}
// et enfin la structure du répertoire qui est créé

if (!mkdir($newfilename, 0777, true)) {
die('Echec lors de la création des répertoires...');
}

merci j'ai mes réponses et mon programme qui fonctionne je clos le fil et je cogite les pistes pour la base et le reste
merci
0