[RESOLU] création espace membre

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

27 août 2011, 17:38

a vu de nez la fonction mail est utilisée quand le pseudo n'est pas dans la table.

bon la tu l’utilise deux fois (une avant et une dans le if donc au pire tu aura deux mails ^^ => vire celle en dehors du if).
par contre l'arobase devant effectivement c'est moyen.

pour debugger il faut commencer par mettre en commentaire le header histoire d'etre sur de rester sur la page.
ensuite affiche les info au fur et a mesure de l'avancement du script (genre après un if tu met echo 'if ligne mchin'; voir un var_dump($LaVariableQuiVaBien);) avec ça tu sais pas où passe ton script et peux déterminer l'emplacement du problème.

le soucis avec la fonction mail c'est que si la com avec le serveur (smtp) se fait bien il n'y aura pas d'erreur, mais cela n'inclus pas que le mail soit bien reçu. Il pourra être dans les dossier spam, simplement bloqué sur le serveur au départ ou a l'arrivée ;)

pour la clef tu peux utiliser range, suffle et implode
par exemple (a tester) $clef_activation = implode('', suffle(array_merge(suffle(0,9),suffle('a','z'))));

tu peux garder ta méthode aussi bien que le parcourt par le foreach évitable :)

pour en revenir a nos montons commence à débugger et dit nous si ça bloque (le mail peux mettre plusieurs heures à arriver !).

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

Eléphant du PHP | 250 Messages

27 août 2011, 18:19

Ceci est un mail automatique, Merci de ne pas y répondre.';
// Envoi du mail d'activation
mail($destinataire, $sujet, $message, $entete) ;
Il te manque une simple quote devant Ceci, du coup c'est l'apostrophe de d'activation qui en fait office.....tu dois avoir un message d'erreur.
Au besoin fait un :error_reporting(E_ALL);, ou un ini_set('error_reporting', E_ALL); (voir la doc à ce sujet)
"L'histoire, à l'image de toutes choses dans l'univers, semble avoir comme unique règle le côté ondulatoire."

Eléphanteau du PHP | 38 Messages

28 août 2011, 13:40

Yop,

Je pense avoir résolu mon problème d'envoi d'un mail d'activation.....

Merci à tous ceux qui m'ont aidés...MERCI

Message me signifiant que mon serveur n'est pas configuré, ce qui est vrais
( ! ) Warning: mail() [function.mail]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in C:\wamp\www\site\Lezarts\000_membres\membre_test\inscription02.php on line 71
Donc il y a eu progression je vais pouvoir passer à l'étape suivante, je vous joint :

Le code revu et corrigé pour l'envoi du mail d'activation
mysql_query($sql) or die('Erreur SQL !</br>'.$sql.'<br />'.mysql_error());
			
	$login = ($_POST['pseudo']);
	// Préparation du mail contenant le lien d'activation
	$destinataire = ($_POST['email']);
	$objet = 'Activer votre compte' ;
	$entete = 'MIME-Version: 1.0' ;
	$entete = 'Content-Type: text/html; charset=iso-8859-1\n';
	$entete = 'Content-Transfert-Encoding: 8bit\n';
	$entete = 'From: [email protected]\n';
						
	// Le lien d'activation est composé du login(log) et de la clé(cle)
	$message = '<html><head><title>Mail d\'activation </title></head>
	<body><h2>Merci de votre inscription sur le site http://www.lezarts.org</h2>
	<p>Pour activer votre compte, veuillez cliquer sur le lien ci-dessous.</p>
	<p>Ou faites un copier/coller dans la barre d\'adresse de votre navigateur internet.</p>
	<p><a href=\"http://www.lezarts.org/activation.php?log='.urlencode($login).'&cle='.urlencode($clef_activation).'\">http://www.lezarts.org/activation.php?log=echo'($login, $clef_activation);'</a></p>
	<p>Ceci est un mail automatique, Merci de ne pas y répondre.</p>
	</body></html>';
				
	// Envoi du mail d'activation
	if (mail($destinataire, $objet, $entete, $message)) { 
				
		// Message de confirmation
		$erreur = 'Votre compte utilisateur a correctement été créer \n';
		$erreur .= 'Un email vient de vous être envoyer afin de l\'activer';
	}
	else {
                                  
		// Si une erreur survient
		$erreur = 'Une erreur est survenue lors de l\'envoi du mail d\'activation \n';
		$erreur .= 'Veuillez contacter l\'administrateur afin d\'activer votre compte';
	}
	}
	else {
		$erreur = 'Un membre possède déjà ce login.';	
	}	
	
		}
	}
	else {
			$erreur = 'Au moins un des champs est vide.';
	}
}
?>
J'ai remanié le mail d'activation en html, et j'ai supprimé :

