Autorisatioon pour les commentaires

Fermé
gintoxic Messages postés 524 Date d'inscription mardi 31 juillet 2007 Statut Membre Dernière intervention 7 avril 2016 - 24 août 2013 à 16:45
gintoxic Messages postés 524 Date d'inscription mardi 31 juillet 2007 Statut Membre Dernière intervention 7 avril 2016 - 30 août 2013 à 23:27
Bonjour,
bonjour

je cherche à protéger mon formulaire de commentaires des entrées intepestives de pub et autres floodage. et dans cet optique, je souhaite ajouter une entrée "mot de passe" qui devra etre verifiée par rapport à la table "membres" (pour rappel, tout ce qui concerne les commentaires se trouvent dans la table "commentaires")
j'ai lu quelques pages du livre de Mathieu Nebra (le site du Zero) et il aborde les AS (alias).
je me susi dit qu'en utilisant un alias, je pourrait récupérer le mot de passe dans une table et le comparer à celui de l'autre par rapport au pseudo entré, mais je n'ai pas su faire correctement.
puis j'ai tenté de prendre simplement le pass de la table "membres" et de la comprarer à l'entrée de l'utilisateur ....
je n'y arrive pas où c'est une histoire de synthaxe/position du code...

lien pour voir le résultat :

http://symposion.fr/test_array.php

je n'ai rien trouvé sur la toile ou sur le livre qui puisse m'aider (des explications simple que je puisse comprendre évidemment)

apres plusieurs heures de tentative, je me heurte à un mur et je m'épuise en tachant de comprendre des choses qui ne sont pas expliquées

que signifie une requete où il apparait ".... WHERE pseudo='.$pseudo.' ');

il s'agit de requete qui pourrait peut-etre m'aider ?

comment définit-on qu'un pseudo est tant une table et comment on le compare avec celui entré par l'utilisateur dans le formulaire et à quel moment doit-on faire cette comparaison dans le script ?

je suis un peu perdu et je tiens à signaler quand meme que je suis un super novice en pdo et débutant en PHP.

tout ce qui peut etre une évidence pour vous est un questionnement pour moi.

j'adore apprendre et j'ai grandement besoin d'aide

puis-je compter sur vous et votre aide ?

je vous post ce que j'ai fait en dernier lieu dans mon script et je ne vois rien d'autre à faire meme si je ne cesse de chercher

merci à vous

ps : une autre cose que j'ai du mal à comprendre si PDOStatement est un objet que l'on utilise en php (une classe me semble-t-il...)

quand doit-on utiliser PDOStatement->closeCursor ? je ne l'ai vu utilisé que pour des requête comportant un fetch() (ce qui me parait logique)

est-ce qu'on l'utilise qua dans le cas de ces fetch() ?

