Récupérer les rangs de mes users

Eléphanteau du PHP | 38 Messages

29 juil. 2016, 15:19

Bonjour,

J'ai crée deux tables: utilisateurs et rangs, la table utilisateurs contient, le pseudo mail et mot de passe ainsi que le champ rang_id et ma table rangs contient un champ ID en auto increment et le nom du rang.

J'ai une page qui affiche les infos du membre dont voici le code:
<?php

include '../includes/header.php';
include '../includes/bdd.php';

if(isset($_GET['id']) AND $_GET['id'] > 0) {
    $getid = intval($_GET['id']);
    $requser = $bdd->prepare('SELECT * FROM utilisateurs WHERE id = ?');
    $requser->execute(array($getid));
    $userinfo = $requser->fetch();
    ?>
    <div class="container-content"><br />
    <div class="texte-corps">
        <div class="texte-en-tete">Mon Compte</div><br />
    <div align="center">
        <h2>Profil de <?php echo $userinfo['pseudo']; ?></h2>
        <br /><br />
        Pseudo = <?php echo $userinfo['pseudo']; ?>
        <br />
        Mail = <?php echo $userinfo['mail']; ?>
        <br />
        <?php
        if(isset($_SESSION['id']) AND $userinfo['id'] == $_SESSION['id']) {
            ?>
            <br />
            <a href="edition-compte.php">Editer mon profil</a>
            <a href="../deconnexion.php">Se déconnecter</a>
            <?php
        }
        ?>
            </div>
</div>
</body>
</html>
    <?php
}
?>
Je souhaiterai afficher le rang de l'utilisateur avec les autres infos, mais je ne sais pas comment m'y prendre au niveau de la requète SQL, si quelqu'un peut m'éclairer ?

Merci.

Mammouth du PHP | 2703 Messages

29 juil. 2016, 15:34

SELECT utilisateurs.*, rang.nom FROM utilisateurs, rang WHERE utilisateurs.rang_id=rang.id and utilisateursid = ?

Petit nouveau ! | 7 Messages

29 juil. 2016, 15:36

Salut,

il suffit de faire une jointure ;)

SELECT * FROM utilisateurs INNER JOIN <TA_TABLE_DE_RANGS> ON <TA_TABLE_DE_RANGS>.<TA_COLONNE_RANG_ID> = utilisateurs.<TA_COLONNE_RANG_ID> WHERE id = ?

et tout devrait fonctionner ;)

Eléphanteau du PHP | 38 Messages

29 juil. 2016, 18:47

Merci.

Je voudrais maintenant mettre à jour ces données, mais mon code en semble pas fonctionner...
<?php
include '../includes/header.php';
include '../includes/bdd.php';

