Bonjour, j'ai un problème avec mon script, voilà j'ai un espace membre et j'utilise la structure mvc mais quand je me connect je n'arrive pas à écho les infos de l'utilisateurs, à la place j'ai une erreur :

Warning: Invalid argument supplied for foreach() in 9

L'objectif c'est de créer une boucle foreach et de récupérer les infos de l'utilisateur connecter.

En faîte, la page compte.php c'est la page de quand l'utilisateur arrive à se connecter.

J'ai 3 dossier dans la racine (modéle, vue et controleur) en dehors des 3 dossier j'ai le fichier compte.php

<?php

include_once('modele/connect.php');

if (!isset($_GET'section']) OR $_GET'section'] == 'compte')
{
    include_once('controleur/social/compte.php');
}

?>

dans le modele le fichier get_compte.php :

<?php
//la function qui va recuperer les infos de l'utilisateur connecté
function infos_membre_connecte()
{
  global $bdd;

     $req = $bdd->prepare('SELECT * FROM utilisateurs WHERE pseudo = :pseudo');
     $req->execute(array(':pseudo' => $_SESSION'pseudo']));

  return FALSE !== $req->fetchColumn();
}

?>

dans la vue le fichier coompte.php (la page ou j'aimerais afficher par exemple ici le pseudo de l'utilisateur connecté.

<?php
session_start(); // On démarre la session AVANT toute chose
?>

 <?php
echo $infos'pseudo'];

?>

et dans le dossier controleur j'ai le fichier compte.php

<?php
     include_once('modele/social/get_compte.php');

       $infos = infos_membre_connecte();

    foreach($infos as $cle => $info)
                {

                    $infos$cle]'pseudo'] = htmlspecialchars($info'pseudo']);
                }

        include_once('vue/social/compte.php');
?>

La page login.php j'ai :

<?php
     include_once('modele/social/get_login.php');

 if(isset($_POST'submit']))
 {
                if(empty($_POST'pseudo']) OR empty($_POST'password']) )
                {
                            $errors] = " <div class='msg' id='ij_msg' style='overflow: visible; margin-top: 20px; margin-bottom: 10px; padding-top: 8px; padding-bottom: 8px; display: block;'>
                            <b>Veuillez entrer votre pseudo et votre mot de passe.</b><br>
                            Si vous avez soigneusement vérifié toutes les informations, mais que vous ne parvenez toujours pas à vous connecter, <a href=''>cliquer ici</a>.<b>AV</b>.</div>";
                }

                if(!empty($errors))
                {
                            foreach($errors as $error)
                            {
                                    echo"<div class='error'>".$error."</div>";
                            }
                }

                else

                {

                        if(verifier_combinaison_pseudo_password($_POST'pseudo'],$_POST'password']) == 0)
                        {
                                echo"
                                <div class='msg' id='ij_msg' style='overflow: visible; margin-top: 20px; margin-bottom: 10px; padding-top: 8px; padding-bottom: 8px; display: block;'>
                                <b>Pseudo ou mot de passe incorrect.</b><br>
                                Si vous avez soigneusement vérifié toutes les informations, mais que vous ne parvenez toujours pas à vous connecter, <a href=''>cliquer ici</a>.<b>AV</b>.</div>";
                        }

                        else

                        {
                            session_start();
                            $_SESSION'pseudo'] = $_POST'pseudo'];
                            header("Location:compte.php");
                        }
                }
}

2 réponses


Bon dieu... Utilise les classes, tu auras bien moins de souci!

Ton code est assez crade, les nomenclatures sont très mal spécifiées. De plus, tu as un système de connexion pas très performant en terme de sécurité. Bref, ce n'est pas le sujet de cette discussion :)

Essaye déjà de faire des var\_dump() de tes variables pour savoir si tu n'obtiens pas un FALSE. Si c'est le cas, le retour de ta fonction n'est pas bon. Sachant que je ne penses pas que ce soit un fetchColumn() que tu veux mais plutôt un fetchAssoc() Tu pourrais simplement faire :

<?php
//la function qui va recuperer les infos de l'utilisateur connecté
function infos_membre_connecte()
{
  global $bdd;

     $req = $bdd->prepare('SELECT * FROM utilisateurs WHERE pseudo = :pseudo');
     $req->execute(array(':pseudo' => $_SESSION'pseudo']));

  return $req->fetch(PDO::FETCH_ASSOC);
}
// you can add this to debug
// $userInfos = infos_membre_connecte();
// var_dump($userInfos);
// while var_dump doesn't return what excepted, debug this function
?>
Ask
Auteur

Bonjour, merci pour votre réponse, j'ai résolu le problème avec un

function verifier_combinaison_pseudo_password($pseudo,$password) {
    global $bdd; 
    $req = $bdd->prepare('SELECT 1 FROM utilisateurs WHERE pseudo= :pseudo AND password= :password');
    $req->execute(array(':pseudo' => trim($_POST'pseudo']), ':password' => trim(sha1($_POST'password']))));
    return FALSE !== $req->fetch();
}

(De plus, tu as un système de connexion pas très performant en terme de sécurité. )

C'est à dire ?