[RESOLU] Formulaire type while pour toute la bdd

Eléphanteau du PHP | 14 Messages

01 févr. 2017, 18:06

Bonjour,

C'est encore moi ! Je me permets une autre petite question..

J'aimerais faire un tableau avec plusieurs champs de ma base de données (incluant les données de tous les membres) pour pouvoir les modifier (sur le même modèle que phpmyadmin par exemple).

J'ai bien créé le tableau incluant le formulaire qui me donne toutes les données (une ligne égale un membre) mais je n'arrive pas à modifier les données selon un username bien précis_soit il ne me modifie rien, soit il me modifie les données de tous les membres en même temps_ma question est donc, est-ce possible ? Et si oui, quel chemin dois-je emprunter ?

Merci d'avance !

Mammouth du PHP | 1967 Messages

02 févr. 2017, 09:13

il faut que chaque champs de formulaire ai un nom unique qui te permet de savoir quelle enregistrement de bdd il faut modifier.
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphanteau du PHP | 14 Messages

02 févr. 2017, 11:04

Merci Spols ! C'est super sympa de venir me guider à nouveau !
Est-ce que je dois définir les noms uniques de chaque champs dans la requête ? Est ce ça me permettra d'attribuer les données à un membre sans avoir à définir chaque donnée de chaque membre ? (En espérant être claire..)

Mammouth du PHP | 1967 Messages

02 févr. 2017, 11:11

montre nous le code qui génére ton formulaire et celui du traitement pour savoir où tu en est et ou tu coince.
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphanteau du PHP | 14 Messages

02 févr. 2017, 11:35

Merci beaucoup !
Je bloque au niveau de l'UPDATE, je n'arrive pas à définir l'username par donnée.

Voici mon code (toujours un peu le même..)
<?php
session_start();

include("./includes/identifiants.php");


?>

<!DOCTYPE html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <link href="" rel="stylesheet" title="Style" />
        <title>Base de données adhérents</title>
    </head>
<body>

<?php

if (empty($_POST['maj']))
{
$reponse = $db->query('SELECT * FROM partenaires ORDER by username');
?>
<form method="post" action="" enctype="multipart/form-data">
<table class="content" align="center">
<?php 

while ($donnees = $reponse->fetch())

{

?>  <tr>
            <td>'.stripslashes($donnees['username']).'</td>
            <td><input type="text" name="telephone" id="telephone" value="'.stripslashes($donnees['telephone']).'"</td>
            <td><input type="text" name="contact" id="contact" value="'.stripslashes($donnees['contact']).'"</td>
            <td><input type="text" name="email" id="email" value="'.stripslashes($donnees['email']).'"</td>
            <td><input type="text" name="news" id="news" value="'.stripslashes($donnees['news']).'"</td>
            </tr>
<?php
}
$reponse->closeCursor();

?>
        </table> 
        </p>  
        <input type="submit" value="Mettre à jour" />
        <input type="hidden" id="maj" name="maj" value="1" />
<?php }


  else { 

        $query=$db->prepare('UPDATE partenaires SET telephone = :telephone, contact = :contact, email = :email, news=:news WHERE username=:username');

        $query->bindValue(':telephone',$_POST['telephone'],PDO::PARAM_INT);

        $query->bindValue(':contact',$_POST['contact'],PDO::PARAM_INT); 

        $query->bindValue(':email',$_POST['email'],PDO::PARAM_INT);

        $query->bindValue(':news', $_POST['news'],PDO::PARAM_INT);

        $query->bindValue(':username',$_SESSION['username'],PDO::PARAM_INT);

        $query->execute();

        $data=$query->fetch();

        $query->CloseCursor();

        echo'<p>Modification terminée. </br> La base de données a été modifiée avec succès !</p>';

    }
    ?>

        </form>
        </body>
        </html>

Mammouth du PHP | 1967 Messages

02 févr. 2017, 12:04

C'est bien ce que je me disais, tous tes champs telephone par exemple ont le même nom idem pour les autres champs.
Ce qui veut dire qu'au traitement du formulaire, les données sont écrasés les unes après les autres et tu n'a plus que les dernières.
il faut que tu rende unique tous les attributs name par exemple en utilisant un user_id à défaut le username

PS j'avais pas vu que tu utilise des variable php hors des balise php ??
<?php
session_start();

include("./includes/identifiants.php");


?>

<!DOCTYPE html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <link href="" rel="stylesheet" title="Style" />
        <title>Base de données adhérents</title>
    </head>
<body>

<?php

if (empty($_POST['maj']))
{
$reponse = $db->query('SELECT * FROM partenaires ORDER by username');
?>
<form method="post" action="" enctype="multipart/form-data">
<table class="content" align="center">
<?php 

while ($donnees = $reponse->fetch())

{

?>  <tr>
            <td><?php echo stripslashes($donnees['username']);?></td>
            <td><input type="text" name="telephone[<?php echo $donnees['username'];?>]" id="telephone" value="<?php echo stripslashes($donnees['telephone']);?>"</td>
            <td><input type="text" name="contact[<?php echo $donnees['username'];?>]" id="contact" value="<?php echo stripslashes($donnees['contact']);?>"</td>
            <td><input type="text" name="email[<?php echo $donnees['username'];?>]" id="email" value="<?php echo stripslashes($donnees['email']);?>"</td>
            <td><input type="text" name="news[<?php echo $donnees['username'];?>]" id="news" value="<?php echo stripslashes($donnees['news']);?>"</td>
            </tr>
<?php
}
$reponse->closeCursor();

?>
        </table> 
        </p>  
        <input type="submit" value="Mettre à jour" />
        <input type="hidden" id="maj" name="maj" value="1" />
<?php }


  else { 

        $query=$db->prepare('UPDATE partenaires SET telephone = :telephone, contact = :contact, email = :email, news=:news WHERE username=:username');

foreach($_POST['telephone'] as $username => $telephone){
        $query->bindValue(':telephone',$_POST['telephone'][$username],PDO::PARAM_INT);

        $query->bindValue(':contact',$_POST['contact'][$username],PDO::PARAM_INT); 

        $query->bindValue(':email',$_POST['email'][$username],PDO::PARAM_INT);

        $query->bindValue(':news', $_POST['news'][$username],PDO::PARAM_INT);

        $query->bindValue(':username',$username,PDO::PARAM_INT);

        $query->execute();

}

        $query->CloseCursor();

        echo'<p>Modification terminée. </br> La base de données a été modifiée avec succès !</p>';

    }
    ?>

        </form>
        </body>
        </html>
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphanteau du PHP | 14 Messages

02 févr. 2017, 16:44

Oups ! J'ai enlevé les echos avant d'envoyer pour y voir mieux (je me repère mieux avec les couleurs) et oublié de les remettre... Hum
Je vois ça dès que je rentre et je te redis, merci encore..!
Modifié en dernier par Une Minute le 02 févr. 2017, 19:14, modifié 1 fois.

Eléphanteau du PHP | 14 Messages

02 févr. 2017, 19:14

Ça marche à la perfection ! Je découvre le vrai sens de foreach grâce à toi...
Merci encore d'avoir pris le temps de me répondre ( et de rédiger un peu en plus..!) c'est vraiment super sympa !
Passe une excellente soirée,
Delphine