Salut à tous,
Tout d'abords merci à toutes les personnes qui prendrons le temps de lire mon problème.
Je souhaiterait créer une page de profil pour chaque utilisateur de mon espace membre
(celui présenté dans le tuto de Graphikart).

J'ai tester tous les codes possible, en esseyant même de reproduire ce que je fait pour
afficher mes articles, mais rien n'y fait.
Je n'y arrive pas...

Pouvez vous me diriger vers quelques codes ? ou bien si un article au même sujet
résolu existe ?
J'en est déjà trouver, mais ne s'applique pas correctement sur mon espace membre.

Je vous remercie et à bientôt.

17 réponses


Lartak
Réponse acceptée

Je ne peux pas debug car je ne suis pas en localhost, je suis en ftp et ducoup je n'est pas au fichier log...

Attends, tu veux dire que tu fais du développement sans passer par la phase de développement, mais directement en phase de production ?
Quand tu fais du développement, tu commences par créer ton code et le tester en local avant de le passer en ligne.

neecride
Réponse acceptée

Perso j'aurais fait la requette comme suite, un prepare vaut mieux qu'un query !!! ça t'évite la variable dans une requète.


    // $_GET pour un espace membre !?! je prendrai les variable de sessions c'est plus simple.

    $id = [intval($_GET['id'])]; //ceci est un array(intval($_GET['id']));

    ou

    $id = [intval($_SESSION['auth']->id)]; //ceci est un array(intval($_SESSION['auth']->id));

    $user = $db->prepare("SELECT * FROM users WHERE id = ?"); 

    $user->execute($id);

    $users = $user->fetchObject();

Pour ta conexion je la ferai comme ça dans un fichier différent que tu pourra inclure et rendre ton code plus lisible :

<?php
$dbhost = 'localhost';
$dbname = 'cms';
$dbuser = 'root';
$dbpswd = '';

try{
    $db = new PDO('mysql:host=' . $dbhost . ';dbname='.$dbname,$dbuser,$dbpswd,array( PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8' )); 
    $db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);//ou FETCH_ASSOC
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); //exception or WARNING
}catch(Exception $e){
    /* echo $e->getMessage(); */
    die('Imopsible de ce connecter a la BDD');    
}

c'est quand mêms mieux users->username que users['username'] enfin c'est une convention perso !!!

Ceets
Auteur
<?php
require_once 'db.php'

if(isset($_GET['id']))
{
        $id = intval($_GET['id']);

        $bdd = mysql_query('select username, fullname, email from users where id="'.$id.'"');
        if(mysql_num_rows($dn)>0)
        {
                $dnn = mysql_fetch_array($dn);
?>

<h2>Profil de <?php echo htmlspecialchars($username); ?></h2>

<p>
    <span>Adresse email</span> : <?php echo htmlentities($dnn['email'], ENT_QUOTES, 'UTF-8'); ?><br />
    <span>Nom complet</span> : <?php echo $fullname; ?>
</p>
<?php
        }
        else
        {
                echo 'Cet utilisateur n\'existe pas.';
        }
}
else
{
        echo 'L\'identifiant de l\'utilisateur n\'est pas d&eacute;fini.';
}
?>

Voilà mon code si sa peut vous aider...

etant donné que j'ai pas vraiment compris ta demande... (tu souhaite afficher un profil ?) et comme j'ai l'impression que tu débute, je vais commenter ton code pour que tu comprenne ce que tu fait.

<?php
// fichier de connexion mysql
require_once 'db.php'

// si j'ai dans mon url un ?id=xxx
if(isset($_GET['id']))
{
        // transformation en int
        $id = intval($_GET['id']);

        // selection du username, fullname, email dans la table utilisateur pour l'id courant
        // pour mysql, la convention de nommage veut que tous les mots clés sql soient écris en majuscule.
        // d'ailleur ici, tu fait une requette. ou Query., donc $query me semble plus approprié vu que tu vas travailler avec.
        // Et tu est sur que tu as bien ces 4 colonnes dans ta table "users" ?
        $query = mysql_query('SELECT username, fullname, email FROM users WHERE id="'.$id.'"');

        // si j'ai des lignes dans $dn. 
        // $dn n'existant pas, je corrige pour $query
        if(mysql_num_rows($query)>0)
        {
                // $dnn ? c'est vraiment parlant ca. Mais j'ai mieux appelons le $user (juste pour le fun hein ;) )
                $user = mysql_fetch_array($query);
?>
                <!-- ici, $username n'existe pas., c'est $user['username'] -->
                <!-- html entities n'est pas vraiment utile dans ce cas la, car tu ne doit pas avoir d'html dans un pseudo. a toi de vérifier dans ta bdd que ce sont bien des caractère dit "normaux" -->
                <h2>Profil de <?php echo  $user['username']; ?></h2>

                <p>
                    <span>Adresse email</span> : <?php echo $user['email']; ?><br />
                    <!-- ici, $fullname n'existe pas., c'est $user['fullname'] -->
                    <span>Nom complet</span> : <?php echo $user['fullname'] ; ?>
                </p>
<?php
        }
        else
        {
                echo 'Cet utilisateur n\'existe pas.';
        }
}
else
{
        echo 'L\'identifiant de l\'utilisateur n\'est pas d&eacute;fini.';
}
?>
Ceets
Auteur

