IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Enregistrement BDD à partir d'un tableau


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2017
    Messages : 44
    Par défaut Enregistrement BDD à partir d'un tableau
    Bonjour,
    Je vous expose mon problème que je n'arrive pas à résoudre depuis quelques heures déjà :
    J'ai fais un tableau HTML/CSS qui répertorie une liste de clients de mon entreprise dont on fait la maintenance (1 visite obligatoire par mois pour chaque entreprise qui ont un contrat de maintenance avec nous)
    Dans ce tableau j'ai mis input non éditable (le numéro de client soit ID, le nom de la société prise en charge, et le type de contrat qu'ils ont avec nous, soit maintenance soit CALP)
    Ces input ne sont pas éditables car les techniciens qui utiliseront ce logiciel intranet ne doivent pas changer ces 3 paramètres, ils doivent changer uniquement les 3 autres paramètres des input éditables :
    -disponibilité : deux choix possibles dans un combobox ( "Attente" veut dire que la maintenance mensuelle n'a pas encore été faite, et "Fait" veut dire que la maintenance mensuelle a déjà été faite).
    -date d'intervention : un input de type "date" qui représente la date à laquelle la maintenance mensuelle a été faite
    -notes maintenance : un input de type "text" qui représente les différentes notes liées à la maintenance mensuelle faite (par exemple : ce mois-ci j'ai réparé le pc de Jacquie et Michel dont leur adresse ip est..)

    Le réel problème c'est que lorsque je veux enregistrer les données éditées dans le tableau en cliquant sur "Valider", l'enregistrement fonctionne bien mais UNIQUEMENT pour le client dont l'ID est 2, c'est à dire que les modifications apportées au client dont l'ID est 1 non pas été validées et les données restent telles qu'elles étaient avant, alors que les données du client dont l'ID est 2 ont été correctement enregistrées dans la BDD. Je sollicite votre généreuse aide concernant mon problème qui est au dessus de mes compétences et de ma patience. Merci d'avance !

    Voici la vue de mon tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    <?php
    session_start();
    ?>
     
    <html>
    <head>
     
    <meta charset="utf-8"/ >
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel ="stylesheet" href = "main.css" type = "text/css">
    <link rel="stylesheet" media="screen and (min-device-width:768px) and (max-device-width:1023px)" href="mainMin768.css" type="text/css" />
    <link rel="stylesheet" media="screen and (min-device-width:1024px) and (max-device-width:1300px)" href="mainMin1024.css" type="text/css" />
    <link rel="stylesheet" media="screen and (min-device-width:1301px) and (max-device-width:1400px)" href="mainMin1301.css" type="text/css" />
    <link rel="stylesheet" media="screen and (min-device-width:1401px)" href="mainMin1401.css" type="text/css" />
     
        <title>InfobisPro</title>
     
    </head>
     
    <body style="background-color: black; color:white;">
    <div id = "bienvenueCal" style ="text-align:center; margin-top:2%; font-size:20px;">
        <h1>Bienvenue sur la page du calendrier mensuel !</h1><br>
    </div>    
    <script type="text/javascript"> 
    function ConfirmMessage() {
        if (confirm("Voulez-vous modifier ce client ?")){
            alert("Le client a bien été modifié !");
            window.location.assign('v_liste.php');
        }
    }
     
    function ConfirmMessageDelete() {
        if (confirm("Voulez-vous réinitialiser toutes les données de tous les clients ?")){
            alert("Toutes les données de tous les clients ont été réinitialisées");
            window.location.assign('v_calendrier.php');
        }
    }
    </script>
     
    <?php
     
    $pdo = new PDO('mysql:host=localhost;dbname=fichesclients','root','');
    $sql = 'SELECT * FROM infocalendrier';
    $req = $pdo->query($sql); 
    ?>
    <form method="post" action="v_liste.php">
              <INPUT class ="boutonRetourCal" TYPE="submit" value="Retour"/>
     
    </form>
    <form action ="v_calendrier.php" method="post">    
    <table class = "tableCalendrier">
        <tr>
            <th>Numéro du Client
            </th>
     
            <th>Nom de société
            </th>
            <th>
                Type de contrat
            </th>
            <th>
                Disponibilité
            </th>
            <th>
                Dates d'intervention
            </th>
            <th>
                Notes de Maintenance
            </th>
        </tr>
     <tr>
    <?php
         while($row = $req->fetch()){ ?>
            <td><input class ="inputCal" style="text-align:center;" type="text" name = "idCal" value="<?php echo $row['idCal']; ?>" readonly></td>
            <td><input class ="inputCal" style="text-align:center;" type="text" name = "societeClient" value="<?php echo $row['societeClient']; ?>" readonly></td>
            <td><input class ="inputCal" style="text-align:center;" type="text" name = "typeContrat" value="<?php echo $row['typeContrat']; ?>" readonly></td>
            <td style="text-align:center; ";><select class ="inputCal" style ="width:100%; height:100%; text-align-last:center;" name="dispoCal" selected="<?php echo($row['dispoCal']); ?>">
                <option value="Attente"<?php if (isset($_POST['dispoCal']) && $_POST['dispoCal']== "Attente"){echo "selected";} ?>>Attente</option><option value="Fait"<?php if (isset($_POST['dispoCal']) && $_POST['dispoCal']== "Fait"){echo "selected";} ?>>Fait</option></select></td>
            <td><input class ="inputCal" type="date" name = "dateCal" value="<?php echo $row['dateCal']; ?>"></td>
            <td><input class ="inputCal" type="text" name = "notesCal" value="<?php echo $row['notesCal']; ?>"></td>    
    </tr>  
    <?php 
    }
    $req->closeCursor();
    ?>
     
    </table>
    <input class="boutonValiderCal" type="submit"  name="validerCal" value="Valider" onClick="ConfirmMessage()"/>   
    </form>
     
    <form action ="v_calendrier.php" method="post"> 
    <input class="boutonDeleteCal" type="submit"  name="deleteCal" value="Réinitialisation mensuelle" onClick="ConfirmMessageDelete()"/>  
    </form>
     
    <?php  
     
    if (isset($_POST['validerCal']))
    {
        $cnx = mysql_connect("localhost", "root", "");
        $db = mysql_select_db("fichesclients");
        $idCal = mysql_real_escape_string($_POST['idCal']);
        $societeClient = mysql_real_escape_string($_POST['societeClient']);
        $typeContrat = mysql_real_escape_string($_POST['typeContrat']);
        $dispoCal = mysql_real_escape_string($_POST['dispoCal']);
        $dateCal = mysql_real_escape_string($_POST['dateCal']);
        $notesCal = mysql_real_escape_string($_POST['notesCal']);
     
        $sql = "UPDATE infocalendrier SET societeClient = '$societeClient', typeContrat = '$typeContrat', dispoCal = '$dispoCal', dateCal = '$dateCal', notesCal = '$notesCal' WHERE idCal in ('$idCal')";
     
        $requete = mysql_query($sql, $cnx) or die(mysql_error());
    }
     
     
    ?>
     
    </body>
    </html>
    Et un screen de ma pauvre table "infocalendrier" de ma base de données "fichesclients" :Nom : bddTableau.png
Affichages : 116
Taille : 7,6 Ko

  2. #2
    Membre Expert
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Par défaut
    Dans ton form tu as plusieurs lignes. Donc plusieurs champs qui s'appellent "idCal" ou "societeClient" (regarde le code source). Je suppose que quand tu fais le submit c'est la dernière valeur qui est envoyée.
    L'Idée est de mettre un form par ligne de tableau et aussi un bouton submit. De ce fait quand tu cliques sur le bouton ça n'envoie qu'un champ "idCal", "societeClient", etc...

    Essaie comme ça. Bien entendu pas testé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
     
    <?php
    session_start();
     
     if (isset($_POST['validerCal']))
    {
        $cnx = mysql_connect("localhost", "root", "");
        $db = mysql_select_db("fichesclients");
        $idCal = mysql_real_escape_string($_POST['idCal']);
        $societeClient = mysql_real_escape_string($_POST['societeClient']);
        $typeContrat = mysql_real_escape_string($_POST['typeContrat']);
        $dispoCal = mysql_real_escape_string($_POST['dispoCal']);
        $dateCal = mysql_real_escape_string($_POST['dateCal']);
        $notesCal = mysql_real_escape_string($_POST['notesCal']);
     
        $sql = "UPDATE infocalendrier SET societeClient = '$societeClient', typeContrat = '$typeContrat', dispoCal = '$dispoCal', dateCal = '$dateCal', notesCal = '$notesCal' WHERE idCal in ('$idCal')";
     
        $requete = mysql_query($sql, $cnx) or die(mysql_error());
    }
    ?>
     
    <html>
    <head>
     
    <meta charset="utf-8"/ >
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel ="stylesheet" href = "main.css" type = "text/css">
    <link rel="stylesheet" media="screen and (min-device-width:768px) and (max-device-width:1023px)" href="mainMin768.css" type="text/css" />
    <link rel="stylesheet" media="screen and (min-device-width:1024px) and (max-device-width:1300px)" href="mainMin1024.css" type="text/css" />
    <link rel="stylesheet" media="screen and (min-device-width:1301px) and (max-device-width:1400px)" href="mainMin1301.css" type="text/css" />
    <link rel="stylesheet" media="screen and (min-device-width:1401px)" href="mainMin1401.css" type="text/css" />
     
        <title>InfobisPro</title>
     
    </head>
     
    <body style="background-color: black; color:white;">
    <div id = "bienvenueCal" style ="text-align:center; margin-top:2%; font-size:20px;">
        <h1>Bienvenue sur la page du calendrier mensuel !</h1><br>
    </div>    
    <script type="text/javascript"> 
    function ConfirmMessage() {
        if (confirm("Voulez-vous modifier ce client ?")){
            alert("Le client a bien été modifié !");
            window.location.assign('v_liste.php');
        }
    }
     
    function ConfirmMessageDelete() {
        if (confirm("Voulez-vous réinitialiser toutes les données de tous les clients ?")){
            alert("Toutes les données de tous les clients ont été réinitialisées");
            window.location.assign('v_calendrier.php');
        }
    }
    </script>
     
    <?php
     
    $pdo = new PDO('mysql:host=localhost;dbname=fichesclients','root','');
    $sql = 'SELECT * FROM infocalendrier';
    $req = $pdo->query($sql); 
    ?>
    <form method="post" action="v_liste.php">
              <INPUT class ="boutonRetourCal" TYPE="submit" value="Retour"/>
     
    </form>  
    <table class = "tableCalendrier">
        <tr>
            <th>Numéro du Client
            </th>
     
            <th>Nom de société
            </th>
            <th>
                Type de contrat
            </th>
            <th>
                Disponibilité
            </th>
            <th>
                Dates d'intervention
            </th>
            <th>
                Notes de Maintenance
            </th>
        </tr>
     <tr>
    <?php
         while($row = $req->fetch()){ ?>
    	   <form action ="v_calendrier.php" method="post">  
            <td><input class ="inputCal" style="text-align:center;" type="text" name = "idCal" value="<?php echo $row['idCal']; ?>" readonly></td>
            <td><input class ="inputCal" style="text-align:center;" type="text" name = "societeClient" value="<?php echo $row['societeClient']; ?>" readonly></td>
            <td><input class ="inputCal" style="text-align:center;" type="text" name = "typeContrat" value="<?php echo $row['typeContrat']; ?>" readonly></td>
            <td style="text-align:center; ";><select class ="inputCal" style ="width:100%; height:100%; text-align-last:center;" name="dispoCal" selected="<?php echo($row['dispoCal']); ?>">
                <option value="Attente"<?php if (isset($_POST['dispoCal']) && $_POST['dispoCal']== "Attente"){echo "selected";} ?>>Attente</option><option value="Fait"<?php if (isset($_POST['dispoCal']) && $_POST['dispoCal']== "Fait"){echo "selected";} ?>>Fait</option></select></td>
            <td><input class ="inputCal" type="date" name = "dateCal" value="<?php echo $row['dateCal']; ?>"></td>
            <td><input class ="inputCal" type="text" name = "notesCal" value="<?php echo $row['notesCal']; ?>"></td>    
    		<td><input class="boutonValiderCal" type="submit"  name="validerCal" value="Valider" onClick="ConfirmMessage()"/></td>    
           </form>
    </tr>  
    <?php 
    }
    $req->closeCursor();
    ?>
     
    </table>
     
     
    <form action ="v_calendrier.php" method="post"> 
    <input class="boutonDeleteCal" type="submit"  name="deleteCal" value="Réinitialisation mensuelle" onClick="ConfirmMessageDelete()"/>  
    </form>
     
     
    </body>
    </html>

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2017
    Messages : 44
    Par défaut
    Cela ne marche pas
    Le but c'est justement de ne pas avoir a faire la manipulation de la modification des clients 1 par 1 mais plutôt de modifier tous les clients nécessaire et lorsque le technicien clique sur "valider" tous les clients qui ont été modifiés ( 2 ou 3 par exemple) le sont aussi dans la base de données. Donc une requête pour chaque ligne modifiée du tableau et sur chaque ligne il y a un contenu différent

  4. #4
    Membre Expert
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Par défaut
    Alors.
    Une form suppose que tous les champs qui la composent aient des noms différents. Si tu regardes le source de la page tu verras que tu as 2 idCal, etc... Quand tu fais le submit un seul idCal est envoyé.
    Donc soit tu fais une form par ligne soit tu te débouilles pour que chaque champ ait un nom différent.
    Autre solution. Passer par Ajax.

    Dans le code que j'ai posté as-tu mis des traces pour voir les instructions qui étaient exécutées.

  5. #5
    Membre Expert
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Par défaut
    Il faut déplacer le <tr> surligné dans le while.

    Nom : 170217-001.JPG
Affichages : 91
Taille : 73,5 Ko

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2017
    Messages : 44
    Par défaut
    Merci beaucoup, cette technique marche très bien, de mettre un input "valider" à chaque ligne du tableau, les données s'enregistrent correctement dans la BDD, j'ai juste un léger problème :
    -lorsque je valide une ligne, j'aimerais que lors du ré-affichage de la page, la selection par défaut soit celle qui a été modifié dans la BDD, c'est à dire si on modifie un client et qu'on passe de "Attente" à "Fait", il faudrait que lorsque qu'on valide ce client et qu'on veut en modifier un autre, et bien dans le combobox du client déjà modifié, la valeur soit "Fait" et non "Attente" comme avant la modification.

Discussions similaires

  1. Enregistrement dans bdd à partir d'un formulaire
    Par tournette dans le forum Langage
    Réponses: 3
    Dernier message: 28/11/2016, 09h30
  2. Enregistrer le contenu d'un tableau en BDD
    Par albund dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 18/07/2012, 15h58
  3. [MySQL] Modifier un champ d'une bdd à partir d'un tableau php
    Par pepone44 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 26/05/2008, 11h12
  4. [MySQL] Comment ecrire dans une BDD à partir d'un tableau ?
    Par weed dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 16/09/2005, 15h53
  5. courbe à partir d'un tableau
    Par chafcha dans le forum MFC
    Réponses: 3
    Dernier message: 26/02/2004, 08h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo