Jump to content

confondation des sessions


Recommended Posts

Bonjour,

j'ai mis en ligne mon site depuis peu mais j'ai un plus que très gros problème :

il y a une section membres, des news, et des commentaires de news.

Seul certains membres peuvent ajouter des articles. Ceci est défini par une entrée dans la base de donnée (0 pour les membres, 1 pour les redacteurs, 2 pour les modérateurs et 3 pour les administrateurs).

Donc j'ai des membres qui ajoutent des news et leur pseudo est ajouté automatiquement grace aux sessions.

Mais quand les membres veulent ajouter des commentaires il y a un problème :

le pseudo sont confondus. (par exemple x23 est confondu avec f65).

Si quelqu'un peut m'aider ...

mon code pour ajouter les commentaires :

Merci

<?

$titre = htmlentities(addslashes($_POST['titre']));
$contenu = htmlentities(addslashes($_POST['contenu']));
$id = htmlentities(addslashes($_GET['id']));
$date = time();

if (isset($id))
{
if (isset($_SESSION['rang']))
{
if ($_SESSION['rang'] == 0 OR $_SESSION['rang'] == 1 OR $_SESSION['rang'] == 2 OR $_SESSION['rang'] == 3)
{
 if (preg_match("!^[0-9]{1,}$!", $id))
 {
  if (!empty($_POST['contenu']))
  {
  include("admin/connection.php");
  
  $pseudo = $_SESSION['pseudo'];
  $signature = $_SESSION['signature'];
  $avatar = $_SESSION['avatar'];
  $rang = $_SESSION['rang'];
  mysql_query("INSERT INTO news_commentaires VALUES('', '$id', '$titre', '$contenu', '$pseudo', '$signature', '$date', '$avatar', '$rang')");
  echo 'Votre commentaire a bien été ajouté. <a href="aff_news.php?id='. $id. '">Retour</a>';
  }
  else
  {
  echo '<div class="membres">Vous n\'avez pas rempli le champ "contenu".</div>';
  }
 }
}
else
{
echo '<div class="membres">Vous devez vous logé pour ajouter un commentaire.</div>';
}
}
else
{
echo '<div class="membres">Vous devez vous logé ajouter un commentaire.</div>';
}
}
else
{
echo '<div class="membres">C\'est pas bien de fouiller dans les répertoires !!!</div>';
}

?>

Link to comment
Share on other sites

Je ne me suis pas penché sur ton probleme de confondationnementaisonnage de session mais j'ai relevé quelques trucs a revoir dans ton code.

Pour déterminer si une chaine de caracteres est de type numerique il y a la fonction is_numeric qui sera bien plus rapide et moins gourmande que l'utilisation d'une expression reguliere. preg_match("!^[0-9]{1,}$!", $id)

http://fr3.php.net/manual/fr/function.is-numeric.php

Tu peux remplacer :

$_SESSION['rang'] == 0 OR $_SESSION['rang'] == 1 OR $_SESSION['rang'] == 2 OR $_SESSION['rang'] == 3

par l'utilisation de in_array : http://fr3.php.net/manual/fr/function.in-array.php

if (in_array($_SESSION['rang'] , array(0 , 1 , 2 , 3)))

Link to comment
Share on other sites

peut etre en mettant tes variables dans la requete sous la forme ' ".$toto." '

Ca reste une supposition....

Oui mais si elles sont dans une variables $toto par exemple cette variable ne se transmettra pas automatiquement à moins que tu veuille dire que sur chaque page où j'ai besoin de mes sessions je met la session dans une autre variable.

afbilou >>>Je connaissai pas :transpi:.

NiTrOuS >>> Oui mais je savais pas comment on disait alors j'ai pris ce qui me passait par la tête :transpi:

Link to comment
Share on other sites

bah quand je fais le print_r sur la variable $_SESSION['pseudo'] ça m'affiche le pseudo jusqu'a ce que ça se confonde.

Je viens à peu près de voir d'où vient le problème sur mes pages :

mon pseudo est x et quand je vais sur la page liste_previews.php il y a une preview ajoutée par y et c'est à partir de ce moment là que le pseudo change mais je vois vraiment pas d'où ça peut venir.

Je met les codes de liste_previews.php :

<?

include("admin/connection.php");