Salut à toi ! Je te remercie beaucoup pour le temps que tu a pris à me repondre.
Oui je suis débutant, et tu as tout à fait compris mon problème, je souhaite afficher le profil d'un utilisateur....
J'essaie ton code et je te répond à ça.
Merci beaucoup

Ceets
Auteur

Je reviens vers toi, non sa ne fonctionne toujours pas... je suis perdu...

Bonjour,

Je ne sais pas si ça va résoudre ton problème mais tu utilises mysql query qui est obsolète avec PHP 5 et a carrément été supprimé de PHP 7.. Tu peux utiliser PDO (comme de proposer sur la doc de PHP :D)

Pas de panique, ce n'est pas plus compliqué que ce que tu connais, et ça a l'avantage de pouvoir être utilisé en PHP7 (et c'est quand même plus actuel ^^)..

Et voici la doc sur PDO :D

Ceets
Auteur

Salut Mika ! Merci pour ta réponse !
J'ai remarquer mon erreur, je code en PDO, et est donc fait les modifications mais rien ne change avec NEW PDO...

New pdo ?

Pourrais-tu me montrer ton code :D

Ceets
Auteur

Au pire je peux toujours utilisé ce code :

<?php
require '../assets/inc/functions.php';
logged_only();
require '../assets/inc/header.php';
?>

<?php
    try
    {
        $bdd = new PDO('mes identifiants sql');
    }
    catch(Exception $e)
    {
    die('Erreur : '.$e->getMessage());
    }
    $reponse = $bdd->query('SELECT username, fullname, email FROM users WHERE id="'.$id.'"');
    while ($users = $reponse->fetch())
    {
    ?>
<h3><?php echo $users['fullname']; ?></h3>
<p><span><?php echo $users['username']; ?></span></p>
<p><span><?php echo $users['email']; ?></span></p>
    <?php
    }
    $reponse->closeCursor();
    ?>

Mais je ne sais pas comment integrer GET dedans pour que ce soit pour un utilisateur spécifique

"integrer GET dedans pour que ce soit pour un utilisateur spécifique", c'est à dire ? quelle variable provient d'un GET ?

Ceets
Auteur

Je suis désolé je m'exprime mal
Enfaite le code que je viens de te mettre c'est le code que j'utilise pour afficher mes news.
Ducoup je voudrais l'utiliser pour pour pouvoir visualiser un profil.

Et en appliquant ce code de requête sur ton code profil ça ne fonctionne pas ?

Bonsoir.
Concernant ton dernier code, d'où sors tu la variable id ?
Pourquoi as-tu changé le nom de la variable user en users alors que tu ne veux afficher que les informations d'un seul utilisateur ?
De plus, pourquoi fais-tu une boucle alors que comme je l'ai dit dans la ligne précédente, tu ne veux afficher qu'un enregistrement de la base de données ?
Et puis ce qui serait bien plus propre, ce serait que tu fasse d'abord tes vérifications/requêtes SQL avant de faire l'affichage, exemple :


<?php
require '../assets/inc/functions.php';
logged_only();
if (!empty($_GET['id']) {
    $id = $_GET['id'];
    try {
        $bdd = new PDO('mes identifiants sql');
    } catch(Exception $e) {
        die('Erreur : '.$e->getMessage());
    }
    $reponse = $bdd->query('SELECT username, fullname, email FROM users WHERE id="'.$id.'"');
    $user = $reponse->fetch();
    $reponse->closeCursor();
    if (!$user) {
        // Aucun enregistrement trouvé en base de données, stocker un message d'erreur et rediriger l'utilisateur
    }
    // Tout est bon, on s'occupe de l'affichage
    require '../assets/inc/header.php';
?>
<h3><?php echo $users['fullname']; ?></h3>
<p><span><?php echo $users['username']; ?></span></p>
<p><span><?php echo $users['email']; ?></span></p>
<?php } else {
    // $_GET['id'] n'existe pas ou est vide, stockage d'un message d'erreur et redirection de l'utilisateur
}
Ceets
Auteur

Salut Lartak !
Merci pour ta réponse.
J'ai essayé ton code, cela ne fonctionne toujours pas...
Je ne comprends pas, en principe c'est quelque chose de très simple et je bug la dessus...

Par contre je viens de remarquer que je n'avais pas modifié le nom de la variable users en user au niveau de l'affichage.
Par contre, que veux tu dire par :

ne fonctionne toujours pas...

Tu as une/des erreur(s) ?
Que se passe t'il exactement ?
Penses-tu as debug ton code pour voir d'où peut provenir le problème ?

Ceets
Auteur

Oui j'avais pris en compte ça quand je les tester...
J'ai bien fait les modifications et sa ne marche pas...
Je ne peux pas debug car je ne suis pas en localhost, je suis en ftp et ducoup je n'est pas au fichier log...