session_start();
$_SESSION['pseudo'] = $_POST['pseudo'];
header('Location: membre.php');
exit();$sesion_star

Juste un soucis dans la syntaxe du lien menant à la page activation de mon message mail :

Voila le bout qui me chiffone
<p><a href=\"http://www.lezarts.org/activation.php?log='.urlencode($login).'&cle='.urlencode($clef_activation).'\">http://www.lezarts.org/activation.php?log=echo'($login, $clef_activation);'</a></p>
Jusque là toujours est-il que le formulaire fonctionne comme désiré...

Maintenant passont à l'étape suivante :

Création page activation.php : pour activer dans la base la colonne et mettre DEFAULT à '1' :
`compte_actif` ENUM('0','1') CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '0'
Alors je vais commencé mon ébauche pour la page activation.php

Ne vous tracassé pas..? je suis sur de revenir dans pas longtemps...

J'espère que mon case tête du moment servira à d'autres et merci @+...
Best wishes for a happy daylight and, good morning in your home @ + {:o)) Shi Xing Yi

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

29 août 2011, 09:41

la démarche est "simple" :
- vérifier la présence de pseudo et clef dans l'url ($_GET)
- vérifier que le login existe dans la table des membres ET que la clef d'activation est bonne (requête select)
- mettre a jour la table utilisateur avec un update

si ce sujet est clos peux tu cliquer sur résolu sur l'un des messages XD
ouvre un autre si autre pb ça sera plus simple ;)

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

Eléphanteau du PHP | 38 Messages

29 août 2011, 16:20

Yop,

j'ai déjà commencé l'ébauche de mon fichier activation.php et je suis partis à peut près dans le sens que tu me conseils.

de moogli
si ce sujet est clos peux tu cliquer sur résolu sur l'un des messages XD
ouvre un autre si autre pb ça sera plus simple

Réponse
Juste pour rappel j'ai créé se sujet pour créé un espace membre qui inclut une page inscription.php, une page activation.php, une page connexion et une page principal pour se loger ......
Donc je continue ce sujet jusqu'à la page principal pour ce logger (exemple index.php) et quand tout fonctionnera alors, je ferai un résolu de ce message.

Bref..?

Certaines pages sont déjà prêtent juste à être modifié ou même apporter quelques améliorations.....

Alors pour l'instant je continue avec ma page activation.

Mon soucis du moment est :
j'ai essayé de configurer wamp pour que le smtp fonctionne car j'ai une adresse qui est http://www.lezarts.org et que jutilise avec Outlook et qui fonctionne.
Je suis allé dans php.ini et j'ai mis à la ligne smtp : l'adresse de la messagerie de mon domaine et le port je l'ai laisser à 25 par défaut.

Alors sur ce je vais m'occuper de mon fichier d'activation et régler ce problème avec wamp, merci et @+
Best wishes for a happy daylight and, good morning in your home @ + {:o)) Shi Xing Yi

Eléphanteau du PHP | 38 Messages

29 août 2011, 21:38

