Probleme avec un link dans mon fichier de connexion [Résolu]

Signaler
Messages postés
3041
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
28 juillet 2021
-
Messages postés
3041
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
28 juillet 2021
-
bonsoir a tous
je viens de tester mon site sur un hébergeur gratuit et tout fonctionne a merveille
notamment la connexion

par contre sur mon hébergeur payant j ai un soucis avec mon fichier de connexion et notamment avec ce morceau de code voir ci après

lorsque je le laisse dans mon code
j ai un message d erreur comme quoi la variable link n est pas définie ?

Notice: Undefined index: link in /home/u434600775/domains/pecheperle.be/public_html/phil/connexion.php on line 66



normalement je ne devrais pas recevoir de message d erreur puisque je la teste
et si elle est vide je suis redirige vers l acceuil

<?php
session_start();

//gestion des erreurs
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

//je rends la variable link propre 
$link = !empty($_GET['link']) ? $_GET['link'] : NULL;

//je me connecte a ma base de donnee
require_once 'base.php';

//je verifie le pseudo et le password 
if (!empty($_POST['pseudo']) && !empty($_POST['password']))
{
	
	//je mts au propre deux variables
    $pseudo = !empty($_POST['pseudo']) ? $_POST['pseudo'] : NULL;
    $password = !empty($_POST['password']) ? $_POST['password'] : NULL;
   
   //debut requete
    $sql = 'SELECT pseudo, email,id, password FROM utilisateurs WHERE pseudo = ?';
    $datas = [$pseudo];
    //Execution de la requete
    try
    {
        $requete = $bdd->prepare($sql);
        $requete->execute($datas);
    }
    catch(Exception $e)
    {
        // en cas d'erreur :
        echo " Erreur ! " . $e->getMessage();
        echo " Les datas : ";
        print_r($datas);
    }
    $data = $requete->fetch();
    $row = $requete->rowCount();

    //si le peusdo est bien dans la base alors on continue sinon on sort
    if ($row == 1)
    {
        //on verifie le pawword si il est ok on continue , sinon sortie
        if (password_verify($password, $data['password']))
        {
            //on definit et on cree les variables sessions
            $_SESSION['user'] = array(
                'id' => $data['id'],
                'pseudo' => $data['pseudo'],
                'email' => $data['email']
            );
            $_SESSION['id'] = $data['id'];
            $_SESSION['pseudo'] = $data['pseudo'];
            $_SESSION['email'] = $data['email'];

            //on test la variable link si elle est vide  on va vers index
            if (empty($_SESSION['link']))
            {
                header('Location: accueil-peche-perle.php?pseudo=' . $_SESSION['pseudo']);
                //sinon on va faire la dernière page visitée
                
            }
            else (!empty($_SESSION['link']));
            {
                header('location: ' . $_SESSION['link']);
            }
            die();
        }
        else
        {
            header('Location: connexion-site.php?login_err=password');
            die();
        }
    }
    else
    {
        header('Location: connexion-site.php?login_err=already');
        die();
    }
}
?>`

5 réponses

Bonsoir,

Regarde bien le dernier caractère de ta ligne 65.

else (!empty($_SESSION['link']));
Messages postés
3041
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
28 juillet 2021
139
bonsoir
merci pour la réponse
mais lorsque j enlève le ";" le code me dit qu il manque un point virgule
Messages postés
3974
Date d'inscription
lundi 16 juillet 2007
Statut
Contributeur sécurité
Dernière intervention
28 juillet 2021
1 421
C'est toute la ligne qui est mauvaise. On ne met pas de condition dans un else. Le else, c'est l'action à faire lorsque les autres if/else if sont invalides.
D'ailleurs le reste du code n'est pas sans défaut... c'est bien de faire une variable
$link
, mais elle sert à quoi ? Tu ne l'utilises pas dans ton code.
Messages postés
3041
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
28 juillet 2021
139
bonjour Pyraah
ah bon tout est mauvais ...
et donc en relisant mon code je n utilise pas cette variable link en effet

je ne comprends pas bien comment je pourrais faire avec les if et les else

car
mon code est fait de cette manière
j ai bien 3 if
puis 3 else

qui sont imbrique les uns dans les autres

je ne vois pas comment j aurais pu faire

le pire c est que ce code fonctionne sur l hébergeur gratuit
Messages postés
3974
Date d'inscription
lundi 16 juillet 2007
Statut
Contributeur sécurité
Dernière intervention
28 juillet 2021
1 421
Je n'ai pas dit que le code est mauvais, j'ai dit que la ligne est mauvaise...et que tu n'utilises pas ta variable $link ;-).

Et tu as tendance à te perdre facilement dans ton code, c'est normal lorsqu'on débute. Et c'est pour ça qu'il faut faire attention à l'indentation du code, pour qu'il soit lisible.

Et ton if/else... else se traduit littéralement par "sinon". Si tu veux mettre une condition, c'est un else if (sinon si) qu'il faut utiliser.

Après peu importe combien de if tu as imbriqués. Le else sera toujours la fin du if le plus proche. Et il sera toujours exécuté si le if le plus proche n'a pas satisfait une condition.

IF 1
IF 2
IF 3
ELSE 3 (fin du IF 3)
ELSE 2 (fin du IF 2
ELSE 1 (fin du IF 1)


Je n'ai pas la pédagogie nécessaire pour mieux t'aider, mais je te conseille fortement de survoler un cours dédié aux débutants.
https://openclassrooms.com/fr/courses/918836-concevez-votre-site-web-avec-php-et-mysql?status=published
Messages postés
3041
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
28 juillet 2021
139
merci pour la reponse
il est vrai que j ai tendance a me perde dans mon code et pourtant quand je vois mes débuts cela va beaucoup mieux

oui j ai bien compris le principe du if et else
pourtant j ai beau me relire
je suis bon quand même

y a un truc qui m échappe
j ai mis les numéros des if et else en commentaire

<?php
session_start();

//gestion des erreurs
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);


//je me connecte a ma base de donnee
require_once 'base.php';

//je verifie le pseudo et le password 
//if numero 1
if (!empty($_POST['pseudo']) && !empty($_POST['password']))
{
	
	//je mts au propre deux variables
    $pseudo = !empty($_POST['pseudo']) ? $_POST['pseudo'] : NULL;
    $password = !empty($_POST['password']) ? $_POST['password'] : NULL;
   
   //debut requete
    $sql = 'SELECT pseudo, email,id, password FROM utilisateurs WHERE pseudo = ?';
    $datas = [$pseudo];
    //Execution de la requete
    try
    {
        $requete = $bdd->prepare($sql);
        $requete->execute($datas);
    }
    catch(Exception $e)
    {
        // en cas d'erreur :
        echo " Erreur ! " . $e->getMessage();
        echo " Les datas : ";
        print_r($datas);
    }
    $data = $requete->fetch();
    $row = $requete->rowCount();

    //si le peusdo est bien dans la base alors on continue sinon on sort
	//if numero 2
    if ($row == 1)
    {
        //on verifie le pawword si il est ok on continue , sinon sortie
		//if numero 3
        if (password_verify($password, $data['password']))
        {
            //on definit et on cree les variables sessions
            $_SESSION['user'] = array(
                'id' => $data['id'],
                'pseudo' => $data['pseudo'],
                'email' => $data['email']
            );
            $_SESSION['id'] = $data['id'];
            $_SESSION['pseudo'] = $data['pseudo'];
            $_SESSION['email'] = $data['email'];

            //on test la variable link si elle est vide  on va vers index
			//if numero 4
            if (empty($_SESSION['link']))
            {
                header('Location: accueil-peche-perle.php?pseudo=' . $_SESSION['pseudo']);
                //sinon on va faire la dernière page visitée
                
            }
			//else numero 4
            else (!empty($_SESSION['link']));
            {
                header('location: ' . $_SESSION['link']);
            }
            die();
        }
		//else numero 3
        else
        {
            header('Location: connexion-site.php?login_err=password');
            die();
        }
    }
	//else numero 2
    else
    {
        header('Location: connexion-site.php?login_err=already');
        die();
    }
}
?>`
Messages postés
33137
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
27 juillet 2021
3 639
Bonjour
Logne 68... Tu ne peux pas mettre de CONDITION sur un ELSE


   //if numero 4
            if (empty($_SESSION['link']))  {
                header('Location: accueil-peche-perle.php?pseudo=' . $_SESSION['pseudo']);
                //sinon on va faire la dernière page visitée
                
            }
   //else numero 4
            else    {
                header('location: ' . $_SESSION['link']);
            }
Messages postés
3041
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
28 juillet 2021
139
bonjour Jordane

Merci pour l aide et juste tu as entièrement raison et cela est tout a fait logique


encore merci