$requete = mysql_query("SELECT * FROM previews ORDER BY id DESC");

echo '<h1>Previews :</h1>';

while ($affichage = mysql_fetch_array($requete))
{

$id = $affichage['ID'];
$support = $affichage['support'];
$titre = $affichage['titre'];
$pseudo = $affichage['pseudo'];

echo '<img src="images/'. $support .'"> <a href="aff_previews.php?id='. $id .'">'. $titre .'</a> Par '. $pseudo .'';

}

?>

et de login.php (c'est un petit menu à droite où il y a écris son pseudo ...)

<?

if ($_SESSION['rang'] == 0 OR $_SESSION['rang'] == 1 OR $_SESSION['rang'] == 2 OR $_SESSION['rang'] == 3)
{
$pseudo = stripslashes($_SESSION['pseudo']);
$avatar = $_SESSION['avatar'];
echo 'Bienvenue '. $pseudo .'<br /><br />
<img src="images/avatar/'. $avatar .'.gif"><br /><br />
<a href="modif_membre_info.php">Modifier mon compte</a><br />
<a href="deconnection.php">Me déconnecter</a><br /><br />';

if ($_SESSION['rang'] == 1 OR $_SESSION['rang'] == 2 OR $_SESSION['rang'] == 3)
{
echo 'Mes droits :<br />';
 if ($_SESSION['rang'] == 1)
 {
 echo '<a href="choix_article.php">Ajouter un article</a><br /><br />';
 }
 elseif ($_SESSION['rang'] == 2)
 {
 echo '<a href="choix_article.php">Ajouter un article</a><br /><br />';
 }
 elseif ($_SESSION['rang'] == 3)
 {
 echo '<a href="choix_article.php">Ajouter un article</a><br />';
 echo '<a href="panneau_de_configuration.php">Panneau de configuration</a><br /><br />';
 }
}
}
else
{
echo 'Vous devez vous logé pour accéder à cette page';
}

?>

si quelqu'un a une idée qu'il n'hésite pas :eeek2:

Link to comment
Share on other sites

le code de valid_connection.php :

<?

if (isset($_POST['pseudo']) AND isset($_POST['pass']))
{
if (!empty($_POST['pseudo']) AND !empty($_POST['pass']))
{
 include("admin/connection.php");

 //Variables : pseudo et mot de passe
 $pseudo = addslashes($_POST['pseudo']);
 $pass = addslashes($_POST['pass']);

 //Authentification
 $requete = mysql_query("SELECT * FROM membres WHERE pseudo='$pseudo'") or die(mysql_error());
 $authentification = mysql_fetch_array($requete);
 
 //ID du membre
 $id_membre = $authentification['ID'];
 
 //CORRESPONDANCE RANG :
 //0 : membre
 //1 : redacteur
 //2 : modérateur
 //3 : administrateur

 if ($pseudo == $authentification['pseudo'] AND $pass == $authentification['mot_de_passe'])
 {
 
 //SESSION : Pseudo
 $_SESSION['rang'] = $authentification['rang'];
 $_SESSION['pseudo'] = $pseudo;
 $_SESSION['signature'] = $authentification['signature'];
 $_SESSION['rang'] = $authentification['rang'];
 $_SESSION['avatar'] = $authentification['avatar'];
 
 echo 'Bienvenue '. $pseudo .'. Votre ID est '. $id_membre .'';

 }
 else
 {
 echo 'Pseudo ou mot de passe incorrecte';
 }
}
else
{
echo 'Vous n\'avez pas remplis tout les champs';
}
}
else
{
echo 'C\'est pas bien de se balader dans les répertoire comme ça !!!;-D';
}

?>

et j'essai tout de suite de changer le nom des variables

Link to comment
Share on other sites

register_globals = off çà t'oblige à utiliser la syntaxe $_POST["variable"] par exemple plutot que $variable.

Et c'était çà le problème dans ton cas, car visiblement ils sont à on.

Donc quand tu fais

$_SESSION["pseudo"] ou $_POST["pseudo"] ou $pseudo c'est en fait une seule et même variable, d'où la "confondation" :yes:

C'est en effet dans php.ini que çà se passe mais je pense que tu peux les desactiver via un script placé à la racine de ton site... demande à google moi je ne sais pas j'ai la chance de bosser sur des vrais serveurs en full access :zarb:

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...