Bonjour,

Voila je rencontre un petit problème avec mon code. j'ai un tableau qui m'affiche tout les membres présent dans ma base de donné, et je peux éditer les infos, enfin c'est ce que je voudrais, j'ai fais que pour l'entrée "nomrp", mais ça ne fonctionne pas, le problème semble venir de la balise form qui apperement ne fonctionne pas dans les tableau, je suis coincé depuis ce matin, j'ai essayer dans tout les sens, et je ne trouve pas..

Voilà le code actuel

Traitement :

<?php
$bdd = new PDO('mysql:host=127.0.0.1;dbname=forbiddenp', 'root', '');
session_start();
$joueurs = $bdd->query('SELECT * FROM users');

if(isset($_SESSION['admin']) AND $_SESSION['admin'] == 1){

}else{
    header("Location: user.php?id=".$_SESSION['id']);
    die();
}

if(isset($_POST['nomrp'])) {
    $nomrp = htmlspecialchars($_POST['nomrp']);
    $getid = intval($_POST['id']);
    $insertnomrp = $bdd->prepare("UPDATE users SET nomrp = ? WHERE id = ?");
    $insertnomrp->execute(array($nomrp, $getid));
    header('Location: table.php');
}

?>

Tableau :

<table class="table table-hover table-striped">
                                    <thead>
                                        <th>ID</th>
                                        <th>Pseudo</th>
                                        <th>Nom RP</th>
                                        <th>Twitch</th>
                                        <th>Youtube</th>
                                        <th>Twitter</th>
                                        <th>Admin</th>
                                        <th>Action</th>
                                    </thead>
                                    <tbody>
                                    <?php while ($j = $joueurs->fetch()) { ?>
                                    <form method="POST" action="" enctype="multipart/form-data">
                                        <tr>

                                            <td><?php echo $j['id']; ?></td>
                                            <td><?php echo $j['pseudo']; ?></td>
                                            <td><input type="text" class="form-control" name="nomrp" placeholder="Nom RP" value="<?php echo $j['nomrp']; ?>"</td>
                                            <td><input type="text" class="form-control" name="twitch" placeholder="Twitch" value="<?php echo $j['twitch']; ?>"</td>
                                            <td><input type="text" class="form-control" name="youtube" placeholder="Youtube" value="<?php echo $j['youtube']; ?>"</td>
                                            <td><input type="text" class="form-control" name="twitter" placeholder="Twitter" value="<?php echo $j['twitter']; ?>"</td>
                                            <td><input type="text" class="form-control" name="admin" placeholder="Admin" value="<?php echo $j['admin']; ?>"</td>
                                            <td><button type="submit" class="btn btn-info btn-fill"><i class="pe-7s-note"></i></button></td>

                                        </tr>
                                        </form>
                                        <?php } ?>
                                    </tbody>
                                </table>

Je voudrais au final, que quand j'appuye sur le button pour submit, que ma bdd mette bien à jour la valeur
Merci de votre aide

18 réponses


Lartak
Réponse acceptée

Bonjour.
Ton problème, c'est tout simplement que tu n'as pas refermé les balises de tes inputs, il te faut donc remplacer par exemple :

<td><input type="text" class="form-control" name="nomrp" placeholder="Nom RP" value="<?php echo $j['nomrp']; ?>"</td>

Par :

<td><input type="text" class="form-control" name="nomrp" placeholder="Nom RP" value="<?php echo $j['nomrp']; ?>"></td>

En fait, tu fermes bien les balises PHP, mais pas celle des inputs après avoir fermé celles de PHP.

Lartak
Réponse acceptée