Je savais que j'allais revenir...

J'ai voulu apporter quelques changement a mon formulaire d'inscription en voulant qu'il verifie non seulement le pseudo mais aussi l'adresse email avec message au cas ou il trouve une correspondance...

Voici le code d'erreur
( ! ) Warning: mysql_num_rows() expects parameter 1 to be resource, string given in
Et voici le bout de code qui me chiffone, pour info c'est la première fois que j'utilise mysql_num_rows()
		
else {
			
      $database = mysql_connect ('localhost', 'root', '');
      mysql_select_db ('espace_membres', $database);
      // on recherche si ce login et email sont déjà utilisé par un autre membre
      $sql = 'SELECT count(*) FROM comptes_utilisateurs WHERE pseudo="'.mysql_real_escape_string($_POST['pseudo']).'" OR email="'.mysql_real_escape_string($_POST['email']).'"';
      $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
      $data = mysql_fetch_array($req);
			
            // Si un enregistrement est trouvé
            if(mysql_num_rows($sql) > 0) {
                         
                while($row = mysql_fetch_array($sql)) {
                              
                    if($_POST['pseudo'] == $row['pseudo']) {
                        
	         $erreur = "Le nom d'utilisateur " . $_POST['pseudo'];
                         $erreur .= "est déjà utilisé";
                    }
                    elseif($_POST['email'] == $row['email']) {
                                   
	         $erreur = "L'adresse e-mail " . $_POST['email'];
                         $erreur .= "est déjà utilisée";
                    }
                              
                }
                         
            }
Dans l'attente de trouver la solution merci d'avance pour votre aide....
Best wishes for a happy daylight and, good morning in your home @ + {:o)) Shi Xing Yi

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

30 août 2011, 00:05

http://www.php.net/mysql_num_rows

compare la doc avec ton code

@+
Modifié en dernier par moogli le 04 sept. 2011, 20:33, modifié 1 fois.
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 38 Messages

30 août 2011, 13:58

Yop,

Après un long dialogue avec mon égo j'en suis arrivé à la conclusion suivantes:

1.- Pourquois me casser la tête..?

2.- A quoi cela me sert de savoir si une adresse mail existe dans ma base. Si par exemple je prend mon cas :

a.- Je suis père de famille

b.- Le fils de ma mère et de mon père, qui en informatique sont complétement dépassés, et que si je n'avais point d'amour pour eux, il me serait facile de les manipuler à mon avantage..?

3.- Bien donc après celà, j'ai pris la décision de revenir à mon formulaire d'avant quand tous fonctionnaient normalement. Et sutout me soucier que du pseudo, le reste n'était que de la paranoïaque, et ma remise en question, m'a aussi fait me rendre compte que j'utilisais parfois ma messagerie pour aider fille, maman, père et autres.... Alors..? Ha que coucou.... Et le 100% sécurité n'existe pas....

Merci à tous... je joins le code php du formulaire, si vous avez des améliorations à apporter..? Elles seront les bienvenues encore merci et @ +.......

Ce code verifies les champs, le nombres de caratères par champs, crée unr clef d'activation et envoi un mail pour activer le compte etc etc... A vous de le lire et d'exploiter mes prises de tête à votre convenance.....
<?php
error_reporting(E_ALL);

header('Content-type: text/html; charset=UTF-8');

/* Création d'une fonction - utilisée dans la récupération des variables - qui teste la configuration get_magic_quotes_gpc du serveur.
Si oui, supprime avec la fonction stripslashes les antislashes "\" insérés dans les chaines de caractère des variables gpc (GET, POST, COOKIE) */
function Verif_magicquotes ($chaine) 
	{
	if (get_magic_quotes_gpc()) $chaine = stripslashes($chaine);
	return $chaine;
	}
// Initialisation du message de réponse
//$erreur = null;