if(isset($_SESSION['id'])) {
    $requser = $bdd->prepare("SELECT * FROM utilisateurs WHERE id = ?");
    $requser->execute(array($_SESSION['id']));
    $user = $requser->fetch();
    $reqrang = $bdd->prepare("SELECT * FROM rangs");
    $reqrang->execute();
    $rang = $reqrang->fetch();
    if(isset($_POST['newpseudo']) AND !empty($_POST['newpseudo']) AND $_POST['newpseudo'] != $user['pseudo']) {
        $newpseudo = htmlspecialchars($_POST['newpseudo']);
        $insertpseudo = $bdd->prepare("UPDATE utilisateurs SET pseudo = ? WHERE id = ?");
        $insertpseudo->execute(array($newpseudo, $_SESSION['id']));
        header('Location: compte.php?id='.$_SESSION['id']);
    }
    if(isset($_POST['newmail']) AND !empty($_POST['newmail']) AND $_POST['newmail'] != $user['mail']) {
        $newmail = htmlspecialchars($_POST['newmail']);
        $insertmail = $bdd->prepare("UPDATE utilisateurs SET mail = ? WHERE id = ?");
        $insertmail->execute(array($newmail, $_SESSION['id']));
        header('Location: compte.php?id='.$_SESSION['id']);
    }
    if(isset($_POST['newrang']) AND !empty($_POST['newrang']) AND $_POST['newrang'] != $user['rang']) {
        $newmail = htmlspecialchars($_POST['newrang']);
        $insertmail = $bdd->prepare("UPDATE utilisateurs SET rang_id = ? WHERE id = ?");
        $insertmail->execute(array($newrang, $_SESSION['id']));
        header('Location: compte.php?id='.$_SESSION['id']);
    }
    if(isset($_POST['newmdp1']) AND !empty($_POST['newmdp1']) AND isset($_POST['newmdp2']) AND !empty($_POST['newmdp2'])) {
        $mdp1 = sha1($_POST['newmdp1']);
        $mdp2 = sha1($_POST['newmdp2']);
        if($mdp1 == $mdp2) {
            $insertmdp = $bdd->prepare("UPDATE utilisateurs SET motdepasse = ? WHERE id = ?");
            $insertmdp->execute(array($mdp1, $_SESSION['id']));
            header('Location: compte.php?id='.$_SESSION['id']);
        } else {
            $msg = "Vos deux mdp ne correspondent pas !";
        }
    }
    ?>
<div class="container-content"><br />
    <div class="texte-corps">
        <div class="texte-en-tete">Edition de mon profil</div><br />
        <div align="left">
            <form method="POST" action="" enctype="multipart/form-data">
                <label>Pseudo :</label>
                <input type="text" name="newpseudo" placeholder="Pseudo" value="<?php echo $user['pseudo']; ?>" /><br /><br />
                <label>Mail :</label>
                <input type="text" name="newmail" placeholder="Mail" value="<?php echo $user['mail']; ?>" /><br /><br />
                <label>Rang :</label>
                <select> 
                <option><?php echo $rang['nom']; ?></option> 
                </select>
                <br /><br />
                <label>Mot de passe :</label>
                <input type="password" name="newmdp1" placeholder="Mot de passe"/><br /><br />
                <label>Confirmation - mot de passe :</label>
                <input type="password" name="newmdp2" placeholder="Confirmation du mot de passe" /><br /><br />
                <center><input type="submit" value="Mettre à jour mon compte" /></center>
            </form>
            <?php if(isset($msg)) { echo $msg; } ?>
            </div>
</div>
</body>
</html>
    <?php
}
else {
    header("Location: ../connexion.php");
}
?>
Le soucis est que le rang s'affiche mais je ne peut en choisir qu'un dans la liste déroulante et pas tout ceux qu'il y'a.

Eléphanteau du PHP | 38 Messages

30 juil. 2016, 16:17

Up, je n'ai toujours pas trouvé de quel manière faire cela.

Merci

Eléphanteau du PHP | 38 Messages

31 juil. 2016, 14:26

Toujours personnne ?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

31 juil. 2016, 20:34

Regarde le HTML généré, tu n'auras qu'un seul <option> dans ton <select>.
Donc il faut que tu te poses la question : " est-ce que j'ai mis dans mon code, quelque chose pour afficher plusieurs <option> ? "

Et comme la réponse est non, bah c'est par là qu'il faut que tu commences.
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 38 Messages

01 août 2016, 09:44

Regarde le HTML généré, tu n'auras qu'un seul <option> dans ton <select>.
Donc il faut que tu te poses la question : " est-ce que j'ai mis dans mon code, quelque chose pour afficher plusieurs <option> ? "

Et comme la réponse est non, bah c'est par là qu'il faut que tu commences.
Merci,

Maintenant je peut choisir dans mon select quel rang je veut.
Le soucis étant que cela ne s'enregistre pas en BDD, une piste ? :|
<?php
include '../includes/header.php';
include '../includes/bdd.php';

