Variable SESSION, gros problème!

SniP_78
Invité n'ayant pas de compte PHPfrance

13 sept. 2007, 16:21

Bonjour a tous, je ne comprend pas, tous marcher nikel, et d'un coup un gros problème est apparu, dans le formulaire de connection, Je rentre mon mot de passe, mon login, je me connect, le message qui dit "Bonjour SniP_78" s'affiche, je change de page et plus de session !!!

J'ai chercher sur tous les forum et je n'est rien trouvé qui ma aider a régler mon problème.

Page de connection:
<code type="php">
<?php 
$pseudo = htmlentities($_POST["pseudo"]);
$mdp = htmlentities($_POST["mdp"]);
 
$affichagetitre = "Connection de l'utilisateur";
 
 
$requete="SELECT * FROM user WHERE login = '".$pseudo."'"; // requête 
  $result = mysql_query($requete, $connection) or die($requete . " - " . mysql_error());
 
  //si la requête s'est bien pass&eacute;e
  if(mysql_num_rows($result) > 0)
{ 
  
  while($data = mysql_fetch_array($result)) 
  { 
  if ($data['mdp'] == $mdp)
  {
 
  $_SESSION['pseudo'] = $data['login'];
  $_SESSION['iduser'] = $data['id'];
    if ($data['admin'] == "true")
  {
    $_SESSION['admin'] = "true";
  }
  $today = date("j/n/Y - H:i:s");
  $requete = "UPDATE `user` SET `derniereconnect` = '".$today."'  WHERE id = '".$_SESSION['iduser']."'";
$result = mysql_query($requete, $connection) or die($requete . " - " . mysql_error());
  $affichage = "<br> <br> Vous voila maintenent connecter sur ".$_SESSION['pseudo'].".";
$connecteformhide = 'false';
$member = "true";
}
  else
{ 
$affichage =  "Mot de passe non valide"; 
}
  } 
  
   
}
  else
{ 
$affichage =  "Nom d'utilisateur non valide"; 
}
?>
<meta http-equiv="refresh" content="5;URL=accueil.astucepourtous.html" />
</code>
Haut de toute les page:
<? 
@session_start();
 
 
if($_SESSION["iduser"] == "" and $_SESSION["pseudo"] == "")
{       
 
$member = "false";
}
else
{
$member = "true";
}
 
?>

Voila un exemple qui montre qu'il y'a vraiment un problème:

http://www.astucepourtous.fr/test.php
<?
session_start();
 
$_SESSION["iduser"] = "10";
$_SESSION["pseudo"] = "Test";
 
 
?>

http://www.astucepourtous.fr/test2.php
<?
session_start();
 
 
 
echo $_SESSION["pseudo"].$_SESSION["iduser"];
?>

(je présise que je suis chez 1and1)


Voila, je ne comprend pas, page pour tester:

http://www.astucepourtous.fr/ (Login: x244 Mot de passe: x244 )

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

13 sept. 2007, 16:39

Euh pour ma part lorsque je lance test.php puis test2.php j'ai rien qui s'affiche...

et si tu virais le @ devant le session_start() ("un message d'erreur étant fait pour indiquer les erreurs" - dixit ouckileou :)), que tu évitais d'utiliser les short open tags "<?" et leur préférais un "<?php" normal ?

Je ne connais pas 1&1, mais ne faut il pas créer un dossier "sessions" à la racine du site comme chez beaucoup d'autres hébergeurs ?
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

ViPHP
ViPHP | 3607 Messages

13 sept. 2007, 16:47

HS: "commantaire" => "commentaire"

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

13 sept. 2007, 16:53

HS: à ce compte là.. "plain d'astuces" => "plein d'astuces", "ect." => "etc.", "Membres inscrit" => "Membres inscrits", .... :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

ViPHP
ViPHP | 3607 Messages

13 sept. 2007, 16:58

HS: toi non plus tu sais pas quoi faire de ton aprem :langue: ?

Mammouth du PHP | 693 Messages

13 sept. 2007, 17:06

Il me semble que session_start() n'est aps dans la page de connexion.

Invité
Invité n'ayant pas de compte PHPfrance

13 sept. 2007, 17:43

Euh pour ma part lorsque je lance test.php puis test2.php j'ai rien qui s'affiche...

et si tu virais le @ devant le session_start() ("un message d'erreur étant fait pour indiquer les erreurs" - dixit ouckileou :)), que tu évitais d'utiliser les short open tags "<?" et leur préférais un "<?php" normal ?

Je ne connais pas 1&1, mais ne faut il pas créer un dossier "sessions" à la racine du site comme chez beaucoup d'autres hébergeurs ?