// on teste si le visiteur a soumis le formulaire
if (isset($_POST['inscription']) && $_POST['inscription'] == 'Inscription') {
	
	// on teste l'existence de nos variables. On teste également si elles ne sont pas vides
	if ((isset($_POST['pseudo']) && htmlspecialchars(trim($_POST['pseudo'] !='')))? Verif_magicquotes($_POST['pseudo']) : null 
	&& (isset($_POST['password']) &&  htmlspecialchars(trim($_POST['password'] !='')))? Verif_magicquotes($_POST['password']) : null
	&& (isset($_POST['pass_confirm']) && htmlspecialchars(trim($_POST['pass_confirm'] !='')))? Verif_magicquotes($_POST['pass_confirm']) : null 
	&& (isset($_POST['email']) && htmlspecialchars(trim($_POST['email'] !='')))? Verif_magicquotes($_POST['pseudo']) : null 
	&& (isset($_POST['email_confirm']) && htmlspecialchars(trim($_POST['email_confirm'] !='')))? Verif_magicquotes($_POST['email_confirm']) : null 
	&& (isset($_POST['url']) && htmlspecialchars(trim($_POST['email_confirm'])))? Verif_magicquotes($_POST['pseudo']) : null ) {
		
		// Vérification de la validitée des champs
        if (!preg_match('#^[A-Za-z0-9]{4,20}$#', $_POST['pseudo'])) {
			
			$erreur = 'Votre pseudo doit comporter un minimum de 4 caractéres,<br /><br />L\'utilisation de l\'underscore est autorisée.'; 
		}
		elseif (!preg_match('#^[A-Za-z0-9]{6,30}$#', $_POST['password'])) {
			
			$erreur = 'Votre mot de passe doit comporter un minimum de 6 caractéres.';
		}
		elseif ($_POST['password'] != $_POST['pass_confirm']) {
			
			$erreur = 'Les 2 mots de passe sont différents.';
		}
		elseif (!preg_match('#^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]{2,}[.][a-zA-Z]{2,4}$#',$_POST['email'])) {
			
			$erreur = 'Votre adresse e-mail n\'est pas valide';
		}
		elseif ($_POST['email'] != $_POST['email_confirm']) {
			
			$erreur = 'Les 2 adresse mail sont différents';
		}
		else {
			
			$database = mysql_connect ('localhost', 'root', '');
			mysql_select_db ('espace_membres', $database);
			// on recherche si ce login est déjà utilisé par un autre membre
			$sql = 'SELECT count(*) 
					FROM comptes_utilisateurs 
					WHERE pseudo="'.mysql_real_escape_string($_POST['pseudo']).'" 
					OR email="'.mysql_real_escape_string($_POST['email']).'"';
			
			$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
			$data = mysql_fetch_array($req);
			
			// Génération de la clef d'activation
			$caracteres = array('a', 'b', 'c', 'd', 'e', 'f', 0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
			$caracteres_aleatoires = array_rand($caracteres, 10);
			$clef_activation = ('');
							 
			foreach($caracteres_aleatoires as $i) {
						
				$clef_activation .= $caracteres[$i];
			}		
			
			if ($data[0] == 0) {
				$sql = 'INSERT INTO comptes_utilisateurs(pseudo, password, email, url, clef_activation, date_enregistrement) 
				VALUES("'.mysql_real_escape_string($_POST['pseudo']).'", 
					"'.mysql_real_escape_string(sha1($_POST['password'])).'", 
					"'.mysql_real_escape_string($_POST['email']).'", 
					"'.mysql_real_escape_string($_POST['url']).'", 
					"'.mysql_real_escape_string($clef_activation).'", NOW())';
				
				mysql_query($sql) or die('Erreur SQL !</br>'.$sql.'<br />'.mysql_error());
			
				$login = ($_POST['pseudo']);
				// Préparation du mail contenant le lien d'activation
				$destinataire = ($_POST['email']);
				$objet = 'Activer votre compte' ;
				$entete = 'MIME-Version: 1.0' ;
				$entete = 'Content-Type: text/html; charset=iso-8859-1\n';
				$entete = 'Content-Transfert-Encoding: 8bit\n';
				$entete = 'From: [email protected]\n';
						
				// Le lien d'activation est composé du login(log) et de la clé(cle)
				$message = '<html><head><title>Mail d\'activation </title></head>
				<body><h2>Merci de votre inscription sur le site http://www.lezarts.org</h2>
				<p>Pour activer votre compte, veuillez cliquer sur le lien ci-dessous.</p>
				<p>Ou faites un copier/coller dans la barre d\'adresse de votre navigateur internet.</p>
				<p>http://www.lezarts.org/activation.php?log='.urlencode($login).'&cle='.urlencode($clef_activation).'</p>
				<p>Ceci est un mail automatique, Merci de ne pas y répondre.</p>
				</body></html>';
				
				// Envoi du mail d'activation
				if (mail($destinataire, $objet, $entete, $message)) { 
				
					// Message de confirmation
					$erreur = 'Votre compte utilisateur a correctement été créer<br />
					Un email vient de vous être envoyer afin de l\'activer';
				}
				else {
                                  
					// Si une erreur survient
					$erreur = 'Une erreur est survenue lors de l\'envoi du mail d\'activation<br />
					Veuillez contacter l\'administrateur afin d\'activer votre compte';
				}
			}
			else {
				$erreur = 'Un membre possède déjà ce login.';	
			}	
	
		}
	}
	else {
			$erreur = 'Au moins un des champs est vide.';
	}
}
?>
PS : Ce code normalement fonctionne, parole de scout toujours... Pour les fainéant y'a qu'à copier/coller et développer le formulaire et la base selon vos besoins.......

@+
Best wishes for a happy daylight and, good morning in your home @ + {:o)) Shi Xing Yi

