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

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    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
    Points : 34
    Points
    34
    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 : 103
Taille : 7,6 Ko

  2. #2
    Membre émérite
    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
    Points : 2 522
    Points
    2 522
    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>
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    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
    Points : 34
    Points
    34
    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 émérite
    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
    Points : 2 522
    Points
    2 522
    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.
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

  5. #5
    Membre émérite
    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
    Points : 2 522
    Points
    2 522
    Par défaut
    Il faut déplacer le <tr> surligné dans le while.

    Nom : 170217-001.JPG
Affichages : 76
Taille : 73,5 Ko
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    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
    Points : 34
    Points
    34
    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.

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    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
    Points : 34
    Points
    34
    Par défaut
    Peut être que je me suis mal exprimé, lorsque je modifie la disponibilité pour un client X, je passe de "Attente" à "Fait" et je valide, lors de la réactualisation, la disponibilité pour TOUS les clients de toutes les lignes passent de "Attente" à "Fait", j'aimerais que cela le fasse UNIQUEMENT pour le client de la ligne qui a été modifié, voilà tout.

  8. #8
    Membre émérite
    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
    Points : 2 522
    Points
    2 522
    Par défaut
    Tu remplis la combo de la manière suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <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>
    Il faut que tu te bases sur la valeur de l'enregistrement courant (comme pour les autres champs) et non pas à partir de la valeur de la variable "postée".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <select class ="inputCal" style ="width:100%; height:100%; text-align-last:center;" name="dispoCal">
        <option value="Attente"  <?php if($row['dispoCal'] == "Attente"){echo "selected";} ?>>Attente</option>
    	<option value="Fait"     <?php if($row['dispoCal'] == "Fait")   {echo "selected";} ?>>Fait</option>
    </select>
    Un conseil. Généralement en informatique on ne stocke pas des valeurs telles que "Attente" ou "Fait". On préférera avoir une table qui contient les différents états et stocker le code de l'état. Dans ton cas on aurait : code et description.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Code  Description
     ===  =======
      00     Attente
      10     Fait
    Il y a plein d'avantage dont :
    - Tu es indépendant de la description => que ton site soit en français ou en italien tu as toujours le même code (00) alors que l'utilisateur voit "Attente" ou "Attesa" (il suffit de traduire les descriptions)
    - Tu peux ajouter un état sans rien avoir à modifier. Exemple : tu as besoin de l'état "En cours".
    - Cela prend moins de place disque (ça c'est anecdotique.. quoique)

    Par contre il faut faire une fonction qui crée les options à partir des valeurs de la base de données.
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

  9. #9
    Membre émérite
    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
    Points : 2 522
    Points
    2 522
    Par défaut
    Voici un exemple pour construire la liste des options à partir d'une table de paramétrage.

    Contenu de la table etats_travaux

    Nom : 170217-003.JPG
Affichages : 63
Taille : 11,6 Ko

    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
     
    <?php 
    define('DB_HOST', '127.0.0.1');
    define('DB_NAME', 'tests');
    define('DB_USER', 'root');
    define('DB_PWD' , '');
     
     
    class optionsET {
     
    	const HOST = DB_HOST;
            const DBNA = DB_NAME;
            const USER = DB_USER;
            const PASW = DB_PWD;
     
    	private $html;
    	private $result;
     
    	function __construct() {
    		$bdd       = new PDO('mysql:host='.self::HOST.'; dbname='.self::DBNA,self::USER,self::PASW, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
    		$query     = "select code_et, desc_et from etats_travaux order by code_et";
     
    		$prepared     = $bdd->prepare($query);
    		$prepared->execute();
    		$this->result = $prepared->fetchAll();
     
    	}
     
    	public function getETOptions($selectedOption = '  ') {
    		$this->html = "<option value='--' >Sélectionner une valeur</option>".PHP_EOL;;
    		foreach ($this->result as $subArray) {
    			$selected    = $subArray['code_et'] == $selectedOption ? "selected" : "";
    			$anOption    = "<option value='".$subArray['code_et']."' $selected >".$subArray['desc_et']."</option>".PHP_EOL;
    			$this->html .= $anOption;
    		}		
    		return $this->html;
    	}
    } // class optionsET 
     
     
     
     
     
    //
    $options = new optionsET();
    ?>
    Aucune sélection : 
    <select name="dispoCal"><?php
    print $options->getETOptions();?>
    </select><br/>
     
    Sélection auto "Attente" : 
    <select name="dispoCal"><?php
    print $options->getETOptions('10');?>
    </select><br/>
    Sélection auto "En cours" : 
    <select name="dispoCal"><?php
    print $options->getETOptions('15');?>
    </select><br/>
    Sélection auto "Fait" : 
    <select name="dispoCal"><?php
    print $options->getETOptions('20');?>
    </select><br/>
    Cela donne :

    Nom : 170217-004.JPG
Affichages : 72
Taille : 22,0 Ko

    Voici le code généré par php
    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
     
    Aucune sélection : 
    <select name="dispoCal"><option value='--' >Sélectionner une valeur</option>
    <option value='10'  >Attente</option>
    <option value='15'  >En cours</option>
    <option value='20'  >Fait</option>
    </select><br/>
     
    Sélection auto "Attente" : 
    <select name="dispoCal"><option value='--' >Sélectionner une valeur</option>
    <option value='10' selected >Attente</option>
    <option value='15'  >En cours</option>
    <option value='20'  >Fait</option>
    </select><br/>
    Sélection auto "En cours" : 
    <select name="dispoCal"><option value='--' >Sélectionner une valeur</option>
    <option value='10'  >Attente</option>
    <option value='15' selected >En cours</option>
    <option value='20'  >Fait</option>
    </select><br/>
    Sélection auto "Fait" : 
    <select name="dispoCal"><option value='--' >Sélectionner une valeur</option>
    <option value='10'  >Attente</option>
    <option value='15'  >En cours</option>
    <option value='20' selected >Fait</option>
    </select><br/>
    Si tu veux tester voici le script SQL à exécuter
    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
     
    -- phpMyAdmin SQL Dump
    -- version 4.5.5.1
    -- http://www.phpmyadmin.net
    --
    -- Client :  127.0.0.1
    -- Généré le :  Ven 17 Février 2017 à 12:41
    -- Version du serveur :  5.7.11
    -- Version de PHP :  7.0.4
     
    SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
    SET time_zone = "+00:00";
     
     
    /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
    /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
    /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
    /*!40101 SET NAMES utf8mb4 */;
     
    --
    -- Base de données :  `tests`
    --
     
    -- --------------------------------------------------------
     
    --
    -- Structure de la table `etats_travaux`
    --
     
    CREATE TABLE `etats_travaux` (
      `code_et` char(2) NOT NULL,
      `desc_et` varchar(30) NOT NULL
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
     
    --
    -- Contenu de la table `etats_travaux`
    --
     
    INSERT INTO `etats_travaux` (`code_et`, `desc_et`) VALUES
    ('10', 'Attente'),
    ('15', 'En cours'),
    ('20', 'Fait');
     
    --
    -- Index pour les tables exportées
    --
     
    --
    -- Index pour la table `etats_travaux`
    --
    ALTER TABLE `etats_travaux`
      ADD PRIMARY KEY (`code_et`);
     
    /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
    /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
    /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    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
    Points : 34
    Points
    34
    Par défaut
    Merci pour cette aide formidable, je vais tenter de l'appliquer à mon code, mais j'ai une autre petite requête pour vous :
    -J'ai placé un bouton "Réinitialisation mensuelle", qui a pour action lorsque l'on clique dessus, de supprimer toutes les données de maintenance relative aux clients de ce mois-ci pour les remettre à zéro, mais apparemment on m'a dit que je dois garder les données de chaque mois pour avoir les informations des maintenances faites le mois dernier. Donc voilà mon réel problème : je dois trouver un moyen de sauvegarder les données du mois en cours avant de reset ces données et de passer à la saisie du mois prochain.

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    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
    Points : 34
    Points
    34
    Par défaut
    PS : j'ai un mini problème bien différent du reste.
    Lorsque je rentre des données et que je les enregistre dans la BDD, le metacharset utf8 ne s'applique pas ( peut être parce que j'utilise Brackets comme éditeur de code.. ) et du coup dans la base de données les accents et caractères spéciaux ne s'affichent pas correctement ( par exemple à la place de l'accent aigu "é", ça m'enregistre "é").

  12. #12
    Membre émérite
    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
    Points : 2 522
    Points
    2 522
    Par défaut
    Citation Envoyé par iVezics Voir le message
    Merci pour cette aide formidable, je vais tenter de l'appliquer à mon code, mais j'ai une autre petite requête pour vous :
    -J'ai placé un bouton "Réinitialisation mensuelle", qui a pour action lorsque l'on clique dessus, de supprimer toutes les données de maintenance relative aux clients de ce mois-ci pour les remettre à zéro, mais apparemment on m'a dit que je dois garder les données de chaque mois pour avoir les informations des maintenances faites le mois dernier. Donc voilà mon réel problème : je dois trouver un moyen de sauvegarder les données du mois en cours avant de reset ces données et de passer à la saisie du mois prochain.
    Le plus simple est d'avoir la date dans la table. Comme ça pas la peine de faire de suppressions.
    Je ne sais pas comment tu crées les enregistrements pour le mois en cours mais ensuite il suffit d'afficher ceux qui correspondent au mois en cours.
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

  13. #13
    Membre émérite
    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
    Points : 2 522
    Points
    2 522
    Par défaut
    Citation Envoyé par iVezics Voir le message
    PS : j'ai un mini problème bien différent du reste.
    Lorsque je rentre des données et que je les enregistre dans la BDD, le metacharset utf8 ne s'applique pas ( peut être parce que j'utilise Brackets comme éditeur de code.. ) et du coup dans la base de données les accents et caractères spéciaux ne s'affichent pas correctement ( par exemple à la place de l'accent aigu "é", ça m'enregistre "é").
    J'avoue à ma grande honte que je n'y connais rien en codification de caractères.
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

  14. #14
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    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
    Points : 34
    Points
    34
    Par défaut
    Voici un screen de ma table "calendrier" dont il y a déjà la date dedans Nom : tableCalendrier.png
Affichages : 75
Taille : 12,0 Ko
    Mais pour l'instant je ne prenais pas en compte le mois actuel pour l'enregistrement des données, parce qu'au début je ne pensais pas qu'il fallait que je garde les données du mois précédent.

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