C'est sa le problème, les page test.php, le code est pas faut et sa ne marche pas, les session ne marche pas sur l'hébergement alors qui y'a une semaine tous marché et je n'est rien touché depuis.

J'ai fait tous ce que tu a dit, et rien ne change, je ne comprend pas.

ps1: Les faute d'orthographe je les corrigerai après
ps2: Je répète que toute les page de mon site on comme première ligne:
<? 
@session_start();
 
 
if($_SESSION["iduser"] == "" and $_SESSION["pseudo"] == "")
{       
 
$member = "false";
}
else
{
$member = "true";
}
 
?>

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

13 sept. 2007, 18:02

Essaye d'ajouter un phpinfo() dans une de tes pages de test et regarde ce qui est indiqué au niveau du modules des sessions... on y verra peut être quelque chose ?
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

SniP_78
Invité n'ayant pas de compte PHPfrance

13 sept. 2007, 18:23

Voila la page avec le PHP info:

http://www.astucepourtous.fr/test3.php

Invité
Invité n'ayant pas de compte PHPfrance

13 sept. 2007, 20:12

Personne ne peut m'aider?

Mammouth du PHP | 19672 Messages

13 sept. 2007, 20:54

Sois discipliné dans ta manière de coder et tu auras moins de mal à débugguer.

Petit ménage : le second script définissant si la variable $member doit être à true ou false :
<?php
session_start();

$member = (empty($_SESSION["iduser"]) || empty($_SESSION["pseudo"])) ? false : true;
?>
Tu noteras qu'on évite les short_open_tag(). D'après ton phpinfo, ce n'est pas indispensable, mais c'est une sécurité de plus.

Et on VIRE le "@" devant le session_start() : s'il y a une erreur, il faut la voir et le savoir pour la corriger, pas la masquer avec un cache-misère.

Le premier script maintenant : on aligne le code proprement et on oublie pas de relancer aussi la session. Et on vire les balises <code> qui n'on pas grand chose à faire là :
<?php 
session_start();
$pseudo = htmlentities($_POST["pseudo"]);
$mdp    = htmlentities($_POST["mdp"]);

$affichagetitre = "Connection de l'utilisateur";


$requete="SELECT * FROM user WHERE login = '".$pseudo."'"; // requête
$result = mysql_query($requete, $connection) or die($requete . " - " . mysql_error());

//si la requête s'est bien pass&eacute;e
if(mysql_num_rows($result) > 0)
{
    while($data = mysql_fetch_array($result))
    {
        if ($data['mdp'] == $mdp)
        {

            $_SESSION['pseudo'] = $data['login'];
            $_SESSION['iduser'] = $data['id'];
            if ($data['admin'] == "true")
            {
                $_SESSION['admin'] = true;
            }
            $today = date("j/n/Y - H:i:s");
            $requete = "UPDATE `user` SET `derniereconnect` = '".$today."'  WHERE id = '".$_SESSION['iduser']."'";
            $result = mysql_query($requete, $connection) or die($requete . " - " . mysql_error());
            $affichage = "<br> <br> Vous voila maintenent connecter sur ".$_SESSION['pseudo'].".";
            $connecteformhide = false;
            $member = true;
        }
        else
        {
            $affichage =  "Mot de passe non valide";
        }
    }


}
else
{
    $affichage =  "Nom d'utilisateur non valide";
}
?>
<meta http-equiv="refresh" content="5;URL=accueil.astucepourtous.html" />
Petit détail : on met $var = true et non $var = "true" : c'est un booléen, pas une chaine de caractère. Le seul auquel j'ai laissé les guillemets, c'est celui en provenance de la base de données.

Teste déjà ça.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

SNiP_78
Invité n'ayant pas de compte PHPfrance

15 sept. 2007, 11:29

Désolé mais sa beug toujours, sa a rien changé.

Moi je pense pas que le problème vienne du script mais de l'hebergeur et des session, quoi je ne comprend pas mais tous marcher nickel avec ce code, sa marché plus du jour au lendemain sans même que je touche au code.

Merci de me dire pourquoi si quelqu'un a encore une idée pour m'aider.

ViPHP
ViPHP | 1996 Messages

15 sept. 2007, 12:09

J'ai eu un problème équivalent avec mon éditeur Php qui me m'était des caractères avant <?php.
As tu récemment changé d'éditeur ?
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

SniP_78
Invité n'ayant pas de compte PHPfrance

15 sept. 2007, 12:26

Oui, la je suis sur Notepad++ et avan sur Adobe Dreamweaver CS3, je vais regarder si sa vien de sa

Invité
Invité n'ayant pas de compte PHPfrance

15 sept. 2007, 12:29

Rien ne change