ViPHP
AB
ViPHP | 5818 Messages

30 août 2011, 18:12

Je comprend pas trop ta réponse. Tu dis que tu ne va te soucier que du pseudo et pourtant tu fais
<?php
WHERE pseudo="'.mysql_real_escape_string($_POST['pseudo']).'"
                                        OR email="'.mysql_real_escape_string($_POST['email']).'"';

Par ailleurs, cette ligne est mal construite :
if ((isset($_POST['pseudo']) && htmlspecialchars(trim($_POST['pseudo'] !='')))? Verif_magicquotes($_POST['pseudo']) : null
        && (isset($_POST['password']) &&  htmlspecialchars(trim($_POST['password'] !='')))? Verif_magicquotes($_POST['password']) : null
        && (isset($_POST['pass_confirm']) && htmlspecialchars(trim($_POST['pass_confirm'] !='')))? Verif_magicquotes($_POST['pass_confirm']) : null
        && (isset($_POST['email']) && htmlspecialchars(trim($_POST['email'] !='')))? Verif_magicquotes($_POST['pseudo']) : null
        && (isset($_POST['email_confirm']) && htmlspecialchars(trim($_POST['email_confirm'] !='')))? Verif_magicquotes($_POST['email_confirm']) : null
        && (isset($_POST['url']) && htmlspecialchars(trim($_POST['email_confirm'])))? Verif_magicquotes($_POST['pseudo']) : null )
Tu ferais mieux de reprendre exemple sur l'excellent 8-) tuto duquel tu t'es inspiré :wink:

Eléphanteau du PHP | 38 Messages

31 août 2011, 00:05

Yop,

je me suis trompé de fichier quand j'ai copié et collé le code car je n'utilise plus
<?php
WHERE pseudo="'.mysql_real_escape_string($_POST['pseudo']).'"
 OR email="'.mysql_real_escape_string($_POST['email']).'"';
Bref..?

