Page 1 sur 1

Formulaire type while pour toute la bdd

Posté : 01 févr. 2017, 18:06
par Une Minute
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 !

Re: Formulaire type while pour toute la bdd

Posté : 02 févr. 2017, 09:13
par Spols
il faut que chaque champs de formulaire ai un nom unique qui te permet de savoir quelle enregistrement de bdd il faut modifier.

Re: Formulaire type while pour toute la bdd

Posté : 02 févr. 2017, 11:04
par Une Minute
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..)

Re: Formulaire type while pour toute la bdd

Posté : 02 févr. 2017, 11:11
par Spols
montre nous le code qui génére ton formulaire et celui du traitement pour savoir où tu en est et ou tu coince.

Re: Formulaire type while pour toute la bdd

Posté : 02 févr. 2017, 11:35
par Une Minute
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>

Re: Formulaire type while pour toute la bdd

Posté : 02 févr. 2017, 12:04
par Spols
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>

Re: Formulaire type while pour toute la bdd

Posté : 02 févr. 2017, 16:44
par Une Minute
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..!

Re: Formulaire type while pour toute la bdd

Posté : 02 févr. 2017, 19:14
par Une Minute
Ç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