kelkun789 Posted May 25, 2005 Share Posted May 25, 2005 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 More sharing options...
Magnus63 Posted May 26, 2005 Share Posted May 26, 2005 peut etre en mettant tes variables dans la requete sous la forme ' ".$toto." ' Ca reste une supposition.... Link to comment Share on other sites More sharing options...
afbilou Posted May 26, 2005 Share Posted May 26, 2005 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 More sharing options...
NiTrOuS Posted May 26, 2005 Share Posted May 26, 2005 Une petite remarque sur le titre: je suis pas sur que "confondation", ce soit francais. J'aurais mis "confusion" à ta place Link to comment Share on other sites More sharing options...
kelkun789 Posted May 26, 2005 Author Share Posted May 26, 2005 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 . NiTrOuS >>> Oui mais je savais pas comment on disait alors j'ai pris ce qui me passait par la tête Link to comment Share on other sites More sharing options...
wicked Posted May 26, 2005 Share Posted May 26, 2005 fait un print_r des variables de session et tu devrais vite voir ce qui ne va pas... Link to comment Share on other sites More sharing options...
kelkun789 Posted May 27, 2005 Author Share Posted May 27, 2005 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 Link to comment Share on other sites More sharing options...
wicked Posted May 27, 2005 Share Posted May 27, 2005 hm... Register_globals on ou off ? sinon c'est simple, dans le doute change le nom de la variable $posteur sur liste_previews.php et $monpseudo sur login.php Link to comment Share on other sites More sharing options...
an0nyme Posted May 28, 2005 Share Posted May 28, 2005 tu peux poster le code te ton formulaire de login stp? sinon ,essaye le changement de nom come dit plus haut Link to comment Share on other sites More sharing options...
kelkun789 Posted May 28, 2005 Author Share Posted May 28, 2005 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 More sharing options...
wicked Posted May 29, 2005 Share Posted May 29, 2005 Et je te conseil vivement de vérifier que REGISTER_GLOBALS est OFF Link to comment Share on other sites More sharing options...
kelkun789 Posted May 29, 2005 Author Share Posted May 29, 2005 c'est quoi REGISTER_GLOBALS ??? si c'est dans php.ini je peux pas y accéder (suis sur free). Sinon j'ai changer le nom de mes variables et c'est bon. Un grand merci à tous !!! Link to comment Share on other sites More sharing options...
wicked Posted May 29, 2005 Share Posted May 29, 2005 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" 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 Link to comment Share on other sites More sharing options...
kelkun789 Posted May 29, 2005 Author Share Posted May 29, 2005 ok merci beaucoup pour l'information. Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.