Par ailleur pour ce qui est de cette partie de code, personnellement je l'avais constuite différement avant, mais j'ai essayer de faire autrement, histoire de savoir si cela fonctionne et pour l'instant pas de message d'erreur, mais bon si tu me dis que cela est mal construit, je te crois et je demande pas mieux que de corriger mes erreurs, pour ce qui est du tuto j'en ai utilisé plusieurs et tous étaient codé différement, et avec cela j'ai essayé de faire un formulaire qui tient à peu près la route....
if ((isset($_POST['pseudo']) && htmlspecialchars(trim($_POST['pseudo'] !='')))? Verif_magicquotes($_POST['pseudo']) : null
        && (isset($_POST['password']) &&  htmlspecialchars(trim($_POST['password'] !='')))? Verif_magicquotes($_POST['password']) : null
        && (isset($_POST['pass_confirm']) && htmlspecialchars(trim($_POST['pass_confirm'] !='')))? Verif_magicquotes($_POST['pass_confirm']) : null
        && (isset($_POST['email']) && htmlspecialchars(trim($_POST['email'] !='')))? Verif_magicquotes($_POST['pseudo']) : null
        && (isset($_POST['email_confirm']) && htmlspecialchars(trim($_POST['email_confirm'] !='')))? Verif_magicquotes($_POST['email_confirm']) : null
        && (isset($_POST['url']) && htmlspecialchars(trim($_POST['email_confirm'])))? Verif_magicquotes($_POST['pseudo']) : null )

Merci de ton aide et je me remet à la tâche, de plus si tu me dis ce qui cloche dans ce bout de code je t'en serais gré... , merci
Best wishes for a happy daylight and, good morning in your home @ + {:o)) Shi Xing Yi

Eléphanteau du PHP | 34 Messages

31 août 2011, 02:32

Salut,

Tu peux toujours test ça... mais il est possible qu'il y ai une erreur ou deux. Mais avec toute les réponses que tu as récolté, tu dois pouvoir te débrouiller !! :)
Je plaisante. Si ta besoin d'aide n'hésite pas ^^.
<?php
error_reporting(E_ALL);

header('Content-type: text/html; charset=UTF-8');

/* Création d'une fonction - utilisée dans la récupération des variables - qui teste la configuration get_magic_quotes_gpc du serveur.
Si oui, supprime avec la fonction stripslashes les antislashes "\" insérés dans les chaines de caractère des variables gpc (GET, POST, COOKIE) */
function Verif_magicquotes ($chaine)
        {
        if (get_magic_quotes_gpc()) $chaine = stripslashes($chaine);
        return $chaine;
        }

function postVariable($variable){
  $valeur_poster .= $_POST[."'".$variable."'".];
  
  return $valeur_poster;
}

// Initialisation du message de réponse
//$erreur = null;