Je ne comprends pas trop ce que tu veux dire.
Est-ce que tu as ajouté après new PDO(... ) le code que j'ai mis dans mon précédent post ?
Vu que tu fais une redirection vers la page table.php, c'est sur celle-ci que tu verras l'erreur de PDO s'afficher s'il en rencontre une.
Au passage fais un var_dump($_POST); et un die(); juste en dessous de if(isset($_POST['nomrp'])) {, en premier lieu pour vérifier si tu rentres bien dans la condition et en second, dans le cas ou tu rentres bien dans la condition pour vérifier que tu as bien les données nécessaires pour la sauvegarde.

Lartak
Réponse acceptée

Il n'y a pas l'id dans ce que tu montres alors que c'est nécessaire pour modifier l'enregistrement.

Lartak
Réponse acceptée

Fais un input de type hidden pour l'id, comme elle sera bien présente dans le tableau des données postées et le champ ne sera pas affiché.
Pour ce qui concerne le pseudo, tu fais un input de type text et tu lui ajoutes l'attribut readonly, de cette manière l'input sera affiché normalement mais sa valeur ne pourra pas être modifiée, tu peux faire de la même manière pour l'id si tu veux qu'elle soit affiché comme les autres inputs.

FOEDI
Auteur

Bien vue, merci, mais sa update toujours pas, surement un soucis je me trompe entre POST et GET, tu pourrais vérifier ? :s je suis vraiment débutant..

L'erreur ne vient pas de là, mais parce que tu as besoin de l'id, sauf que celle-ci ne se situe pas dans un input.
Il te faut donc par exemple ajouter un champs caché pour l'id.

FOEDI
Auteur

Je vais la mettre dans un input disabled, je te redis ! :)

FOEDI
Auteur

fonctionne toujours pas.. :/

Le traitement de ton formulaire et le tableau ne sont pas sur la même page si je ne me trompe pas.
C'est bien ça ?

FOEDI
Auteur

si ils sont sur la même page voici la page complete

<?php
$bdd = new PDO('mysql:host=127.0.0.1;dbname=forbiddenp', 'root', '');
session_start();
$joueurs = $bdd->query('SELECT * FROM users');

if(isset($_SESSION['admin']) AND $_SESSION['admin'] == 1){

}else{
    header("Location: user.php?id=".$_SESSION['id']);
    die();
}

if(isset($_POST['nomrp'])) {
    $nomrp = htmlspecialchars($_POST['nomrp']);
    $getid = intval($_POST['id']);
    $insertnomrp = $bdd->prepare("UPDATE users SET nomrp = ? WHERE id = ?");
    $insertnomrp->execute(array($nomrp, $getid));
    header('Location: table.php');
}

?>

<?php include "assets/php/headerandnav.php"; ?>

    <div class="main-panel">
        <nav class="navbar navbar-default navbar-fixed">
            <div class="container-fluid">
                <div class="navbar-header">
                    <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#navigation-example-2">
                        <span class="sr-only">Toggle navigation</span>
                        <span class="icon-bar"></span>
                        <span class="icon-bar"></span>
                        <span class="icon-bar"></span>
                    </button>
                    <a class="navbar-brand" href="#">Gestions membres</a>
                </div>
                <div class="collapse navbar-collapse">

                    <ul class="nav navbar-nav navbar-right">
                        <li>
                            <a href="#">
                                <p>Log out</p>
                            </a>
                        </li>
                        <li class="separator hidden-lg hidden-md"></li>
                    </ul>
                </div>
            </div>
        </nav>

        <div class="content">
            <div class="container-fluid">
                <div class="row">
                    <div class="col-md-12">
                        <div class="card">
                            <div class="header">
                                <h4 class="title">Liste des membres</h4>
                            </div>
                            <div class="content table-responsive table-full-width">
                                <table class="table table-hover table-striped">
                                    <thead>
                                        <th>ID</th>
                                        <th>Pseudo</th>
                                        <th>Nom RP</th>
                                        <th>Twitch</th>
                                        <th>Youtube</th>
                                        <th>Twitter</th>
                                        <th>Admin</th>
                                        <th>Action</th>
                                    </thead>
                                    <tbody>
                                    <?php while ($j = $joueurs->fetch()) { ?>
                                    <form method="POST" action="" enctype="multipart/form-data">
                                        <tr>

                                            <td><input type="text" class="form-control" name="id" placeholder="ID" value="<?php echo $j['id']; ?>" disabled></td>
                                            <td><input type="text" class="form-control" name="pseudo" placeholder="Pseudo" value="<?php echo $j['pseudo']; ?>" disabled></td>
                                            <td><input type="text" class="form-control" name="nomrp" placeholder="Nom RP" value="<?php echo $j['nomrp']; ?>"></td>
                                            <td><input type="text" class="form-control" name="twitch" placeholder="Twitch" value="<?php echo $j['twitch']; ?>"></td>
                                            <td><input type="text" class="form-control" name="youtube" placeholder="Youtube" value="<?php echo $j['youtube']; ?>"></td>
                                            <td><input type="text" class="form-control" name="twitter" placeholder="Twitter" value="<?php echo $j['twitter']; ?>"></td>
                                            <td><input type="text" class="form-control" name="admin" placeholder="Admin" value="<?php echo $j['admin']; ?>"></td>
                                            <td><button type="submit" class="btn btn-info btn-fill"><i class="pe-7s-note"></i></button></td>

                                        </tr>
                                        </form>
                                        <?php } ?>
                                    </tbody>
                                </table>

                            </div>
                        </div>
                    </div>

                </div>
            </div>
        </div>
