Page 1 sur 1

Récupérer les rangs de mes users

Posté : 29 juil. 2016, 15:19
par Sato
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.

Re: Récupérer les rangs de mes users

Posté : 29 juil. 2016, 15:34
par or 1
SELECT utilisateurs.*, rang.nom FROM utilisateurs, rang WHERE utilisateurs.rang_id=rang.id and utilisateursid = ?

Re: Récupérer les rangs de mes users

Posté : 29 juil. 2016, 15:36
par soft1ne
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 ;)

Re: Récupérer les rangs de mes users

Posté : 29 juil. 2016, 18:47
par Sato
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.

Re: Récupérer les rangs de mes users

Posté : 30 juil. 2016, 16:17
par Sato
Up, je n'ai toujours pas trouvé de quel manière faire cela.

Merci

Re: Récupérer les rangs de mes users

Posté : 31 juil. 2016, 14:26
par Sato
Toujours personnne ?

Re: Récupérer les rangs de mes users

Posté : 31 juil. 2016, 20:34
par @rthur
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.

Re: Récupérer les rangs de mes users

Posté : 01 août 2016, 09:44
par Sato
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");
}
?>

Re: Récupérer les rangs de mes users

Posté : 01 août 2016, 09:56
par @rthur
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 ?