if(isset($_POST['inscription']) && $_POST['inscription'] == 'Inscription'){
  //Tableau des valeurs récurentes à poster
  $tab_champs = array(
    'pseudo',
    'password',
    'pass_confirm',
    'email',
    'email_confirm',
    'url'
  )
  
  //Incrémentation des POST pour chaques valeurs
  $valeur_poster = '';
  foreach($tab_post AS $value){
    $valeur_poster .= postVariable($value);
  
    if(isset($valeur_poster) && htmlspecialchars(trim($valeur_poster !=''))){
  
      Verif_magicquotes($valeur_poster);
    
      //Vérification selon la valeur du tableau
      if($value == 'pseudo'){
        if(!preg_match('#^[A-Za-z0-9]{4,20}$#', $valeur_poster)){
          $erreur = 'Votre pseudo doit comporter un minimum de 4 caractéres,<br /><br />L\'utilisation de l\'underscore est autorisée.';
        }
      }
      elseif($value == 'password'){
        if(!preg_match('#^[A-Za-z0-9]{6,30}$#', $valeur_poster)){               
          $erreur = 'Votre mot de passe doit comporter un minimum de 6 caractéres.';
        }
      }
      elseif($value == 'pass_confirm'){
        if($_POST['password'] != $valeur_poster){
          $erreur = 'Les 2 mots de passe sont différents.';
        }
      }
      elseif($value == 'email'){    
        if(!preg_match('#^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]{2,}[.][a-zA-Z]{2,4}$#', $valeur_poster)){
          $erreur = 'Votre adresse e-mail n\'est pas valide';
        }
        elseif($valeur_poster != $_POST['email_confirm']){
          $erreur = 'Les 2 adresse mail sont différents';  
        }
        }
        else{               
          $database = mysql_connect ('localhost', 'root', '');
          mysql_select_db ('espace_membres', $database);
          // on recherche si ce login est déjà utilisé par un autre membre
          $sql = 'SELECT count(*)
                          FROM comptes_utilisateurs
                          WHERE pseudo="'.mysql_real_escape_string($_POST['pseudo']).'"
                          OR email="'.mysql_real_escape_string($_POST['email']).'"';
         
          $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
          $data = mysql_fetch_array($req);
         
          // Génération de la clef d'activation
          $caracteres = array('a', 'b', 'c', 'd', 'e', 'f', 0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
          $caracteres_aleatoires = array_rand($caracteres, 10);
          $clef_activation = ('');
                                           
          foreach($caracteres_aleatoires as $i) {
                                 
                  $clef_activation .= $caracteres[$i];
          }              
         
          if($data[0] == 0){
            
            $sql = 'INSERT INTO comptes_utilisateurs(pseudo, password, email, url, clef_activation, date_enregistrement)
            VALUES("'.mysql_real_escape_string($_POST['pseudo']).'",
                    "'.mysql_real_escape_string(sha1($_POST['password'])).'",
                    "'.mysql_real_escape_string($_POST['email']).'",
                    "'.mysql_real_escape_string($_POST['url']).'",
                    "'.mysql_real_escape_string($clef_activation).'", NOW())';
           
            mysql_query($sql) or die('Erreur SQL !</br>'.$sql.'<br />'.mysql_error());
    
            $login = ($_POST['pseudo']);
            // Préparation du mail contenant le lien d'activation
            $destinataire = ($_POST['email']);
            $objet = 'Activer votre compte' ;
            $entete = 'MIME-Version: 1.0' ;
            $entete = 'Content-Type: text/html; charset=iso-8859-1\n';
            $entete = 'Content-Transfert-Encoding: 8bit\n';
            $entete = 'From: [email protected]\n';
                           
            // Le lien d'activation est composé du login(log) et de la clé(cle)
            $message = '<html><head><title>Mail d\'activation </title></head>
            <body><h2>Merci de votre inscription sur le site http://www.lezarts.org</h2>
            <p>Pour activer votre compte, veuillez cliquer sur le lien ci-dessous.</p>
            <p>Ou faites un copier/coller dans la barre d\'adresse de votre navigateur internet.</p>
            <p>http://www.lezarts.org/activation.php?log='.urlencode($login).'&cle='.urlencode($clef_activation).'</p>
            <p>Ceci est un mail automatique, Merci de ne pas y répondre.</p>
            </body></html>';
           
            // Envoi du mail d'activation
            if (mail($destinataire, $objet, $entete, $message)) {       
              // Message de confirmation
              $erreur = 'Votre compte utilisateur a correctement été créer<br />
              Un email vient de vous être envoyer afin de l\'activer';
            }
            else{        
              // Si une erreur survient
              $erreur = 'Une erreur est survenue lors de l\'envoi du mail d\'activation<br />
              Veuillez contacter l\'administrateur afin d\'activer votre compte';
            }
          }
        else{
          $erreur = 'Un membre possède déjà ce login.';       
        }      
      }
    }
else{
  $erreur = 'Au moins un des champs est vide.';
}
}
}

Eléphanteau du PHP | 38 Messages

04 sept. 2011, 20:19

Yop,

Merci pour ton aide Alf?, Je vais tester ton code et comparer avec tous ce que j'ai déjà taper comme différent code pour faire mon formulaire d'inscription, je sais que j'ai récolté beaucoup de messages et je profite de remercier tous ceux qui mon apportés leurs aides...

Etant novice en php, je voulais simplement apprendre à sécurisé et optimiser au maximum le formulaire.

Dans l'attente de revenir avec le problème suivant qui est déjà en cours, je vous remercie et @+
Best wishes for a happy daylight and, good morning in your home @ + {:o)) Shi Xing Yi

