8791 sujets

Développement web côté serveur, CMS

bonjour,

J'ai une page php qui 'génère' mes articles auquelles je désire permettre l'ajout de commentaire au visiteur identifié..

un exemple .

le formulaire à droite vérifie l'identité du visiteur s'il veut poster ( vous pouvez essayer avec "admin" , "admin") .
Si l'identification est ok , le code insére la partie 'ajout de commentaire' en bas de la page ....

Malheureusement mon test d'insertion ne fonctionne que lorsque on "recharge à nouveau " la page après une identification réussie ...! Smiley langue

le code d'insertion :

<!-- pour poster il faut etre identifier  -->
<?php 
// si les identifiant de session nom  n'existe pas c'est que l'utilisateur 
// n'est pas identifié et donc ne peut poster
// on N'AFFICHERA PAS le formulaire d'ajout de texte
if(!isset($_SESSION['nom'])) {
	echo 'pour poster vous devez vous ';
	?><a href="#identification"> identifiez</a><?php
}
// si existe , c'est que utilisateur est identifié ==> affice le 
// fomulaire d'ajout de commentaire 
else {
	echo 'utilisateur : ' . $_SESSION['nom'];
	?><!-- Partie Html -->
	<form action="" method="post">
	 <p>
	 <label for="textelibre">Ajouter un commentaire :</label>
	 <textarea name="textelibre" value=""></textarea>
	 </p>
	 
	 <p>
	 <input type="submit" name="ajout" value="ajouter"/>
	 </p>
	</form><!-- fin partie Html -->
	<?php // retour PHP

}   
  ?>         

il ne prend en compte la varaible $_SESSION['nom'] qu'après un 'reload' , alors que cette varaible existe puisqu'elle affiche le message "ok registration: vous etes correctement identifie" (j'utilise également un test if(!isset ...)

Dans le flux ce code se trouve à la suite "ajouter un commentaire" (ce qui a peut-etre son importance)

Code d'authentification :

<?php
// initialisation de la session
//session_start();

// si le formulaire n'a pas été envoyé => $_POST n'existe pas 
// dond si n'existe pas on affiche le formulaire
if(!isset($_POST['send'])) {
	// on affiche 
?><!-- passage au code HTML -->

  <form action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" method="post">
   <p>
   <label for="nom">Pseudo : 
     <input name="nom" type="text"/>
   </label>
   </p>
   <p>
   <label for="password">Mot de Passe :
     <input name="password" type="text"/> 
   </label>
   </p>
   
   <!-- soummission du formulaire -->
   <p>
     <input type="submit" name="send" value="s'identifier"/>
   </p>
  </form>

<?php 
// l'utilisateur peut s'etre identifier dans un autre page
}
else {
// retour PHP
// sinon (si formulaire a déjà été envoyé et donc que $_POST['send'] existe

// on peut vérifier les informations entrées par l'utilisateur avec 
// celle contenue dans la base de données.

// recuperation des donnees
$nom = addslashes($_POST['nom']);
$motdepasse = $_POST['password'];

// string requete a la base 
$requete = "SELECT motdepasse".
           "FROM authentification".
           "WHERE nom='$nom'";
           
// APPEL DE CONNECTION 
$dbhost = 'localhost';
$dblogin = '*******';
$dbpass = '********';

$dbname = 'Commentaire';

// connection au serveur
$con = mysql_connect($dbhost, $dblogin, $dbpass) or die ("ipmosible de se connecter au serveur");

// connection a la base 
mysql_select_db($dbname, $con) or die("impossible de se connecter a la base");

$req = mysql_query("SELECT motdepasse FROM authentification WHERE nom='$nom'") or die ("erreur sql syntaxe");

$resultat = mysql_fetch_array($req);

// traitement des resultat
if($motdepasse != NULL && $resultat['motdepasse'] == $motdepasse) {
	// le mot de passe est valide et l'utilisateur est identifié
    // on change id session
    session_regenerate_id();
    
    // sauvegarde des infos des varaibles de sessions
    $_SESSION['nom'] = $nom;
	echo "ok registration: vous etes correctement identifie";
} // fin de if
	else {
		// pas ok
        echo "utilisateur inconnu ";
	} //fin de else
} // fin de ELSE
?>   

... je compte scinder les instructions en fonction par la suite Smiley lol

si vous avez une idée du 'pourquoi' je dois faire un "reload" ..!??
Merci d'avance .
Modifié par kzone (15 Jun 2007 - 22:16)
Salut kzone Smiley smile ,

je pense que le problème vient de ce que ton formulaire d'identification fait appel à la même page objet_event.php : tu vérifies que le login / password sont bons puis tu crées ta session mais le session_start crée un cookie (PHPSESSID) qui ne sera pas disponible (comme n'importe quel autre cookie) avant un reload de ta page Smiley decu

La solution : ton formulaire doit "pointer" vers un autre script php (par exemple verif.php) qui vérifie donc les login / password. Si c'est OK il crée la session (session_start) et les variables de session ($_SESSION['nom'] = $nom; ...). Et enfin il se termine par un header("Location: objet_event.php"). Comme ça ton cookie est bien effectif et tes variables également Smiley langue

A+
..... de retour !!

merci Heyoan ,

a écrit :

La solution : ton formulaire doit "pointer" vers un autre script php (par exemple verif.php) qui vérifie donc les login / password. Si c'est OK il crée la session (session_start) et les variables de session ($_SESSION['nom'] = $nom; ...). Et enfin il se termine par un header("Location: objet_event.php"). Comme ça ton cookie est bien effectif et tes variables également langue


c'est un peu ce à quoi j'avais pensé voyant mon script ne pas fonctionner comme je le voulais ...
a écrit :


je pense que le problème vient de ce que ton formulaire d'identification fait appel à la même page objet_event.php


en fait la page objet_event.php n'est qu'une page d'appel qui rassemble ce dont elle a besion pour créer l'affichage :

<?php
$path = ($_SERVER["PHP_SELF"]);
$repertoire =dirname($path);
$fichier = basename($path);
$racine_fichier = basename($path,'.php');
$sub= explode('_',$racine_fichier);
while (list($key,$val) = each($sub)) {
	$title.=$val." ";
}

$article = $racine_fichier.'.inc.php';
$print = ($repertoire."/".$racine_fichier.".inc.php");
include($_SERVER['DOCUMENT_ROOT'] . "/Templates/article.inc.php");
?>

toutes mes articles se servent de ce modèle .... l'article en lui-même est créer dans un page .inc.nomdufichier ... je peux ainsi l'écrire sans me soucier du reste !

Je vais suivre ton conseil et séparer "les fonctions" (verif.php, senregister.php, ...ect !!)

.. au "boulot" Smiley cligne