SESSION['id'] prend la valeur de 0

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : SESSION['id'] prend la valeur de 0

par Snipy » 16 mars 2007, 22:45

Merci des réponses, je prend note et je met le sujet comme résolu

par Ryle » 16 mars 2007, 22:21

la différence entre ces deux opérateurs est de prendre ou non le type de variable en considération. Ainsi "1" est une chaine (String) tandis que 1 est un nombre (int)
Si tu les compares simplement ("1"==1), le test sera vrai, la valeur est la même. En revanche si tu compares ('1'===1) le test sera faux car l'un est un nombre et l'autre une chaine de caractère :)

C'est très utile en php avec les booléens. En effet, php interprête 0 et FALSE de la même manière, alors que tu as parfois besoin de distinguer les deux.
Un exemple simple est la fonction strpos() qui recherche si une chaine est présente dans une autre, et retourne l'index à partir du quel la chaine est trouvée et FALSE si la chaine n'est pas trouvée. Si tu compares simplement les valeurs (strpos(...)==FALSE) et que le texte cherché est au début de la chaine, la fonction retourne 0, php l'interprète comme faux et considère le test comme vrai alors que la chaine a pourtant bien été trouvée. Si tu compares les types en plus (strpos(...)===FALSE), la fonction retourne toujours 0, mais php considère que c'est un nombre et pas un booléen et considère le test comme faux, la chaine ayant été trouvée.


Pour la requête SQL, elle est très bien, ma remarque portait juste sur le fait qu'à la fin de celle-ci tu concatènes une chaine vide :
'SELECT ... WHERE id='.$_SESSION['id'].''
Ce n'est qu'un détail, mais comme cela ne sert à rien, autant la virer. Ca allègera le code et surtout rendra plus lisible :)
'SELECT ... WHERE id='.$_SESSION['id'] 

par Snipy » 16 mars 2007, 18:29

Pour le == erreur d'inattention :shock:
Par contre quel est la différence entre un == et === ?

Concernant la requete, avec toutes les façons de l'écrire je m'y perd un peu, pourrais tu me conduire vers uen page expliquant quel est la méthode la plus efficace. Car je met tantot une façon tantot l'autre (un peu au feeling :roll: )

Pour mon problème, grâce à la méthode j'ai situé le problème et j'ai pu le résoudre.
En fait le GET['id'] n'existait pas toujours, et de plus il faisait interférence avec le SESSION('id'] va savoir pourquoi ?

MErci encore de votre aide

[je met sujet résolu des qu'on m'a apporté des précisions sur les questions annexe que j'ai posé en début de post] :D

par Ryle » 16 mars 2007, 16:08

Affiches ta variable en divers endroit de ta page, tu verras à partir d'où est ce que tu perds ta valeur, ca te permettra de savoir ce qui le provoque :)

Sinon quelques remarques :

l'opérateur de comparaison est ==, si tu n'en mets qu'un, c'set une affectation, si l'index 'logged' existe en session, cette condition sera toujours vraie quelque soit sa valeur (qui deviendra alors TRUE) :
if (isset($_SESSION['logged']) && $_SESSION['logged']= true) 
Ta requête SQL est une chaine de caractère, il est inutile d'y ajouter une chaine vide à la fin :
'SELECT id, pseudo, email, inscrit FROM membres WHERE id='.$_SESSION['id'].''

@xs_stef : tu peux mettre le session_start() n'importe où dans ta page, tu moment que tu le fais avant de faire appel à $_SESSION :) Il est juste plus commode de le placer dès le début :)

par Snipy » 16 mars 2007, 14:29

Bien entendu :D
Mais mon session start est inclus grace à la page haut.php inclus des la premiere ligne.

par xs_stef » 16 mars 2007, 14:25

Salut,
ne faut-il pas mettre session_start(); juste après <?php ?

SESSION['id'] prend la valeur de 0

par Snipy » 16 mars 2007, 14:10

Bonjour à tous,
Voila j'ai un problème avec une de mes variables session, en effet lors de l'affichage de la page voirprofil.php (ci dessous) ma variable SESSION['id'] prend la valeur de 0 de ce fait l'exécution du script devient impossible..

Si quelqu'un avait une idée de l'origine du problème il m'aiderait énormément.

Voila le morceau de code en question,
à savoir le problème arrive lorsque la case 'modifier prend effet (voir code)
<?php 
include("../haut.php");
include("../en_tete.php");
include("../barre_menu.php");
include("../menu.php");

if (isset($_SESSION['logged']) && $_SESSION['logged']= true)
{
	//Inclusion du fichier contenant les identifiants de connexion à la base de données.
	

	//On récupère la valeur de nos variables passées par URL
	$action = $_GET['action'];
	$id = (int) $_GET['id'];

	//On regarde la valeur de la variable $action
		switch($action)
		{ 
		//Si c'est "consulter"
		case "consulter":
		/
           ------------------------------------------------------------------------
		
		//Si on choisit de modifier son profil
		case "modifier":
		      //On prend les infos du membre
			  
			
			$requete2 = mysql_query('SELECT id, pseudo, email, inscrit FROM membres WHERE id='.$_SESSION['id'].'') or die(mysql_error());	
			if ($data2 = mysql_fetch_assoc($requete2))
			  {
		      //On vérifie que le membre ait le droit de modifier le profil

		      ?>
		      <h1>Modifier son profil</h1><h2><br /><br />
		      <form method="post" action="modifprofil.php" enctype="multipart/form-data">
		       

		      <fieldset><legend>Identifiants</legend>
		      Pseudo : <?php echo'<strong>'.$data2['pseudo'].'</strong>'?><br />       
		      <label for="password">Nouveau mot de Passe :</label>
		      <input type = password name="password" id="password" /><br />
		      <label for="confirm">Confirmer le mot de passe :</label>
		      <input type = password name="confirm" id="confirm"  />
		      </fieldset>

		      <fieldset><legend>Contacts</legend>
		      <label for="email">Votre adresse E_Mail :</label>
		      <input type = "text" name="email" id="email"
		      value="<?php echo''.$data2['email'].''?>" /><br />
 
		      </fieldset>

		              
		      <input type="submit" value="Modifier son profil" /></form>
		      <?php
		      }
		      else echo'Une erreur s est produite, veuillez réessayer';
		break;

		default; //Si jamais c'est aucun de ceux là c'est qu'il y a eu un problème :o
		echo'<h2>Cette action est impossible</h2>';
		} //Fin du switch
}

else
{
  echo 'Erreur : vous devez être connecté pour accéder à cette page !<br /> Allez <a href="../index.php">ici</a> pour vous connecter.';
}

include("bas.php");

?>
:: Merci d'avance ::