<?php include "assets/php/footer.php"; ?>

Ok.
Je te conseilles d'ajouter ceci juste après l'initialisation de PDO :

$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);

Car par défault PDO ne retourne pas d'erreur et comme tu dois avoir une erreur au moment de la requête, tu ne peux pas le savoir, sauf si tu lui indiques de te retourner les erreurs.
Rajoutes donc cette ligne, retentes et si une erreur s'affiche, montres là moi.

FOEDI
Auteur

Il manque pas une ligne pour afficher sur la page ?, sinon la page ressemble à ça

https://images.discordapp.net/.eJwFwdENhCAMANBdGIAepRJwG4IEjUoJrfHjcrvfe1_zzMusZlcdsgJshxSemxXlmVu1jbldNY9DbOEbsmou-127CjiKS_ARKbroMERK4NFhIocLfQIi-UTw9LPz2-3ozfz-B6Qi2w.Cd_5nnp434riMPlRCYovBtei1TI?width=1083&height=544

désolé pour le lien j'ai pas trouvé comment mettre l'image direct..

FOEDI
Auteur

array(5) { ["nomrp"]=> string(3) "qdd" ["twitch"]=> string(13) "mythixtrinity" ["youtube"]=> string(32) "channel/UCcd54QF3QSMSn9fW10541YQ" ["twitter"]=> string(13) "mythiXTrinity" ["admin"]=> string(1) "0" }

apperement il à bien tout, je comprend pourquoi il m'affiche tout alors que je demande juste nomrp, mais bon du coup sa viendrais de l'envoie qui ce fait pas, j'utilise le même script à quelques choses pret pour l'édition du profil perso, et sa fonctionne niquel..

FOEDI
Auteur

array(7) { ["id"]=> string(1) "3" ["pseudo"]=> string(12) "LadyAthena" ["nomrp"]=> string(12) "Jade McClain" ["twitch"]=> string(12) "ladyathena" ["youtube"]=> string(32) "channel/UCtc_awxnAyXD-3k6w5ry6CA" ["twitter"]=> string(12) "LadyAthena" ["admin"]=> string(1) "1" }

good car c'était disable

FOEDI
Auteur

Je t'aime, mddr, mais du coup, tu serais comment faire pour pas qu'on puisse edit id et pseudo ?

FOEDI
Auteur

merci tu gère !

De rien, avec plaisir.

FOEDI
Auteur

Je me permet de remettre un message, serais tu comment faire un "Save all", pour que sa sauvegarde tout le tableau, si on modifie beaucoup de choses au lieu de faire ligne pas ligne?