Problème depuis passage php 5.2 à 5.5

Petit nouveau ! | 4 Messages

20 mars 2016, 11:34

Bonjour,


Le programme que j'ai tant bien que mal créé il y a un an ne fonctionne plus en php 5.5.
Ce programme sert aux membres de mon club cyclo. Ils pouvaient se loguer et ensuite encoder leurs kilomètres dans une base de données. La connexion se fait toujours mais le pseudo semble ignoré. Résultat l'encodage se fait mais sans le pseudo.

Ci-dessous le script en question:
<?php
/* il faut demarrer la session*/
session_start();
 
if (empty($_SESSION['id'])) //les membres connectes ne peuvent pas s'inscrire
{
    /* il faut que toutes les variables du formulaire existent*/
    if(isset($_POST['pseudo']) && isset($_POST['pass']))
    {
        /*il faut que tous les champs soient renseignes*/
        if($_POST['pseudo']!="" && $_POST['pass']!="")
        {
            /*connexion a la BDD*/
            try
            {
               $bdd = new PDO('mysql:host=mysql.celeonet.fr;dbname=bikers_membres', 'pseudo', 'pass');
            }
            catch (Exception $e)
            {
	        die('Erreur : ' . $e->getMessage());
            }
 
            /*on crypte le mot de passe pour faire le test*/
            $passhache = sha1($_POST['pass']);
 
            /* on verifie qu'un membre a bien ce pseudo et ce mot de passe*/
            $req = $bdd->prepare('SELECT * FROM challenge_membre WHERE pseudo = :pseudo AND pass= :pass ');
	    $req->execute(array('pseudo'=> $_POST['pseudo'], 'pass'=> $passhache));
	    $resultat=$req->fetch();
 
            /*s'il n'y a pas de resultat, on renvoie a la page de connexion*/
            if(!$resultat)
	    {
		
		header('Location: login_defect.php');
	    }
	    else
	    {
                /* on demarre la session */
                session_start();
 
               /* on cree les variables de session du membre qui lui serviront pendant sa session*/
               $_SESSION['id']= $resultat['id'];
	       $_SESSION['pseudo']= $pseudo;
	       $_SESSION['mail']= $resultat['email'];
include("introchallenge.php");
                /*on renvoie sur la page d'accueil*/
                header('Location: index.php');              
            }
        }
        else
        {
           echo "Il faut remplir tous les champs"; 
        }
    }
    else
    {
        echo "Une erreur s'est produite";
    }
}
else
{
     echo "Vous n'avez pas le droit d'acceder a cette page";
}
?>

Merci d'avance pour votre aide.

Mammouth du PHP | 2703 Messages

20 mars 2016, 15:37

$_SESSION['pseudo']= $pseudo;
mais $pseudo n'est pas défini avant cette ligne.

Petit nouveau ! | 4 Messages

20 mars 2016, 16:24

Bonjour et merci de m'aider.

En fait il y a un formulaire login.php qui défini $pseudo
Je précise que ce script fonctionne sur un serveur en 5.2 et ne fonctionne plus sur un serveur en 5.5.

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

21 mars 2016, 13:32

Bonjour,

Ton formulaire envoyé en post te permet de définir la variable $_POST['pseudo']. L'attribut register_globals ayant été supprimé pour des questions de sécurité, tu dois obligatoirement spécifier l'origine de ta variable (get, post, cookie, session....)

Il te faut donc soit utiliser $_POST['pseudo'], soit affecter la valeur de $_POST['pseudo'] à ta variable $pseudo avant de pouvoir utiliser celle-ci :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Petit nouveau ! | 4 Messages

22 mars 2016, 09:59

Excuse moi mais je suis vraiment pas un expert, loin de là. C'est bien sur le présent script que je dois le définir ?
J'ai remplacé $_SESSION['pseudo']= $pseudo; par $_POST['pseudo']= $pseudo;

Mais cela ne change rien, j'ai accès à l'espace personnel mais il n'a pas mémorisé le pseudo.

Merci pour ta patience et ton aide.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9783 Messages

23 mars 2016, 13:38

Bonjour,
$_SESSION['id']= $resultat['id'];
         $_SESSION['pseudo']= $pseudo;
         $_SESSION['mail']= $resultat['email'];
Si le $pseudo vient aussi de ta base de données, comme id et email, alors il est bizarre que tu n'ai pas le même fonctionnement pour les 3 ;)
Quand tout le reste a échoué, lisez le mode d'emploi...

Petit nouveau ! | 4 Messages

23 mars 2016, 14:36

En fait l'accès à index.php se fait bien mais il n'y a pas de pseudo ou disons plutôt que le pseudo est remplacé par un vide.

J'ai fait un test sur un espace en php 5.2 et lorsque le global register est sur "on" le pseudo est reconnu et sur "off" plus de pseudo.

Le problème est donc bien là, mais mes connaissances minimalistes m'empêchent de solutionner le problème.