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 :

Insertion dans BDD [PDO]


Sujet :

PHP & Base de données

  1. #1
    Invité
    Invité(e)
    Par défaut Insertion dans BDD
    Code :
    Code HTML : 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
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    <!DOCTYPE html>
    <html lang="fr">
     
    <head>
        <meta charset="utf-8">
        <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <link rel="stylesheet" href="../css/bootstrap.css">
        <link rel="stylesheet" href="../css/style.css">
        <link rel="stylesheet" href="../css/carousel.css">
        <title>Comptabilité</title>
        <script src="../js/jquery.js"></script>
        <script src="../js/bootstrap.min.js"></script>
     
    <body>
    <?php
    try{
        $bdd=new PDO('mysql:host=localhost;dbname=pcg;charset=utf8', 'root','');
        $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);// afficher les erreurs php
    }catch(Exception $e){
        die('Erreur :' . $e->getMessage());
    }
    if(// Vérifie si les champs existent et ne sont pas vides
        isset($_POST['nom'])
        AND isset($_POST['irrecouvrable'])
        AND isset($_POST['creancesTTC'])
        AND isset($_POST['provisionsTaux'])
        AND isset($_POST['provisionsanterieures'])
        AND !empty($_POST['nom'])
        AND !empty($_POST['irrecouvrable'])
        AND !empty($_POST['creancesTTC'])
        AND !empty($_POST['provisionsTaux'])
        AND !empty($_POST['provisionsanterieures'])
    ){
        if(!isset($errors)){
            // insertion dans la BDD
            $clientsdouteux =$bdd->prepare("INSERT INTO clientsdouteux(nom, irrecouvrable, creancesTTC, provisionsTaux, provisionsanterieures) VALUES(?,?,?,?,?)");
            $clientsdouteux->execute(array($_POST['nom'], $_POST['irrecouvrable'], $_POST['creancesTTC'], $_POST['provisionsTaux'], $_POST['provisionsanterieures']));
            if($clientdouteux->rowCount()>0){
                $successMsg = 'Le client douteux a bien été ajouté !';
            }else{
                $errorMsg[]='Suite à un problème dans la base de données, le client douteux n\'a pas pu être ajouté !';
            }
            $clientdouteux->closeCursor();
        }
     
        if (!preg_match('#^[a-zA-Z1-9\-\'ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ]{2,500}$#',$_POST['nom'])) {
            $errors[] = 'Champ invalide';
        }
        if (!preg_match('#^\b(?=.*\boui)(?=.*\bnon){2}$#',$_POST['irrecouvrable'])) {
            $errors[] = 'Champ invalide';
        }
        if(!preg_match('#^[0-9]{1,10}([.,][0-9]{1,2})?$#', $_POST['creancesTTC'])){
            $errors[] = "Champ invalide";
        }
        if(!preg_match('#^[0-9]{1,10}([.,][0-9]{1,2})?$#', $_POST['provisionsTaux'])){
            $errors[] = "Champ invalide";
        }
        if(!preg_match('#^[0-9]{1,10}([.,][0-9]{1,2})?$#', $_POST['provisionsanterieures'])){
            $errors[] = "Champ invalide";
        }
     
    }
        
    $response = $bdd->query('SELECT * FROM clientsdouteux');
    $clientsdouteux = $response->fetchAll();
    ?>
     
        <div id="clientsdouteux">
            <div class="container">
                <div class="row">
                    <div class="col-sm-12">
                        <h1 style="font-size:25px;text-align:center;color:black;">Tableau d'ajustement des provisions des clients douteux</h1>
                        <form name="clientsdouteux" method="POST" action="clientsdouteux.php">
                            <input name="nom" id="nom" type="text" placeholder="Nom du client">
                            <input name="irrecouvrable" id="irrecouvrable" type="text" placeholder="Irrécouvrable? oui ou non"><br>
                            <input name="creancesTTC" id="creancesTTC" type="text" placeholder="Créances TTC">
                            <input name="provisionsTaux" id="provisionsTaux" type="text" placeholder="Provisions Taux"><br>
                            <input name="provisionsanterieures" id="provisionsanterieures" type="text" placeholder="Provisions antérieures">
                            <input type="submit" value="Envoyer">
                        </form>
                        <?php
                            if(!empty($clientsdouteux)){
                        ?>
                        <table>
                            <tr>
                                <th rowspan="2">Clients</th>
                                <th rowspan="2">Irrécouvrable? Oui ou Non</th>
                                <th rowspan="2">Créances TTC</th>                        
                                <th colspan="2">Créeanes irrécouvrables</th>
                                <th colspan="2">Créances douteuses</th>
                                <th colspan="2">Provisions</th>
                                <th rowspan="2">Provisions antérieures</th>
                                <th colspan="2">Ajustements</th>
                            </tr>
                            <tr>
                                <th>Hors Taxes</th> <th>TVA</th> 
                                <th>TTC</th> <th>Hors Taxes</th>
                                <th>Taux</th> <th>Montant</th> 
                                <th>Dotation</th> <th>Reprises</th>
                            </tr>
                            <?php
                                foreach($clientsdouteux as $data){
                                    echo'<tr><td>'.htmlspecialchars($data($_POST['nom'])).'</td><td>'.htmlspecialchars($data($_POST['irrecouvrable'])).'</td><td>'.htmlspecialchars($data($_POST['creancesTTC'])).'</td><td>'.htmlspecialchars($data($_POST['provisionsTaux'])).'</td><td>'.htmlspecialchars($data($_POST['provisionsanterieures'])).'</td></tr>';
                                
                                }
                            ?>
                        </table>
                        <?php
                        }
                        ?>
                    </div>
                </div>
            </div>
        </div>
    <?php
        
        // Si l'array errors existe, on affiche toutes les erreurs qu'il contient avec un foreach
        if(isset($errors)){
            foreach($errors as $errorMsg){
                echo '<p style="color:red;">'.$errorMsg.'</p>';
            }
        }
        // Si successMsg existe, alors on l'affiche
        if(isset($successMsg)){
            echo '<p style="color:#00FF00;">'.$successMsg.'</p>';
        }
        ?>
        <script type="application/javascript" src="../js/jquery-3.3.1.min.js"></script>
        <script src="../js/script.js"></script>
    </body>
     
    </html>

    Mon souci est que je n'arrive pas à trouver l'erreur qui m'empêche d'insérer dans ma bdd dont voici la structure

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE TABLE `clientsdouteux` (
      `id` int(11) NOT NULL,
      `nom` text NOT NULL,
      `irrecouvrable` text NOT NULL,
      `creancesTTC` decimal(10,2) NOT NULL,
      `provisionsTaux` decimal(2,0) NOT NULL,
      `provisionsanterieures` decimal(10,2) NOT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    Merci d'avance
    Dernière modification par ProgElecT ; 01/12/2018 à 21h13. Motif: S'il vous plait, autant que possible, indiquer le langage utilisé, [CODE=xyz], pour activer la bonne coloration syntaxique.

  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
    En marge de ton problème.

    Tu fais les contrôles après l'insertion dans la BDD. Il faut les faire avant. Tu ne contrôles pas l'existence d'un nom dans la base avant de l'insérer.
    De plus tu indiques "Champ invalide" mais sans préciser lequel.

  3. #3
    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
    Le champ id n'a aucune valeur.

    Fatal error: Uncaught PDOException: SQLSTATE[HY000]: General error: 1364 Field 'id' doesn't have a default value in C:\Program Files (x86)\EasyPHP-Devserver-17\eds-www\tests\clientsdouteux.php:48 Stack trace: #0 C:\Program Files (x86)\EasyPHP-Devserver-17\eds-www\tests\clientsdouteux.php(48): PDOStatement->execute(Array) #1 {main} thrown in C:\Program Files (x86)\EasyPHP-Devserver-17\eds-www\tests\clientsdouteux.php on line 48
    Une fois le problème de table résolu ... ajout d"un auto incrément sur le champ id + primary key.

    Notice: Undefined variable: clientdouteux in C:\Program Files (x86)\EasyPHP-Devserver-17\eds-www\tests\clientsdouteux.php on line 49

    Fatal error: Uncaught Error: Call to a member function rowCount() on null in C:\Program Files (x86)\EasyPHP-Devserver-17\eds-www\tests\clientsdouteux.php:49 Stack trace: #0 {main} thrown in C:\Program Files (x86)\EasyPHP-Devserver-17\eds-www\tests\clientsdouteux.php on line 49
    Une fois le problème de variable résolu... (et l'insertion fonctionne)

    Fatal error: Uncaught Error: Function name must be a string in C:\Program Files (x86)\EasyPHP-Devserver-17\eds-www\tests\clientsdouteux.php:114 Stack trace: #0 {main} thrown in C:\Program Files (x86)\EasyPHP-Devserver-17\eds-www\tests\clientsdouteux.php on line 114
    Nom : Capture20181202_001.JPG
Affichages : 183
Taille : 46,0 Ko

    On peut inventer une syntaxe... mais généralement ça ne fonctionne pas. Quel phénomène informatique ferait que $data contiendrait comme indices les valeurs de $_POST ? Et pourquoi des parenthèses ?

    Bref je pensais trouver/résoudre un problème mais il y en a plein.

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    CREATE TABLE `clientsdouteux` (
      `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
      `nom` text NOT NULL,
      `irrecouvrable` text NOT NULL,
      `creancesTTC` decimal(10,2) NOT NULL,
      `provisionsTaux` decimal(2,0) NOT NULL,
      `provisionsanterieures` decimal(10,2) NOT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;

  4. #4
    Expert confirmé
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 100
    Par défaut
    Je plussoie badaze, des données POST qui vont directement dans la base, c’est dangereux, il faut les filtrer avant.

    Sachant que les données de formulaire arrivent toujours avec le type string, et que la conversion en nombre est le filtrage le plus simple ; il serait intéressant de réécrire, entre autres, la valeur « irrecouvrable », qui est actuellement oui / non, par un nombre 1 / 0.

    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <input type="radio" name="irrecouvrable" id="irrecouvrable-oui" value="1" />
    <label for="irrecouvrable-oui">Oui</label>
    <input type="radio" name="irrecouvrable" id="irrecouvrable-non" value="0" />
    <label for="irrecouvrable-non">Non</label>

    Je convertirais ensuite cette valeur avec boolval ou intval.

    Pour les nombres à virgule, il faut être prudent à cause du problème de précision de la représentation à virgule flottante. L’idéal serait de pouvoir toujours travailler en centimes pour ne manipuler que des nombres entiers.

    Code PHP : 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
        preg_match('#^(\\d{1,10})(?:[.,](\\d{1,2}))?$#', $_POST['creancesTTC'], $matches);
        var_dump($matches);
        if (empty($matches)) {
            $errors[] = 'Champ CreancesTTC invalide';
        }
        else {
            $highValue = intval($matches[1]);
            if (isset($matches[2])) {
                $lowValue = intval($matches[2]);
                if (strlen($matches[2]) < 2) {
                    $lowValue *= 10;
                }
                $highValue = 100 * $highValue + $lowValue;
            }
            $creancesTTC = $highValue;
        }

    Pour la syntaxe de regexp (?: … ) voir non capturing groups.

    Pour la gestion des accents, il y a plus simple et plus fiable si on utilise une regexp en mode unicode (avec un drapeau u à la fin). La classe spéciale \p{L} permet de valider toute lettre reconnue dans le plan de base unicode. C’est à la fois assez permissif pour autoriser les noms avec des caractères exotiques, tout en étant suffisamment restrictif pour empêcher les attaques par injection de code.

    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    if (!preg_match('#^[-1-9\'\\p{L}]{2,500}$#u', $_POST['nom'])) {

    Autre chose, le charset de la table est déclaré latin1 alors que la connexion utilise utf8. Il va falloir choisir l’un ou l’autre. Mieux encore, on peut opter pour utf8mb4 qui gère correctement les séquences à 4 octets.

    Une dernière chose : quand on utilise empty, ce n’est pas nécessaire d’appeler isset.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  5. #5
    Invité
    Invité(e)
    Par défaut insertion BDD résolu
    Code :

    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
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    <?php
    try{
        $bdd=new PDO('mysql:host=localhost;dbname=pcg;charset=utf8', 'root','');
        $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);// afficher les erreurs php
    }catch(Exception $e){
        die('Erreur :' . $e->getMessage());
    }
    if(// Vérifie si les champs existent et ne sont pas vides
        isset($_POST['nom'],
            $_POST['irrecouvrable'],
            $_POST['creancesTTC'],
            $_POST['provisionsTaux'],
            $_POST['provisionsanterieures']
        )
        AND !empty($_POST['nom'])
        AND !empty($_POST['irrecouvrable'])
        AND !empty($_POST['creancesTTC'])
        AND !empty($_POST['provisionsTaux'])
        AND !empty($_POST['provisionsanterieures'])
    ){
            if(!isset($errors)){
            // insertion dans la BDD
            $clientsdouteux =$bdd->prepare("INSERT INTO clientsdouteux(nom, irrecouvrable, creancesTTC, provisionsTaux, provisionsanterieures) VALUES(?,?,?,?,?)");
            $clientsdouteux->execute(array($_POST['nom'], $_POST['irrecouvrable'], $_POST['creancesTTC'], $_POST['provisionsTaux'], $_POST['provisionsanterieures']));
            if($clientsdouteux->rowCount()>0){
                $successMsg = 'Le client douteux a bien été ajouté !';
            }else{
                $errorMsg[]='Suite à un problème dans la base de données, le client douteux n\'a pas pu être ajouté !';
            }
            $clientsdouteux->closeCursor();
        }
        if(!preg_match('#^[a-zA-Z\-\'ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ]{50}$#',$_POST['nom'])){
            $errors[] = 'Champ invalide<br>';
        }
        if(!preg_match('#^[0-9]{1,10}([.,][0-9]{1,2})?$#', $_POST['creancesTTC'])){
            $errors[] = "Champ invalide";
        }
        if(!preg_match('#^[0-9]{1,10}([.,][0-9]{1,2})?$#', $_POST['provisionsTaux'])){
            $errors[] = "Champ invalide";
        }
        if(!preg_match('#^[0-9]{1,10}([.,][0-9]{1,2})?$#', $_POST['provisionsanterieures'])){
            $errors[] = "Champ invalide";
        }    
    }
    $response = $bdd->query('SELECT * FROM clientsdouteux');
    $clientsdouteux = $response->fetchAll();
    ?>
    <!DOCTYPE html>
    <html lang="fr">
     
    <head>
        <meta charset="utf-8">
        <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <link rel="stylesheet" href="../css/bootstrap.css">
        <link rel="stylesheet" href="../css/style.css">
        <link rel="stylesheet" href="../css/carousel.css">
        <title>Comptabilité</title>
        <script src="../js/jquery.js"></script>
        <script src="../js/bootstrap.min.js"></script>
     
    <body>
        <div id="clientsdouteux">
            <div class="container">
                <div class="row">
                    <div class="col-sm-12">
                        <h1 style="font-size:25px;text-align:center;color:black;">Tableau d'ajustement des provisions des clients douteux</h1>
                        <form name="clientsdouteux" method="POST" action="clientsdouteux.php">
                            <input name="nom" id="nom" type="text" placeholder="Nom du client">
                            <input name="irrecouvrable" id="irrecouvrable" type="text" placeholder="Irrécouvrable? oui ou non"><br>
                            <input name="creancesTTC" id="creancesTTC" type="number" step=0.01 placeholder="Créances TTC">
                            <input name="provisionsTaux" id="provisionsTaux" type="number" step=0.01 placeholder="Provisions Taux"><br>
                            <input name="provisionsanterieures" id="provisionsanterieures" type="number" step=0.01 placeholder="Provisions antérieures">
                            <input type="submit" value="Envoyer">
                        </form><br>
                        <?php
                        if (!empty($clientsdouteux)){
                            $response = $bdd->query('SELECT * FROM clientsdouteux');
                            $clientsdouteux = $response->fetchAll();
                        ?>
                        <table>
                            <tr>
                                <th rowspan="2">Clients</th>
                                <th rowspan="2">Irrécouvrable? Oui ou Non</th>
                                <th rowspan="2">Créances TTC</th>                        
                                <th colspan="2">Créeanes irrécouvrables</th>
                                <th colspan="2">Créances douteuses</th>
                                <th colspan="2">Provisions</th>
                                <th rowspan="2">Provisions antérieures</th>
                                <th colspan="2">Ajustements</th>
                            </tr>
                            <tr>
                                <th>Hors Taxes</th> <th>TVA</th> 
                                <th>TTC</th> <th>Hors Taxes</th>
                                <th>Taux</th> <th>Montant</th> 
                                <th>Dotation</th> <th>Reprises</th>
                            </tr>
                            <?php
                            foreach($clientsdouteux as $data){
                                echo '<tr><td>'.htmlspecialchars($data['nom']).'</td><td>'.htmlspecialchars($data['irrecouvrable']).'</td><td>'.htmlspecialchars($data['creancesTTC']).'</td><td>'.htmlspecialchars($data['provisionsTaux']).'</td><td>'.htmlspecialchars($data['provisionsanterieures']).'</td></tr>';
                            }
                            ?>
                        </table>
                        <?php
                        }
                        ?>
                    </div>
                </div>
            </div>
        </div>
    <?php
     
        // Si l'array errors existe, on affiche toutes les erreurs qu'il contient avec un foreach
        if(isset($errors)){
            foreach($errors as $errorMsg){
                echo '<p style="color:red;">'.$errorMsg.'</p>';
            }
        }
        // Si successMsg existe, alors on l'affiche
        if(isset($successMsg)){
            echo '<p style="color:#00FF00;">'.$successMsg.'</p>';
        }
        ?>
        <script type="application/javascript" src="../js/jquery-3.3.1.min.js"></script>
        <script src="../js/script.js"></script>
    </body>
     
    </html>
    Ce code fonctionne et affiche ce que je souhaite. Si jamais ce code peut aider d'autres personnes

  6. #6
    Expert confirmé
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 100
    Par défaut
    Citation Envoyé par mike711 Voir le message
    Si jamais ce code peut aider d'autres personnes
    Non. Tu ne peux pas donner à la communauté un script qui contient des failles de sécurité. Pour cette raison je te mets un -1.

    Les données POST vont toujours directement dans la base de données, alors que nous avons été deux (badaze et moi) à te dire qu’il fallait les filtrer avant de les insérer.
    D’ailleurs, tu sais qu’elles sont à risque car tu utilises htmlspecialchars à l’affichage. Les données dans une base doivent être propres, et on les nettoie au moment de les écrire, pas au moment de les lire.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  7. #7
    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
    @mike711

    Watilin et moi avons pris sur notre temps pour t’aider. La moindre des choses serait de nous écouter... à défaut de nous remercier.

    J’espère seulement que ce n’est pas dans le cadre de ton travail.

+ Répondre à la discussion
Cette discussion est résolue.

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