Eléphanteau du PHP | 38 Messages

06 sept. 2011, 12:20

j'ai testé ton code mais il y a des bugs :

1er bug et message d'erreur
( ! ) Parse error: syntax error, unexpected '.', expecting ']' in on line 15
Le premier bug il me semble l'avoir résolut en déplaçant les guillemets [' ']..?

avant ----> $valeur_poster .= $_POST[."'".$variable."'".];

en ----> $valeur_poster .= $_POST['."".$variable."".'];

2eme bug et message d'erreur
( ! ) Parse error: syntax error, unexpected T_VARIABLE in on line 33
Le deuxième bug bin je plante et ne comprend pas ou se trouve l'erreur du message,
             //Incrémentation des POST pour chaques valeurs
bug ---> $valeur_poster = '';
            foreach($tab_post AS $value){
	 $valeur_poster .= postVariable($value);


Dans l'attente de trouver le pourquoi..? Merci de votre aide future.......
Best wishes for a happy daylight and, good morning in your home @ + {:o)) Shi Xing Yi

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

06 sept. 2011, 14:17

en ----> $valeur_poster .= $_POST['."".$variable."".'];

non => en ----> $valeur_poster .= $_POST[$variable];

sauf si le champ s'appel : ."".$variable."". (les points et les " compris !).
<?php
function postVariable($variable){
  $valeur_poster .= $_POST[."'".$variable."'".];
 
  return $valeur_poster;
}
?>
ne peut fonctionner car $valeur_poster n'existe pas dans la fonction voir pour cela la portée des variables !

foreach($tab_post AS $value)
dans ton cas $value contient la valeur du champs et son nom je ne vois pas comment tu peux vérifier quoi que ce soit ainsi.

a la limite
foreach($tab_post AS $nomchamp => $value)
et remplace, dans les if $value par $nomchamp.


je pense toujours qu'il serait bon de comprendre le mécanisme de fonctionnement des formulaire (qui est simple au final) et d'ensuite envisager la validation. Une validation simple dans un 1er temps et une complète au final :)

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

Eléphanteau du PHP | 38 Messages

06 sept. 2011, 23:32

yop,

merci mais..? je suis cuisinier de mêtier pour moi il est facile de faire à manger pour 200 personnes à moi tout seul. mais en ce qui concene le php je n'ai pas les moyens de me payer des cours et pourtant j'ai des bases en pascal (vieux language) mais bon..

je le re écrit je suis novice et j'essaye d'êrte aurodidact, je ne comprend pas tout le language des pros du php mais, avant toute chose je regarde pour trouver la solution à mais fantasme et cela tout seul... Mais souvent je me plante et c'est le pourquois j'ai besoins d'aide je remerci à tous ceux qui réponde é mes messages..? Car peut-être cela aide d'autre novice à évoluer en php, qui n'est pas aussi facile que l'on veux faire croire......

Merci é tous et je continue de rechercher à évoluer et d'aider les par la même occassion d'autre novices, pour qui je dirais ayez confiances en vous et c'est qu'en posant des questions que l'ont trouvent les réponses, encore à tous merci...@+
Best wishes for a happy daylight and, good morning in your home @ + {:o)) Shi Xing Yi