code :
if(isset($_POST['submit'])){


 	//  $Jour = array("Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi");  
	 // $Mois = array("","janvier", "février", "mars", "avril", "mai", "juin", "juillet", "août", "septembre", "octobre", "novembre", "décembre");  
	 // $datefr = $Jour[date("w")]." ".date("d")." ".$Mois[date("n")]." ".date("Y").", ".date("H")." : ".date("i");
    $loggin =  $_POST['pseudo']; // htmlspecialchars ne sert à rien ici. Il ne faut l'utiliser que lorsqu'il y a une sortie de texte, pas une entrée. De plus, le "a écrit" est une donnée qui reviens donc elle aura sa place dans la boucle en bas
    $mess = $_POST['message']; // pareil
    $pass = $_POST['passwd'];
 	  
      
	
        // si tous les champs sont vides
        if(empty($_POST['pseudo']) OR empty($_POST['message']) OR empty($_POST['passwd'])){
            echo '<p class="vide">Un des champs est vide</p>';
        }
        // vérification d'un pseudo existant
            if(isset($_POST['pseudo']){
            try{
            $verif = $connexion->query('SELECT pseudo, pass FROM membres');
            $data = $verif->fetch();
                if($data != $loggin){
                    echo 'vous devez être connecté(e) pour poster un commentaire';
                }
            }
            catch(Exception $e){
            echo 'Erreur : '.$e;
            }
        }
            
        // si tout est ok
        else{
            try{
            // on définit les logins / paramètres de la base de donnée
             $insertion_table = $connexion->prepare('INSERT INTO commentaires(pseudo, message,date_enregistrement) VALUES(:pseudo, :message,:date_enregistrement)')
             or exit(print_r($insertion_table->errorInfo())); // on prépare la requete SQL afin d'envoyer le message / pseudo. Si la requete échoue, on affiche l'erreur
             $insertion_table->execute(array('pseudo'=>$loggin, 'message'=>$mess, 'date_enregistrement'=>time())); // on éxécute la requete
            }
            catch(Exception $e){
                echo 'problème d\'insertion dans la bdd : '.$e->getMessage();
            }

            
            try{
		      $result= $connexion->query('SELECT * FROM commentaires ORDER BY date_enregistrement DESC'); // on séléctionne tous les champs de la table commentaires
             while ($donnees = $result->fetch()){
                echo '<div id="pseudo">';
                echo '<div class="heure">'.date('l d m Y H:i', $donnees['date_enregistrement']).'</div>';
                echo '<div class="nom">'.htmlentities($donnees['pseudo']).' a écrit : </div></div>';
                echo '<div id="bloc_message">"'.nl2br(htmlentities($donnees['message'])).'"</div>';
                // ici donc, on rajoute htmlentities (un dérivé de htmlspecialchars()) car cette fois ci, on sort le texte. De plus, on peut voir que " a écrit : " reviens car il sera rajouté à chaque passage de la boucle
            }

            }
            catch(Exception $e){
                echo 'problème avec la requête d\'affichage : '.$e->getMessage();
            }
            $result->closeCursor();
    }
}




20 réponses

Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
24 août 2013 à 17:23
salut, essayes plutôt comme ça:
<?php
if(isset($_POST['submit'])){
 	//  $Jour = array("Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi");  
	 // $Mois = array("","janvier", "février", "mars", "avril", "mai", "juin", "juillet", "août", "septembre", "octobre", "novembre", "décembre");  
	 // $datefr = $Jour[date("w")]." ".date("d")." ".$Mois[date("n")]." ".date("Y").", ".date("H")." : ".date("i");
    $loggin =  $_POST['pseudo']; // htmlspecialchars ne sert à rien ici. Il ne faut l'utiliser que lorsqu'il y a une sortie de texte, pas une entrée. De plus, le "a écrit" est une donnée qui reviens donc elle aura sa place dans la boucle en bas
    $mess = $_POST['message']; // pareil
    $pass = $_POST['passwd'];
	
        // si tous les champs sont vides
        if(empty($_POST['pseudo']) OR empty($_POST['message']) OR empty($_POST['passwd'])){
			echo '<p class="vide">Un des champs est vide</p>';
        }
		
        // vérification d'un pseudo et mot de pass existant
            if(isset($_POST['pseudo']) && isset($_POST['pass']){
            try{
				$verif = $connexion->query("SELECT pseudo, pass FROM membres WHERE pseudo='".$loggin."'");
				$data = $verif->fetch();
					if($data['pseudo'] == $loggin && $data['pass'] == $pass){
						//login et mot de pass corrects on peut inserer le commentaire
						try{
							// on définit les logins / paramètres de la base de donnée
							 $insertion_table = $connexion->prepare('INSERT INTO commentaires(pseudo, message,date_enregistrement) VALUES(:pseudo, :message,:date_enregistrement)')
							 or exit(print_r($insertion_table->errorInfo())); // on prépare la requete SQL afin d'envoyer le message / pseudo. Si la requete échoue, on affiche l'erreur
							 $insertion_table->execute(array('pseudo'=>$loggin, 'message'=>$mess, 'date_enregistrement'=>time())); // on éxécute la requete
							}
							catch(Exception $e){
								echo 'problème d\'insertion dans la bdd : '.$e->getMessage();
							}

							
							try{
							  $result= $connexion->query('SELECT * FROM commentaires ORDER BY date_enregistrement DESC'); // on séléctionne tous les champs de la table commentaires
							 while ($donnees = $result->fetch()){
								echo '<div id="pseudo">';
								echo '<div class="heure">'.date('l d m Y H:i', $donnees['date_enregistrement']).'</div>';
								echo '<div class="nom">'.htmlentities($donnees['pseudo']).' a écrit : </div></div>';
								echo '<div id="bloc_message">"'.nl2br(htmlentities($donnees['message'])).'"</div>';
								// ici donc, on rajoute htmlentities (un dérivé de htmlspecialchars()) car cette fois ci, on sort le texte. De plus, on peut voir que " a écrit : " reviens car il sera rajouté à chaque passage de la boucle
							}

							}
							catch(Exception $e){
								echo 'problème avec la requête d\'affichage : '.$e->getMessage();
							}
							$result->closeCursor();
						
						
					}else {
						echo 'vous devez être connecté(e) pour poster un commentaire';
					}
            }
            catch(Exception $e){
				echo 'Erreur : '.$e->getMessage();
            }
        }
}
0
gintoxic Messages postés 524 Date d'inscription mardi 31 juillet 2007 Statut Membre Dernière intervention 7 avril 2016 10
24 août 2013 à 17:42
merci pour ta réponse, mais ça m'affiche une erreur au niveau du navigateur non expliquée
par contre cette ligne me semble bizarre au niveau des guillemets et apostrophes :
$verif = $connexion->query("SELECT pseudo, pass FROM membres WHERE pseudo='".$loggin."'");


par ailleurs je ne sais pas d'où peut venir l'erreur ...
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
24 août 2013 à 21:43
non la ligne est normale les guillemets servent à la concatenation
tu parles d'erreur, quelle erreur ?
0
gintoxic Messages postés 524 Date d'inscription mardi 31 juillet 2007 Statut Membre Dernière intervention 7 avril 2016 10
25 août 2013 à 01:30
justement il ne dit aucune erreur, je veux dire : aucune explication d'erreur, mais une erreur !! c'est assez agaçant de ne pas savoir où est l'erreur ou les erreurs..

pour concaténer, il ne suffit pas de mettre :
WHERE pseudo='.$loggin.' ");

au lieu de
WHERE pseudo='".$loggin."'");

???

dans cette instruction à quoi correspond le $loggin ? la variable prédéfinie par mes soin qui est égal à $_POST['pseudo'] ou à la valeur trouvé dans la table ?
stp

merci
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
25 août 2013 à 09:56
dans la requette telle que je te l'ai donné:

"SELECT pseudo, pass FROM membres WHERE pseudo='".$loggin."'"


la chaine commence et finit par "

donc pour concaténer à l'intérieur il faut:

"blabla".$va."bbbaaa"

mais comme il faut en plus encadrer la valeur par des '

ça fait bien:
"SELECT pseudo, pass FROM membres WHERE pseudo='".$loggin."'"


$loggin = $_POST['pseudo']; donc la valeur sasie par l'utilisateur
que l'on compare à celle dans la table par la condition WHERE et on verifie que le pass saisi est bien associé à ce pseudo dans la BDD

if($data['pseudo'] == $loggin && $data['pass'] == $pass)

$data['pseudo'] c'est que qui est dans la base
$loggin ce qui a été saisi

idem pour le pass
0
gintoxic Messages postés 524 Date d'inscription mardi 31 juillet 2007 Statut Membre Dernière intervention 7 avril 2016 10
25 août 2013 à 12:51
salut
c'est pas plutot :
if(($data['pseudo'] == $loggin && $data['pass'] == $pass)) 
?

je demande hein...
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
25 août 2013 à 21:30
pourquoi deux parenthèses de chaque côté ?
0
gintoxic Messages postés 524 Date d'inscription mardi 31 juillet 2007 Statut Membre Dernière intervention 7 avril 2016 10
25 août 2013 à 21:44
oula oui, je fatigue moi.... c'est pas du tout ça !
autant pour moi Alain, j'ai fait trop de code pour bien discerner
mais j'ai trouvé comment faire cette partie de script autrement en fait mis à part que je ne sais pas comment faire pour vérifier que le pseudo entré correspond bien au mot de passe et au mail
pour éviter que l'utilisateur n'ouvre un compte par mot de passe et faire une bonne authentification....
0

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

Posez votre question
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
25 août 2013 à 22:03
pour vérifier que le pseudo correspond au mot de pass enregistré dans la BDD c'est comme je t'ai indiqué.
0
gintoxic Messages postés 524 Date d'inscription mardi 31 juillet 2007 Statut Membre Dernière intervention 7 avril 2016 10
25 août 2013 à 23:49
et comment je fais avec ce code ? il faut que je refasse tout ?

if(isset($_POST['submit'])){
        if(empty($_POST['pseudo']) OR empty($_POST['message']) OR empty($_POST['passwd'])){
            echo '<p class="vide">Un des champs est vide</p>';
        } // le formulaire est vide, on ne va pas plus loin !
        //------------------------------------------------------------------------------------------------------
        // on a validé le formulaire et rempli l'intégralité du formulaire...
        else {
              // préparation de la requête de vérif de l'existence des données
              $auth = $connexion->prepare('SELECT COUNT(*) FROM membres WHERE pseudo = :pseudo AND pass = :pass');
              // execution avec les paramètres 
              $auth->execute(array(':pseudo'=>$_POST['pseudo'], ':pass'=>$_POST['passwd']));
              // s'il n'y a pas de résultat
                if ($auth->fetchColumn() < 1) {
                    echo 'vous devez être enregistré(e) pour poster un commentaire';
                }
                // ----------------------------------------------------------------------------------------------
                // Les données sont trouvées et on va chercher l'existence d'une Session
                else { // si le pseudo est trouvé
                	
                	if (empty($_SESSION['pseudo'])) { //et que la session n'existe pas
    				echo 'ouverture de session';
					} 
					//--------------------------------------------------------------------------------------------
					else { // si la session est ouverte 
    					// insertion du commentaire
    					// on définit les logins / paramètres de la base de donnée
                             $insertion_table = $connexion->prepare('INSERT INTO commentaires(pseudo, message,date_enregistrement) VALUES(:pseudo, :message,:date_enregistrement)')
                             or exit(print_r($insertion_table->errorInfo())); // on prépare la requete SQL afin d'envoyer le message / pseudo. Si la requete échoue, on affiche l'erreur
                             $insertion_table->execute(array('pseudo'=>$loggin, 'message'=>$mess, 'date_enregistrement'=>time())); // on éxécute la requete

                             $result= $connexion->query('SELECT * FROM commentaires ORDER BY date_enregistrement DESC'); // on séléctionne tous les champs de la table commentaires
                             while ($donnees = $result->fetch()){
                                echo '<div id="pseudo">';
                                echo '<div class="heure">'.date('l d m Y H:i', $donnees['date_enregistrement']).'</div>';
                                echo '<div class="nom">'.htmlentities($donnees['pseudo']).' a écrit : </div></div>';
                                echo '<div id="bloc_message">"'.nl2br(htmlentities($donnees['message'])).'"</div>';
                                // ici donc, on rajoute htmlentities (un dérivé de htmlspecialchars()) car cette fois ci, on sort le texte. De plus, on peut voir que " a écrit : " reviens car il sera rajouté à chaque passage de la boucle
                            }

                            }
               			}
				}
		}
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
26 août 2013 à 10:11
est ce qu'il fonctionne si oui c'est bon avec une méthode sensiblement différente mais qui revient au même.
0
gintoxic Messages postés 524 Date d'inscription mardi 31 juillet 2007 Statut Membre Dernière intervention 7 avril 2016 10
26 août 2013 à 17:11
pas du tout comme je l'espere, voici 3 entrées que j'ai créé vite fait et qui n'ont pas alerté qui que ce soit
id    pseudo        mail               pass

67	testeur	adresse@mail.fr	         rerere
65	kri2sis	adresse@mail.fr	          rerere
66	kri2sis	autreadresse@mail.fr     rerere
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
Modifié par Alain_42 le 26/08/2013 à 17:44
je n'ai pas regardé de près ton code, mais

dans les 3exemples que tu donnes tous ont le m^me mot de pass et deux ont le m^me pseudo et mot de pass

dans ton code je ne vois pas la partie connexion BDD
new PDO.....
0
gintoxic Messages postés 524 Date d'inscription mardi 31 juillet 2007 Statut Membre Dernière intervention 7 avril 2016 10
26 août 2013 à 18:33
// Désactive l'émulateur de requêtes préparées (hautement recommandé)
                $pdo_options[PDO::ATTR_EMULATE_PREPARES] = false;
                
                // Active le mode exception
                $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
                
                // Indique le charset 
                $pdo_options[PDO::MYSQL_ATTR_INIT_COMMAND] = "SET NAMES utf8";

 
            try // on essaye de se connecter
            {
            $connexion = new PDO('mysql:host='.$hote.';dbname='.$BD, $user, $pass,$pdo_options);
            }
 
            catch(Exception $e) 
            {
            echo 'Erreur : '.$e->getMessage().'<br />N° : '.$e->getCode(); 
                }
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
26 août 2013 à 18:42
comme cela ça ira mieux:

<?php
$host='localhost';
$db_name='test2';
$user_host='root';
$pass_host='';
if(isset($_POST['submit'])){
        if(empty($_POST['pseudo']) OR empty($_POST['message']) OR empty($_POST['passwd'])){
            echo '<p class="vide">Un des champs est vide</p>';
        } // le formulaire est vide, on ne va pas plus loin !
        //------------------------------------------------------------------------------------------------------
        // on a validé le formulaire et rempli l'intégralité du formulaire...
        else {
			//connexion base
		try {
			$connexion = new PDO('mysql:host='.$host.';dbname='.$db_name.'', ''.$user_host.'', ''.$pass_host.'') ;
		} catch(PDOExeption $e) {
			die('Erreur lors de la connexion a la base de donnees' .$e->getMessage());
		}
	
			
              // préparation de la requête de vérif de l'existence des données
              $auth = $connexion->prepare('SELECT COUNT(*) FROM membres WHERE pseudo = :pseudo AND pass = :pass');
              // execution avec les paramètres 
              $auth->execute(array(':pseudo'=>$_POST['pseudo'], ':pass'=>$_POST['passwd']));
              // s'il n'y a pas de résultat
                if ($auth->fetchColumn() < 1) {
                    echo 'vous devez être enregistré(e) pour poster un commentaire';
                }
                // ----------------------------------------------------------------------------------------------
                // Les données sont trouvées et on va chercher l'existence d'une Session
                else { // si le pseudo est trouvé
                	
                	if (empty($_SESSION['pseudo'])) { //et que la session n'existe pas
						session_start();
						$_SESSION['pseudo']=$_POST['pseudo'];
						//la tu ouvres une session et ensuite tu enregistres le commentaire
						//car tu ne peux passer dans le if et dans le else en même temps
					
    					// insertion du commentaire
    					// on définit les logins / paramètres de la base de donnée
                             $insertion_table = $connexion->prepare('INSERT INTO commentaires(pseudo, message,date_enregistrement) VALUES(:pseudo, :message,:date_enregistrement)')
                             or exit(print_r($insertion_table->errorInfo())); // on prépare la requete SQL afin d'envoyer le message / pseudo. Si la requete échoue, on affiche l'erreur
                             $insertion_table->execute(array('pseudo'=>$loggin, 'message'=>$mess, 'date_enregistrement'=>time())); // on éxécute la requete

                             $result= $connexion->query('SELECT * FROM commentaires ORDER BY date_enregistrement DESC'); // on séléctionne tous les champs de la table commentaires
                             while ($donnees = $result->fetch()){
                                echo '<div id="pseudo">';
                                echo '<div class="heure">'.date('l d m Y H:i', $donnees['date_enregistrement']).'</div>';
                                echo '<div class="nom">'.htmlentities($donnees['pseudo']).' a écrit : </div></div>';
                                echo '<div id="bloc_message">"'.nl2br(htmlentities($donnees['message'])).'"</div>';
                                // ici donc, on rajoute htmlentities (un dérivé de htmlspecialchars()) car cette fois ci, on sort le texte. De plus, on peut voir que " a écrit : " reviens car il sera rajouté à chaque passage de la boucle
                            }

                            }
               			}
				}
		}

?>
0
gintoxic Messages postés 524 Date d'inscription mardi 31 juillet 2007 Statut Membre Dernière intervention 7 avril 2016 10
Modifié par gintoxic le 26/08/2013 à 20:12
ma page bloque son CSS (http://symposion.fr pour test)
de plus je me rends compte que ej te casse les pieds avec un formulaire de commentaire alors qu'il faut que je regle d'abord le probleme avec le formulaire d'enregistrement de compte.... je suis désolé et le dernier exemple que je t'avais donné est ce qui est dans la bdd lors de l'enregistrement : il enregistre un peu n'importe comment en effet


try{
        $bdd = new PDO('mysql:host='.$hote.';dbname='.$BD, $user, $pass,$pdo_options);
        // Désactive l'émulateur de requêtes préparées (hautement recommandé)
                $pdo_options[PDO::ATTR_EMULATE_PREPARES] = false;
                
                // Active le mode exception
                $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
                
                // Indique le charset 
                $pdo_options[PDO::MYSQL_ATTR_INIT_COMMAND] = "SET NAMES utf8";
    }
    catch(Exception $e) // si on y arrive pas, le $e contient les erreurs
            {
            die('Erreur : '.$e->getMessage());
                }
                
                if(isset($_POST['submit'])){
              //  -------------------------------------------------------------------------------------------------------------
                if(empty($_POST['pseudo']) OR empty($_POST['email']) OR empty($_POST['pass']) OR empty($_POST['pass2'])){
                    echo '<p class="vide">Un des champs est vide</p>';
                    } // le formulaire est vide, on ne va pas plus loin !
                    if ($_POST['pass'] != $_POST['pass2']) {
                        echo 'Les mots de passe doivent être identiques'; 
                    } // si les mots de passe sont différents, on le signale

                    //------------------------------------------------------------------------------------------------------
                    // Si tout est OK ...
                    
                    if(isset($_POST['pseudo']) AND isset($_POST['email']) AND isset($_POST['pass']) AND isset($_POST['pass2'])){ 
                        $email = $_POST['email'];
                        $loggin = $_POST['pseudo'];
                        $passwd = $_POST['pass'];
                        $passwd2 = $_POST['pass2'];
                    // on a validé le formulaire et rempli l'intégralité du formulaire... et créé les variables
                    //--------------------------------------------------------------------------
                         if(preg_match('#^[a-z0-9._-]{1,}@[a-z0-9._-]{2,}\.[a-z]{2,4}$#',$email)){ 
                         // préparation de la requête de vérif de l'existence des données
                    $auth = $bdd->prepare('SELECT COUNT(*) FROM membres WHERE pseudo = :pseudo AND pass = :pass AND email = :email');
                    // execution avec les paramètres 
                     $auth->execute(array(':pseudo'=>$_POST['pseudo'], ':pass'=>$_POST['pass'], ':email'=>$_POST['email']));
                    // s'il n'y a pas de résultat
                        if ($auth->fetchColumn() < 1) {
                    //on définit les logins / paramètres de la base de donnée
                        $insertion_table = $bdd->prepare('INSERT INTO membres(pseudo, email, pass) VALUES(:pseudo, :email,:pass)')
                        or exit(print_r($insertion_table->errorInfo())); // on prépare la requete SQL afin d'envoyer le message / pseudo. Si la requete échoue, on affiche l'erreur
                        $insertion_table->execute(array('pseudo'=>$loggin, 'email'=>$email, 'pass'=>$passwd)); // on éxécute la requete
                        
                        echo '<p>Vous êtes désormais enregistré(e) ! Et si on se connectait maintenant ?</p>';
                        echo '<p><a href="connexion.php"><em>C\'est par ici</em></a></p>';
                        }
                        else{ echo 'Le compte existe déjà, <a href="#">se connecter</a> ';}
                        }
                        else{echo 'Vous avez entré une adresse mail invalide';}
                        }
                    
                    }
                    
                    
                       //-----------------------------------------------------------------------------------  

                     //--------------------------------------------------------------------------------------
                     
                     
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
26 août 2013 à 21:27
et comme ça:
(voir commentaires)
<?php
$hote='localhost';
$BD='test2';
$user='root';
$pass='';
	// Désactive l'émulateur de requêtes préparées (hautement recommandé)
     $pdo_options[PDO::ATTR_EMULATE_PREPARES] = false;
        // Active le mode exception
    $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
    // Indique le charset 
    $pdo_options[PDO::MYSQL_ATTR_INIT_COMMAND] = "SET NAMES utf8";
	
	//si tu utilises une variable $pdo_options il faut la définir avant 
	
try{
    $bdd = new PDO('mysql:host='.$hote.';dbname='.$BD, $user, $pass,$pdo_options);
      
}
  catch(Exception $e) // si on y arrive pas, le $e contient les erreurs
    {
        die('Erreur : '.$e->getMessage());
    }
                
                if(isset($_POST['submit'])){
					if(empty($_POST['pseudo']) OR empty($_POST['email']) OR empty($_POST['pass']) OR empty($_POST['pass2'])){
						echo '<p class="vide">Vous devez remplir tous les champs</p>'; // le formulaire n'est pas complet, on ne va pas plus loin !
                    }else{ 
						//recup des valeurs saisies
						$email = $_POST['email'];
						$loggin = $_POST['pseudo'];
						$passwd = $_POST['pass'];
						$passwd2 = $_POST['pass2'];
						
						if ($passwd != $passwd2) {
							echo 'Les mots de passe doivent être identiques'; // si les mots de passe sont différents, on le signale
						}elseif(!preg_match('#^[a-z0-9._-]{1,}@[a-z0-9._-]{2,}\.[a-z]{2,4}$#',$email)){ 					
							echo 'Vous avez entré une adresse mail invalide';
						}else{						
							// Si tout est OK ...                 
								//ATTENTION tu mets parfois mail, parfois email, sois plus rigoureux !
							 // préparation de la requête pour vérif si les saisie n'existent pas déja
							$auth = $bdd->prepare('SELECT COUNT(*) FROM membres WHERE pseudo = :pseudo AND pass = :pass AND email = :email');
							// execution avec les paramètres 
							$auth->execute(array(':pseudo'=>$_POST['pseudo'], ':pass'=>$_POST['pass'], ':email'=>$_POST['email']));
							// s'il n'y a pas de résultat
							if ($auth->fetchColumn() < 1) {
							//on enregistre l'utilisateur dans la base de donnée
								$insertion_table = $bdd->prepare('INSERT INTO membres(pseudo, email, pass) VALUES(:pseudo, :email,:pass)')
								or exit(print_r($insertion_table->errorInfo())); // on prépare la requete SQL afin d'envoyer le message / pseudo. Si la requete échoue, on affiche l'erreur
								$insertion_table->execute(array('pseudo'=>$loggin, 'email'=>$email, 'pass'=>$passwd)); // on éxécute la requete
								if($insertion_table){
									//la requette s'est bien déroulée
									echo '<p>Vous êtes désormais enregistré(e) ! Et si on se connectait maintenant ?</p>';
									echo '<p><a href="connexion.php"><em>C\'est par ici</em></a></p>';
								}
							}else{ 
								echo 'Le compte existe déjà !'; //pourquoi se deconnecté on est pas encore connecté a ce moment on cherche seulement a s'enregistrer
							}
                        }
                    }
				}
				
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<style type="text/css">
#bloc_message{
    background: #FAFAFA;
    /*min-width:300px;
    min-height:200px;
    max-width:40%;*/
    border:1px solid #D8D8D8;
    border-radius: 0 10px 10px 0;
    padding-left: 10px;
    padding-top: 5px;
    border-left:6px solid #A4A4A4;

}
/*#bloc_message:nth-child(even){
    background:red;
}*/
.whitesmoke{background:whitesmoke;
    border:1px solid #A4A4A4;}
.vide{
    color:red;
}
.whitesmoke[value]{
    color:grey;
    font-style: italic;
}
#pseudo{
    /*border: 1px solid blue;*/
    margin-top :50px;
    min-width:300px;
    max-width:100%;
}
.heure{
    font-size: 10pt;
    display: inline-block;
    text-align: left;
    width:30%;
    font-style: italic;
    /*border:1px solid red;*/
}
.nom{
    text-align: right;
    display:inline-block;
    border:red;
    width:50%;
    position:relative;
    margin-left: 90px;
    /*border: 1px solid green;*/
}
</style>
</head>

<h4>Inscription: </h4>
				<!-- il ne faut pas mettre action="#" mais action="" tout simplement -->
                    <form method="post" action="" id="hide_form">
                    Login : <input type="text" name="pseudo" class="whitesmoke" value="" /><br /><br />
                    Mot de passe : <input type="password" name="pass" value="" /><br />
                    Retaper mdp : <input type="password" name="pass2" value="" /><br />
                    Email : <input type="text" name="email" value="" /><br />
                   
                    <input type="submit" value="envoyer" name="submit" />
                    </form>					
0
gintoxic Messages postés 524 Date d'inscription mardi 31 juillet 2007 Statut Membre Dernière intervention 7 avril 2016 10
26 août 2013 à 22:04
donc, une chose de base que j'ai oublié c'est : merci à toi pour le temps que tu passes, la patience et la volonté d'aider...

ensuite, pour ce dernier code, il marche : il entre des entrées dans la base sauf si celles saisies sont déjà dans la base avec cette combinaison : pseudo/email/pass mais il suffit de changer un des parametres et il enregistre quand meme (cf le petit shéma de la table 'membres' que j'ai posté tout à l'heure)
pour les commentaires, il reconnait bien la présence du pseudo mais il reste à ouvrir une session...
le souci c'est que je ne sasi aps comment on peut faire pour le faire en pleine page . il faut que je fasse un script au préalble que je "require" en heut de chaque page ?
et dans mes formulaires ? surtout que je vais etre obligé de faire un formulaire pour la conneion.... j'imagine qu'il sera moins dur que les deux autres voire qu'il ressemblera à celui pour les commentaires...
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
26 août 2013 à 22:15
pour la connexion tu fais un formulaire pour la saisie pseudo et pass

ensuite dans le code php tu fait une requette BDD qui verifie que le couple login/pass existe pour ouvrir une session

session_start();

$_SESSION['pseudo']=$pseudo;
header(location:accueil.php); //vers la première page du site


ensuite tout en haut de toutes les pages accessibles seulement si connecté tu mets:
<?php
//avant ça il ne faut rien mettre, pas de code html
session_start();
if(!isset($_SESSION['pseudo'] || $_SESSION['pseudo'] !=""){
     header(location:connexion.php);
}else{
  //toute la partie html de ta page
 //tu peux y  mettre aussi
echo 'Bonjour '.$pseudo.' vous êtes connecté';
}

0
gintoxic Messages postés 524 Date d'inscription mardi 31 juillet 2007 Statut Membre Dernière intervention 7 avril 2016 10
26 août 2013 à 22:24
pour ce qui est de la session, c'est juste pour mettre le psedo de la personne dans un endroit de chaque page et évidemment pour pouvoir mettre des commentaires
0
gintoxic Messages postés 524 Date d'inscription mardi 31 juillet 2007 Statut Membre Dernière intervention 7 avril 2016 10
27 août 2013 à 00:44
je viens de lire que sql disposait de champs uniques qui garantissent l'unicité et donc de cette façon on n peut entrer 2 fois la même valeur de champs et ça j'avoue que j'en ai besoin pour le mail au niveau de l'inscription
apres un test, ca marche de telle facon qu'on ne peut entrer un mail identque à celui deja présent dans la table mais qu'au niveau visuel sur le site, ca stoppe tout (meme le dsign html/css
or je souhaite emettre un commentaire lorsque cet évenement se produit (tentative de doublon)

est ce que je peux faire ca ?

merci
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
Modifié par Alain_42 le 27/08/2013 à 08:41
je ne voit pas comment ça peut bloquer le html css

avec inscription.php lorsque l'on fait la verification

bdd->prepare('SELECT COUNT(*) FROM membres WHERE pseudo = :pseudo AND pass = :pass AND email = :email');
// execution avec les paramètres
$auth->execute(array(':pseudo'=>$_POST['pseudo'], ':pass'=>$_POST['pass'], ':email'=>$_POST['email']));
// s'il n'y a pas de résultat
if ($auth->fetchColumn() < 1) {


on s'assure bien que ni le pseudo,, ni le pass, ni le mail n'existent sur une même "ligne"
l'inconvénient c'est que tu peux avoir plusieurs fois le même pseudo avec soit un pass différent soit un mail différent.

mais si je comprend bien tu veux aussi t'assurer que le mail n'existe pas non plus dans d'autres enregistrements de ta base ?

il suffit de faire une autre requette sur le pseudo seulement puis une sur le mail

<?php
$hote='localhost';
$BD='test2';
$user='root';
$pass='';
	// Désactive l'émulateur de requêtes préparées (hautement recommandé)
     $pdo_options[PDO::ATTR_EMULATE_PREPARES] = false;
        // Active le mode exception
    $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
    // Indique le charset 
    $pdo_options[PDO::MYSQL_ATTR_INIT_COMMAND] = "SET NAMES utf8";
	
	//si tu utilises une variable $pdo_options il faut la définir avant 
	
try{
    $bdd = new PDO('mysql:host='.$hote.';dbname='.$BD, $user, $pass,$pdo_options);
      
}
  catch(Exception $e) // si on y arrive pas, le $e contient les erreurs
    {
        die('Erreur : '.$e->getMessage());
    }
                
                if(isset($_POST['submit'])){
					if(empty($_POST['pseudo']) OR empty($_POST['email']) OR empty($_POST['pass']) OR empty($_POST['pass2'])){
						echo '<p class="vide">Vous devez remplir tous les champs</p>'; // le formulaire n'est pas complet, on ne va pas plus loin !
                    }else{ 
						//recup des valeurs saisies
						$email = $_POST['email'];
						$loggin = $_POST['pseudo'];
						$passwd = $_POST['pass'];
						$passwd2 = $_POST['pass2'];
						
						if ($passwd != $passwd2) {
							echo 'Les mots de passe doivent être identiques'; // si les mots de passe sont différents, on le signale
						}elseif(!preg_match('#^[a-z0-9._-]{1,}@[a-z0-9._-]{2,}\.[a-z]{2,4}$#',$email)){ 					
							echo 'Vous avez entré une adresse mail invalide';
						}else{						
							// Si tout est OK ...                 
								//ATTENTION tu mets parfois mail, parfois email, sois plus rigoureux !
							 // préparation de la requête pour vérif si le pseudo pas déja
							$auth = $bdd->prepare('SELECT COUNT(*) FROM membres WHERE pseudo = :pseudo');
							// execution avec les paramètres 
							$auth->execute(array(':pseudo'=>$_POST['pseudo']));
							// s'il n'y a pas de résultat
							if ($auth->fetchColumn() < 1) {
									//verif si mail existe déja
								$auth2 = $bdd->prepare('SELECT COUNT(*) FROM membres WHERE email = :email');
								// execution avec les paramètres 
								$auth2->execute(array(':email'=>$_POST['email']));
								// s'il y a 1 résultat
								if ($auth2->fetchColumn() >0) {
									echo 'Le mail existe déja !';
								}else{								
								//si tout OK
								//on enregistre l'utilisateur dans la base de donnée
									$insertion_table = $bdd->prepare('INSERT INTO membres(pseudo, email, pass) VALUES(:pseudo, :email,:pass)')
									or exit(print_r($insertion_table->errorInfo())); // on prépare la requete SQL afin d'envoyer le message / pseudo. Si la requete échoue, on affiche l'erreur
									$insertion_table->execute(array('pseudo'=>$loggin, 'email'=>$email, 'pass'=>$passwd)); // on éxécute la requete
									if($insertion_table){
										//la requette s'est bien déroulée
										echo '<p>Vous êtes désormais enregistré(e) ! Et si on se connectait maintenant ?</p>';
										echo '<p><a href="connexion.php"><em>C\'est par ici</em></a></p>';
									}
							
							}else{ 
								echo 'Le pseudo existe déjà !'; 
							}
                        }
                    }
				}
				
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<style type="text/css">
#bloc_message{
    background: #FAFAFA;
    /*min-width:300px;
    min-height:200px;
    max-width:40%;*/
    border:1px solid #D8D8D8;
    border-radius: 0 10px 10px 0;
    padding-left: 10px;
    padding-top: 5px;
    border-left:6px solid #A4A4A4;

}
/*#bloc_message:nth-child(even){
    background:red;
}*/
.whitesmoke{background:whitesmoke;
    border:1px solid #A4A4A4;}
.vide{
    color:red;
}
.whitesmoke[value]{
    color:grey;
    font-style: italic;
}
#pseudo{
    /*border: 1px solid blue;*/
    margin-top :50px;
    min-width:300px;
    max-width:100%;
}
.heure{
    font-size: 10pt;
    display: inline-block;
    text-align: left;
    width:30%;
    font-style: italic;
    /*border:1px solid red;*/
}
.nom{
    text-align: right;
    display:inline-block;
    border:red;
    width:50%;
    position:relative;
    margin-left: 90px;
    /*border: 1px solid green;*/
}
</style>
</head>

<h4>Inscription: </h4>
				<!-- il ne faut pas mettre action="#" mais action="" tout simplement -->
                    <form method="post" action="" id="hide_form">
                    Login : <input type="text" name="pseudo" class="whitesmoke" value="" /><br /><br />
                    Mot de passe : <input type="password" name="pass" value="" /><br />
                    Retaper mdp : <input type="password" name="pass2" value="" /><br />
                    Email : <input type="text" name="email" value="" /><br />
                   
                    <input type="submit" value="envoyer" name="submit" />
                    </form>					
0
gintoxic Messages postés 524 Date d'inscription mardi 31 juillet 2007 Statut Membre Dernière intervention 7 avril 2016 10
27 août 2013 à 17:40
salut et encore merci, ce code me hante et j'avais eu cette idée mas sans savoir comment la poser dans le code... tu l'as fait !! :)
bon ceci dit est ce que je dois interdire deux pseudo diffrents ? perso, je pense que oui

pour répondre à ta question :
"mais si je comprend bien tu veux aussi t'assurer que le mail n'existe pas non plus dans d'autres enregistrements de ta base ? "
- tout à fait deux personnes ne peuvent avoir le meme mail contrairement au pseudo... quoique.... et au pass.

je te propose de tester ton code (bon j'ai participé un tout petit peu....) à cette adresse http://symposion.fr/form_loggin.php et me dire si tu voisquelque chose qui cloche ou si tout est ok...

en tout cas un grand merci à toi....

si tu suis toujours l'histoire, je vais maintenat passer au formulaire de connexion pour boucler la boucle entre l'inscription et les commentaires
----> les session à présent (mais là le Site du Zéro ne va pas beaucoup m'aider à moins que j'ai mal lu le cours....
0
gintoxic Messages postés 524 Date d'inscription mardi 31 juillet 2007 Statut Membre Dernière intervention 7 avril 2016 10
27 août 2013 à 20:20
bon et bien la connexion me semble faite mais là maintenant je reviens sur les commentaires et j'ai un souci.... il faut que je puisse autoriser les connectés à laisser des commentaires, or, ça n'est pas le cas il faut à chaque fois qu'ils rentre leur identifiants...
est ce que je dois vire le formulaire au bénéfice de celui de connexion ?
je suis un peu perdu dans l'espace de mes codes là

merci
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
28 août 2013 à 18:48
concernant le pseudo il vaut mieux que deux personne différentes n'aient pas le m^me sinon lorsqu'ils vont poster un commentaire on ne saura pas lequel l'a fait.

concernant la page commentaires;

il suffit de faire une page tout simple ans vérif à l'intérieur mais en mettant tout au début la verif de session
0
gintoxic Messages postés 524 Date d'inscription mardi 31 juillet 2007 Statut Membre Dernière intervention 7 avril 2016 10
28 août 2013 à 20:08
voici le petit morceau de code que j'ai testé mais qui ne fonctionne pas
else if(!isset(!$_SESSION['pseudo']){
                  header('location:connex.php');
                  exit;
                }
0
gintoxic Messages postés 524 Date d'inscription mardi 31 juillet 2007 Statut Membre Dernière intervention 7 avril 2016 10
28 août 2013 à 20:46
j'ai un souci avec mon code, mais je ne vois pas où... help me please...

if(isset($_POST['submit'])){
        if(!isset($_POST['pseudo']) AND !isset($_POST['message'])){
            echo '<p class="vide">Les champs sont vides</p>';
        } // le formulaire est vide, on ne va pas plus loin !
        //------------------------------------------------------------------------------------------------------
        else{
              // préparation de la requête de vérif de l'existence des données
              $auth = $connexion->prepare('SELECT COUNT(*) FROM membres WHERE pseudo = :pseudo');
              // execution avec les paramètres 
              $auth->execute(array(':pseudo'=>$_POST['pseudo']));
              // s'il n'y a pas de résultat
                if ($auth->fetchColumn() < 1) {
                    echo 'vous devez être enregistré(e) pour poster un commentaire <br /> <a href="connex.php"><em>Connexion</em></a>';
                }
                // else if(!isset(!$_SESSION['pseudo']){
                //   header('location:connex.php');
                //   exit;
                // }
					       else { // si la session est ouverte 
    					// insertion du commentaire
    					// on définit les logins / paramètres de la base de donnée
                  $insertion_table = $connexion->prepare('INSERT INTO commentaire(pseudo, message,date_enregistrement) VALUES(:pseudo, :message,:date_enregistrement)')
                  or exit(print_r($insertion_table->errorInfo())); // on prépare la requete SQL afin d'envoyer le message / pseudo. Si la requete échoue, on affiche l'erreur
                  $insertion_table->execute(array(':pseudo'=>$loggin, ':message'=>$mess, ':date_enregistrement'=>time())); // on éxécute la requete

                  $result= $connexion->query('SELECT * FROM commentaire ORDER BY date_enregistrement DESC'); // on séléctionne tous les champs de la table commentaires
                  while ($donnees = $result->fetch()){
                    echo '<div id="pseudo">';
                    echo '<div class="heure">'.date('l d m Y H:i', $donnees['date_enregistrement']).'</div>';
                    echo '<div class="nom">'.htmlentities($donnees['pseudo']).' a écrit : </div></div>';
                    echo '<div id="bloc_message">"'.nl2br(htmlentities($donnees['message'])).'"</div>';
                   // ici donc, on rajoute htmlentities (un dérivé de htmlspecialchars()) car cette fois ci, on sort le texte. De plus, on peut voir que " a écrit : " reviens car il sera rajouté à chaque passage de la boucle
                  }
                 }
               }
		        }

0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
29 août 2013 à 15:01
il faut procéder ainsi:
<?php
session_start();
//on teste si la variable de session initialisée lorsqu'il se connecte existe
if(!issset($_SESSION['pseudo']) || $_SESSION['pseudo'] ==""){
	//pas de session ouverte donc l'utilisateur ne s'est pas connecté
	//on le renvoie sur la page de connexion
	header('Location:connex.php');

}else{
	//variables de travail
	$reaffiche_formulaire=true;
	//l'utilisateur est bien connecté
	if(isset($_POST['submit'])){
        if(empty($_POST['pseudo']) AND empty($_POST['message'])){
			$reaffiche_formulaire=true;
            echo '<p class="vide">Les champs sont vides</p>';
        } // le formulaire est vide, on ne va pas plus loin !
        //------------------------------------------------------------------------------------------------------
        else{
			// on définit les logins / paramètres de la base de donnée
			try{
				$bdd = new PDO('mysql:host='.$hote.';dbname='.$BD, $user, $pass,$pdo_options);
      
			}
			catch(Exception $e) // si on y arrive pas, le $e contient les erreurs
			{
				die('Erreur : '.$e->getMessage());
			}
    		// insertion du commentaire   		
			
            $insertion_table = $connexion->prepare('INSERT INTO commentaire(pseudo, message,date_enregistrement) VALUES(:pseudo, :message,:date_enregistrement)')
                  or exit(print_r($insertion_table->errorInfo())); // on prépare la requete SQL afin d'envoyer le message / pseudo. Si la requete échoue, on affiche l'erreur
            $insertion_table->execute(array(':pseudo'=>$loggin, ':message'=>$mess, ':date_enregistrement'=>time())); // on éxécute la requete
			
			$reaffiche_formulaire=false; //on empeche le raffichage du formulaire
					//affichage des messages
            $result= $connexion->query('SELECT * FROM commentaire ORDER BY date_enregistrement DESC'); // on séléctionne tous les champs de la table commentaires
                while ($donnees = $result->fetch()){
					echo '<div id="pseudo">';
					echo '<div class="heure">'.date('l d m Y H:i', $donnees['date_enregistrement']).'</div>';
					echo '<div class="nom">'.htmlentities($donnees['pseudo']).' a écrit : </div></div>';
					echo '<div id="bloc_message">"'.nl2br(htmlentities($donnees['message'])).'"</div>';
					   // ici donc, on rajoute htmlentities (un dérivé de htmlspecialchars()) car cette fois ci, on sort le texte. De plus, on peut voir que " a écrit : " reviens car il sera rajouté à chaque passage de la boucle
                 }
            }
    }
	
	
	if($reaffiche_formulaire){
		//la tu mets ton code formulaire commentaires
	
	
	}
} //fin du if session


	
0
gintoxic Messages postés 524 Date d'inscription mardi 31 juillet 2007 Statut Membre Dernière intervention 7 avril 2016 10
29 août 2013 à 21:18
salut, qu'est-ce que tu appelle "code formulaire commentaires" stp ? est ce formulaire qui ert à entrer un commentaire ?

pour le moment j'ai un probleme d'affichage et je cherche d'où ça vient car aucune donnée n'est transmise du code à la base et de la base au code...
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
29 août 2013 à 21:38
oui c'est le formulaire qui sert a entrer le commentaire
0
gintoxic Messages postés 524 Date d'inscription mardi 31 juillet 2007 Statut Membre Dernière intervention 7 avril 2016 10
Modifié par gintoxic le 29/08/2013 à 22:00
bon beh je ne trouve pas mais il semble qu'il y ait un probleme....
http://symposion.fr/test_again2.php
0
gintoxic Messages postés 524 Date d'inscription mardi 31 juillet 2007 Statut Membre Dernière intervention 7 avril 2016 10
29 août 2013 à 22:01
je ne comprends pas l'utilité de la variable $reaffiche_formulaire...
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
29 août 2013 à 22:31
cette variable permet d'afficher ou non la partie formulaire

au départ elle est a true --> donc on affiche
si erreur de saisie elle rest à true --> donc on affiche

si tout ok concernant l'enregistrement dans la base
elle passe à false --> donc on n'affiche plus le formulaire mais la liste des commentaires

mets moi ton code
0
gintoxic Messages postés 524 Date d'inscription mardi 31 juillet 2007 Statut Membre Dernière intervention 7 avril 2016 10
29 août 2013 à 23:08
ok j'avais bien saisi alors...
session_start() semble empecher l'affichage de la page
<?php
                session_start();
//on teste si la variable de session initialisée lorsqu'il se connecte existe
if(!issset($_SESSION['pseudo']) OR $_SESSION['pseudo'] ==""){
  //pas de session ouverte donc l'utilisateur ne s'est pas connecté
  //on le renvoie sur la page de connexion
  header('Location:connex.php');
  exit;

}

else{
  //variables de travail
   $reaffiche_formulaire=true;
  //l'utilisateur est bien connecté
  if(isset($_POST['submit'])){
        if(empty($_POST['pseudo']) AND empty($_POST['message'])){
      $reaffiche_formulaire=true;
            echo '<p class="vide">Les champs sont vides</p>';
        } // le formulaire est vide, on ne va pas plus loin !
        //------------------------------------------------------------------------------------------------------
        else{
      // on définit les logins / paramètres de la base de donnée
          $hote='localhost';
          $BD='';
          $user='';
          $pass='';
      try{
        $bdd = new PDO('mysql:host='.$hote.';dbname='.$BD, $user, $pass);
      
      }
      catch(Exception $e) // si on y arrive pas, le $e contient les erreurs
      {
        die('Erreur : '.$e->getMessage());
      }
        // insertion du commentaire       
      
            $insertion_table = $connexion->prepare('INSERT INTO commentaire(pseudo, message,date_enregistrement) VALUES(:pseudo, :message,:date_enregistrement)')
                  or exit(print_r($insertion_table->errorInfo())); // on prépare la requete SQL afin d'envoyer le message / pseudo. Si la requete échoue, on affiche l'erreur
            $insertion_table->execute(array(':pseudo'=>$loggin, ':message'=>$mess, ':date_enregistrement'=>time())); // on éxécute la requete
      
      $reaffiche_formulaire=false; //on empeche le raffichage du formulaire
          //affichage des messages
            $result= $connexion->query('SELECT * FROM commentaire ORDER BY date_enregistrement DESC'); // on séléctionne tous les champs de la table commentaires
                while ($donnees = $result->fetch()){
          echo '<div id="pseudo">';
          echo '<div class="heure">'.date('l d m Y H:i', $donnees['date_enregistrement']).'</div>';
          echo '<div class="nom">'.htmlentities($donnees['pseudo']).' a écrit : </div></div>';
          echo '<div id="bloc_message">'.nl2br(htmlentities($donnees['message'])).'</div>';
             // ici donc, on rajoute htmlentities (un dérivé de htmlspecialchars()) car cette fois ci, on sort le texte. De plus, on peut voir que " a écrit : " reviens car il sera rajouté à chaque passage de la boucle
                 }
            }
    }
  
  
  if($reaffiche_formulaire){
    //la tu mets ton code formulaire commentaires
              echo '<form method="post">';
               echo '<h1>Commentaires</h1>';
                 echo '<p>Pseudo* : </label><input type = "text" name = "pseudo" /></p>';
                 echo '<p><textarea name="message" rows="7" cols="40">Bonjour,</textarea></p>';
                 echo '<input type="submit" value = "Envoyer" name="submit" />';
               echo '</form>';
  
  }
}//fin du if session
?>
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
Modifié par Alain_42 le 30/08/2013 à 14:09
$_SESSION['pseudo'] est bien la variable de session que tu initailise lors de la connexion ?

je viens de voir un pb

if(!issset($_SESSION['pseudo']) OR $_SESSION['pseudo'] ==""){


3 s a isset
0
gintoxic Messages postés 524 Date d'inscription mardi 31 juillet 2007 Statut Membre Dernière intervention 7 avril 2016 10
30 août 2013 à 18:25
alors là ce qui se passe :
on ne peut accéder à la page codée car elle redirige automatiquement vers connex.php...
je pense que je vais devoir faire le coup en 2 fois avec une page qui affiche les commentaires (la meme page pour chacun de tous mes textes et là je vais avoir besoin d'aide aussi...) et où est le formulaire et une page de code qui va insérer les commentaires dans la base...
qu'est ce que tu en penses ?
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
30 août 2013 à 21:35
je t'ai mis un MP
0
gintoxic Messages postés 524 Date d'inscription mardi 31 juillet 2007 Statut Membre Dernière intervention 7 avril 2016 10
30 août 2013 à 23:27
repondu :)
0