if(isset($_SESSION['id'])) {
    $requser = $bdd->prepare("SELECT * FROM utilisateurs WHERE id = ?");
    $requser->execute(array($_SESSION['id']));
    $user = $requser->fetch();
    $reqrang = $bdd->prepare("SELECT * FROM rangs");
    $reqrang->execute();
    if(isset($_POST['newpseudo']) AND !empty($_POST['newpseudo']) AND $_POST['newpseudo'] != $user['pseudo']) {
        $newpseudo = htmlspecialchars($_POST['newpseudo']);
        $insertpseudo = $bdd->prepare("UPDATE utilisateurs SET pseudo = ? WHERE id = ?");
        $insertpseudo->execute(array($newpseudo, $_SESSION['id']));
        header('Location: compte.php?id='.$_SESSION['id']);
    }
    if(isset($_POST['newmail']) AND !empty($_POST['newmail']) AND $_POST['newmail'] != $user['mail']) {
        $newmail = htmlspecialchars($_POST['newmail']);
        $insertmail = $bdd->prepare("UPDATE utilisateurs SET mail = ? WHERE id = ?");
        $insertmail->execute(array($newmail, $_SESSION['id']));
        header('Location: compte.php?id='.$_SESSION['id']);
    }
    if(isset($_POST['newrang']) AND !empty($_POST['newrang']) AND $_POST['newrang'] != $user['rang']) {
        $newrang = htmlspecialchars($_POST['newrang']);
        $insertrang = $bdd->prepare("UPDATE utilisateurs SET rang_id = ? WHERE id = ?");
        $insertrang->execute(array($newrang, $_SESSION['id']));
        header('Location: compte.php?id='.$_SESSION['id']);
    }
    if(isset($_POST['newmdp1']) AND !empty($_POST['newmdp1']) AND isset($_POST['newmdp2']) AND !empty($_POST['newmdp2'])) {
        $mdp1 = sha1($_POST['newmdp1']);
        $mdp2 = sha1($_POST['newmdp2']);
        if($mdp1 == $mdp2) {
            $insertmdp = $bdd->prepare("UPDATE utilisateurs SET motdepasse = ? WHERE id = ?");
            $insertmdp->execute(array($mdp1, $_SESSION['id']));
            header('Location: compte.php?id='.$_SESSION['id']);
        } else {
            $msg = "Vos deux mdp ne correspondent pas !";
        }
    }
    ?>
<div class="container-content"><br />
    <div class="texte-corps">
        <div class="texte-en-tete">Edition de mon profil</div><br />
        <div align="left">
            <form method="POST" action="" enctype="multipart/form-data">
                <label>Pseudo :</label>
                <input type="text" name="newpseudo" placeholder="Pseudo" value="<?php echo $user['pseudo']; ?>" /><br /><br />
                <label>Mail :</label>
                <input type="text" name="newmail" placeholder="Mail" value="<?php echo $user['mail']; ?>" /><br /><br />
                <label>Rang :</label>
                <select>
                <?php
                while ($rang = $reqrang->fetch())
                {
                ?>
                <option value="<?php echo $rang['nom']; ?>"><?php echo $rang['nom']; ?></option>
                <?php
                }
                $reqrang->closeCursor();
                ?>
                </select>
                <br /><br />
                <label>Mot de passe :</label>
                <input type="password" name="newmdp1" placeholder="Mot de passe"/><br /><br />
                <label>Confirmation - mot de passe :</label>
                <input type="password" name="newmdp2" placeholder="Confirmation du mot de passe" /><br /><br />
                <center><input type="submit" value="Mettre à jour mon compte" /></center>
            </form>
            <?php if(isset($msg)) { echo $msg; } ?>
            </div>
</div>
</body>
</html>
    <?php
}
else {
    header("Location: ../connexion.php");
}
?>

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

01 août 2016, 09:56

Maintenant je peut choisir dans mon select quel rang je veut.
Le soucis étant que cela ne s'enregistre pas en BDD, une piste ? :|
Va peut être falloir faire ton debug toi même...
Qu'est-ce que tu récupères comme valeur pour le rang en PHP après soumission du formulaire ?
Comment l'enregistres-tu en bdd ?
As-t(u vérifier que ta requête fonctionnait dans phpmyadmin ?
Quand tout le reste a échoué, lisez le mode d'emploi...