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

Langage PHP Discussion :

Récupérer une valeur dans un tableau associatif multidimentionnel


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    414
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2010
    Messages : 414
    Points : 111
    Points
    111
    Par défaut Récupérer une valeur dans un tableau associatif multidimentionnel
    Bonjour

    J'ai ce tableau associatif multidimensionnel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    array(3) {  [0]=>  array(8) {    ["designation"]=>    string(6) "dfghjk"    ["num"]=>    string(10) "facture120"    ["client"]=>    string(10) "    dfghjk"    ["quantite"]=>    string(1) "2"    ["prixht"]=>    string(3) "300"    ["dateFacture"]=>    string(10) "16/03/2018"    ["facturede"]=>    string(5) "dfghj"    ["conditions"]=>    string(6) "fdghjk"  }  [1]=>  array(8) {    ["designation"]=>    string(12) "QZESRDTFGHJK"    ["num"]=>    NULL    ["client"]=>    NULL    ["quantite"]=>    NULL    ["prixht"]=>    string(3) "400"    ["dateFacture"]=>    NULL    ["facturede"]=>    NULL    ["conditions"]=>    NULL  }  [2]=>  array(8) {    ["designation"]=>    string(12) "WDXFCGHNB? V"    ["num"]=>    NULL    ["client"]=>    NULL    ["quantite"]=>    NULL    ["prixht"]=>    string(3) "600"    ["dateFacture"]=>    NULL    ["facturede"]=>    NULL    ["conditions"]=>    NULL  }}
    J'aimerais récupérer le 2eme élément du premier tableau c'est a dire l'élément :
    ["num"]=> string(10) "facture120"
    Pour récupérer le premier élément (la pemiere ligne) du tableau du tableau multidimentionnel je fait ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var_dump($facturation[0]);
    et j'obtiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    array(8) {  ["designation"]=>  string(6) "dfghjk"  ["num"]=>  string(10) "facture120"  ["client"]=>  string(10) "    dfghjk"  ["quantite"]=>  string(1) "2"  ["prixht"]=>  string(3) "300"  ["dateFacture"]=>  string(10) "16/03/2018"  ["facturede"]=>  string(5) "dfghj"  ["conditions"]=>  string(6) "fdghjk"}
    J'aimerais maintenant récupérer cet élément :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ["num"]=> string(10) "facture120"
    Merci d'avance de votre aide !
    Formatrice - Web développeuse - WebMarketing - Recrutement
    Site O'ClockWeb : http://oclockweb.cvflashjob.com/
    Mon Facebook : https://www.facebook.com/minkoueobame

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    $facturation[0]['num']
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre régulier
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    414
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2010
    Messages : 414
    Points : 111
    Points
    111
    Par défaut
    J'ai testé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var_dump($facturation[0]['num']);
    et ça me donne ça :
    Formatrice - Web développeuse - WebMarketing - Recrutement
    Site O'ClockWeb : http://oclockweb.cvflashjob.com/
    Mon Facebook : https://www.facebook.com/minkoueobame

  4. #4
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Il ne t'affiche que la 1ère lettre de ta chaîne.
    Aurais-tu xdebug activé ? Peut-être est-il paramétré pour réduire les strings à 1...

    A tout hasard, que donne ceci ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    echo '<pre>';
    print_r($facturation[0]['num']);
    echo '</pre>';
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  5. #5
    Membre régulier
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    414
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2010
    Messages : 414
    Points : 111
    Points
    111
    Par défaut
    Je n'ai pas xdebug activé, j'ai essayé de l'activé mais ça ne marche pas.

    Quand à ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo'<pre>';print_r($facturation[0]['num']); echo'</pre>';
    J'obtiens toujours le premier caractère !

    Sinon je continue à chercher comment activer xdebug !
    Formatrice - Web développeuse - WebMarketing - Recrutement
    Site O'ClockWeb : http://oclockweb.cvflashjob.com/
    Mon Facebook : https://www.facebook.com/minkoueobame

  6. #6
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Bizarre ! Et que donne ceci ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    echo '<pre>';
    print_r($facturation);
    echo '</pre>';
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  7. #7
    Membre régulier
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    414
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2010
    Messages : 414
    Points : 111
    Points
    111
    Par défaut
    Citation Envoyé par Dendrite Voir le message
    Bizarre ! Et que donne ceci ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    echo '<pre>';
    print_r($facturation);
    echo '</pre>';

    J'obtiens ça :

    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
    Array(
        [0] => Array
            (
                [designation] => dfrgthjk
                [num] => M
                [client] =>  
                [quantite] => 3
                [prixht] => 300
                [dateFacture] => 1
                [facturede] => x
                [conditions] => s
            )
     
        [1] => Array
            (
                [designation] => dfghgfgth
                [num] => O
                [client] =>  
                [quantite] => 4
                [prixht] => 400
                [dateFacture] => 6
                [facturede] => c
                [conditions] => d
            )
     )
    Formatrice - Web développeuse - WebMarketing - Recrutement
    Site O'ClockWeb : http://oclockweb.cvflashjob.com/
    Mon Facebook : https://www.facebook.com/minkoueobame

  8. #8
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Eh ben tout est normal alors. tu n'as qu'un caractère dans le champ "num".
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  9. #9
    Membre régulier
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    414
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2010
    Messages : 414
    Points : 111
    Points
    111
    Par défaut
    Non parce que dans le champ 'num' j'ai saisi 'MOA58961' . Je veux pouvoir récupérer 'MOA58961'
    Formatrice - Web développeuse - WebMarketing - Recrutement
    Site O'ClockWeb : http://oclockweb.cvflashjob.com/
    Mon Facebook : https://www.facebook.com/minkoueobame

  10. #10
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Bon reprenons depuis le début.
    Comment alimentes-tu ce tableau associatif ? Avec un formulaire ou depuis une base de données ?
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  11. #11
    Membre régulier
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    414
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2010
    Messages : 414
    Points : 111
    Points
    111
    Par défaut
    J'alimente le tableau associatif à partir d'un formulaire.

    Voici ce formulaire :
    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
    <!DOCTYPE html><html lang="en">
      <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width"/>
        <title>Créer une facture</title>
        <link rel="stylesheet" href="style.css" media="all" />
        <link rel="icon" type="image/png" href="favicon.png" />
      </head>
      <body>
        <br/><br/>
        <main>
    <?php require_once('includes/menu.php') ?>
    <br/><br/><br/>
    <form action="afficheFacture.php" method="post">
     
     
      <fieldset>
        <legend>Infos de base</legend>
        <label>Numéro de la facture *</label><br/>
        <input type="text" placeholder="Numéro de la facture" name="num" required><br/><br/>
        <label>Date de la facture *</label>
        <input type="text" placeholder="15/03/2018" name="dateFacture" required><br/><br/>
     
     
        <label>Infos de votre entreprise *</label><br/>
        <textarea id="facturede" name="facturede" rows="4" cols="45"
          placeholder="Votre entreprise: Raison sociale, adresse.." required></textarea><br/><br/>
     
     
        <label>Infos de votre client *</label><br/>
        <textarea name="client" rows="4" cols="45"
            placeholder="Facturé à: Raison sociale, adresse.." required>
        </textarea>
        <br/><br/>
        <label>Conditions et moyens de paiement *</label><br/>
        <textarea name="conditions" rows="10" cols="45"
            placeholder="Conditions et paiements" required></textarea>
      </fieldset><br/>
     
     
                <fieldset>
                <legend>Contenu de la facture *</legend>
                <div id="ID_container">
                <textarea name="designation[]" rows="4"
                  placeholder="Designation" required></textarea>
                <input type="number" placeholder="Quantité" name="quantite[]" required>
                <input type="number" placeholder="Prix HT" name="prixht[]" required>
                </div>
                <button type="button" onclick="ajout(this);">+ Ajouter une designation</button>
                <!-- <input type="number" placeholder="Taxe" name="taxe"><br/><br/> -->
                <!-- <input type="number" placeholder="Total du montant HT" name="montantHT"><br/><br/> -->
                </fieldset>
    <br/>
        <input type="submit" value ="Créer une facture" />
          </form>
          <br/>
        </main>
          <?php require_once('includes/footer.php') ?>
     
     
    <script src="js/fonctions.js"></script>
      </body>
    </html>
    Voici le fichier de traitement du formulaire afficheFacture.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
    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
    <?phprequire_once 'connexion.php';
    //On vérifie si la variable existe et sinon elle vaut NULL
    $num = isset($_POST['num']) ? $_POST['num'] : NULL;
    $client = isset($_POST['client']) ? $_POST['client'] : NULL;
    $designation = isset($_POST['designation']) ? $_POST['designation'] : NULL;
    $quantite = isset($_POST['quantite']) ? $_POST['quantite'] : NULL;
    $prixht = isset($_POST['prixht']) ? $_POST['prixht'] : NULL;
    $dateFacture = isset($_POST['dateFacture']) ? $_POST['dateFacture'] : NULL;
    $facturede = isset($_POST['facturede']) ? $_POST['facturede'] : NULL;
    $conditions = isset($_POST['conditions']) ? $_POST['conditions'] : NULL;
     
     
    // generate request params
    $params = [];
    $values = '';
    $facturation = [];
    foreach ($_POST['designation'] as $key => $designation) {
        $params[':designation' . $key] = $designation;
        $params[':num' . $key]    = $_POST['num'][$key];
        $params[':client' . $key]    = $_POST['client'][$key];
        $params[':quantite' . $key]    = $_POST['quantite'][$key];
        $params[':prixht' . $key]  = $_POST['prixht'][$key];
        $params[':dateFacture' . $key] = $_POST['dateFacture'][$key];
        $params[':facturede' . $key] = $_POST['facturede'][$key];
        $params[':conditions' . $key] = $_POST['conditions'][$key];
     
     
        $values .= '(:num' . $key . ' , :client' . $key . ', :designation' . $key . ', :quantite' . $key . ', :prixht' . $key . ', :dateFacture' . $key . ', :facturede' . $key . ', :conditions' . $key . '),';
        // prepare facturation data
        $facturation[] = [
          'designation' => $designation,
          'num'  => $_POST['num'][$key],
          'client'  => $_POST['client'][$key],
          'quantite'    => $_POST['quantite'][$key],
          'prixht'  => $_POST['prixht'][$key],
          'dateFacture'  => $_POST['dateFacture'][$key],
          'facturede'  => $_POST['facturede'][$key],
          'conditions'  => $_POST['conditions'][$key]
        ];
    }
     
     
    var_dump($facturation['num']);
     
     
    // remove trailing ","
    $values = rtrim($values, ',');
    $req = $base->prepare('INSERT INTO facturation (num, client, designation, quantite, prixht, dateFacture, facturede, conditions) VALUES '. $values);
    $req->execute($params);
    $base = null;
    ?>
     
     
    <!DOCTYPE html>
    <html lang="fr">
      <head>
        <meta charset="utf-8">
        <title>Afficher une Facture</title>
        <link rel="stylesheet" href="style.css" media="all" />
        <link rel="icon" type="image/png" href="favicon.png" />
      </head>
      <body>
        <header class="clearfix">
          <div id="logo">
            <img src="logo.png">
          </div>
          <div id="company">
          <div class="to"><h2>De:</h2> <?= $facturation[0]['facturede'] ?></div>
          </div>
        </header>
        <main>
          <div id="details" class="clearfix">
            <div id="client">
              <div class="to"><h2>Facture à:</h2> <?= $facturation[0]['client'] ?></div>
     
     
            </div>
            <div id="invoice">
              <h1>FACTURE N° <?= $facturation['num'] ?></h1>
              <div class="date">Date: <?= $facturation[0]['dateFacture'] ?></div>
            </div>
          </div>
          <?php
          echo '<pre>';
    print_r($facturation);
    echo '</pre>';
           ?>
    <table>
      <thead>
        <tr>
          <th class="desc">DESIGNATION</th>
          <th class="qty">QUANTITÉ</th>
          <th class="unit">PRIX HT</th>
          <th class="total">Total HT</th>
        </tr>
      </thead>
      <tbody>
        <?php foreach ($facturation as $presta) : ?>
        <tr>
            <td class="desc"><?= $presta['designation'] ?></td>
            <td class="qty"><?= $presta['quantite'] ?></td>
            <td class="unit"><?= $presta['prixht'] ?></td>
            <td class="total"><?= $presta['prixht'] * $presta['quantite'] ?></td>
          </tr>
        <?php endforeach; ?>
      </tbody>
    </table>
    <div id="notices">
            <div><h2>Conditions et moyens de paiement:</h2></div>
            <div class="notice"> <?php echo $conditions ?> </div>
          </div>
          <?= '<a href="facturesPDF/imprimer.php?num='.$num.'" target="_blank">Imprimer</a>' ?>
        </main>
        <?php require_once('includes/footer.php') ?>
      </body>
    </html>
    Si besoin voici mon fichier javascript qui génère certains champs du formulaire :
    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
    function ajout(element){
            var container = document.getElementById('ID_container');
     
     
            var str ='<span><textarea name="designation[]" rows="4" type="text" placeholder="Designation"></textarea>    </span><span><input name="quantite[]" type="number" placeholder="Quantité">    </span><span><input name="prixht[]" type="number" placeholder="Prix HT">    </span><span><button type="button" onclick="suppression(this)">x</button></span><br/>';
            var divNewExp = document.createElement("div");
            divNewExp.innerHTML = str ;
            container.appendChild(divNewExp);
     
     
          }
     
     
    function suppression(element){
            var container = document.getElementById('ID_container');
            container.removeChild(element.parentNode.parentNode);
          }
    Formatrice - Web développeuse - WebMarketing - Recrutement
    Site O'ClockWeb : http://oclockweb.cvflashjob.com/
    Mon Facebook : https://www.facebook.com/minkoueobame

  12. #12
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Côté traitement, tu fais ceci... 'num' => $_POST['num'][$key].

    Fais echo $_POST['num'][$key].

    Si $_POST['num'] vaut 'facturation_120', que vaudra $_POST['num'][$key] ?
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  13. #13
    Membre régulier
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    414
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2010
    Messages : 414
    Points : 111
    Points
    111
    Par défaut
    Citation Envoyé par Dendrite Voir le message
    Côté traitement, tu fais ceci... 'num' => $_POST['num'][$key].

    Fais echo $_POST['num'][$key].

    Si $_POST['num'] vaut 'facturation_120', que vaudra $_POST['num'][$key] ?
    echo $_POST['num'][$key] donne la derniere lettre saisie du champ.

    Voici les copie d'écrans :

    Nom : Créer une facture.png
Affichages : 2294
Taille : 34,5 Ko
    Nom : 127.0.0.1 8080   127.0.0.1   facturationgenerale   facturation   phpMyAdmin 4.7.0(1).png
Affichages : 2420
Taille : 92,8 Ko
    Formatrice - Web développeuse - WebMarketing - Recrutement
    Site O'ClockWeb : http://oclockweb.cvflashjob.com/
    Mon Facebook : https://www.facebook.com/minkoueobame

  14. #14
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Citation Envoyé par minfo
    echo $_POST['num'][$key] donne la derniere lettre saisie du champ.
    Oui, pour la bonne raison que tu fais une boucle sur chaque lettre de "facturation120", donc à la fin de la boucle... c'est le dernier caractère qui reste dans ta variable.
    Conclusion : tu ne fais pas du tout ce que tu voulais faire. Ca arrive souvent.

    Bon, donc tu comprends ce qu'il te reste à faire, pour num, comme pour tous les autre champs ?
    Si NULL est autorisé dans ta base :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $params[':num' . $key]    = $num;
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  15. #15
    Membre régulier
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    414
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2010
    Messages : 414
    Points : 111
    Points
    111
    Par défaut
    Est ce que c'est ce que je dois faire ?:
    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
    // generate request params$params = [];
    $values = '';
    $facturation = [];
    foreach ($_POST['designation'] as $key => $designation) {
        $params[':designation' . $key] = $designation;
        $params[':num' . $key]    = $num;
        $params[':client' . $key]    = $client;
        $params[':quantite' . $key]    = $quantite;
        $params[':prixht' . $key]  = $prixht;
        $params[':dateFacture' . $key] = $dateFacture;
        $params[':facturede' . $key] = $facturede;
        $params[':conditions' . $key] = $conditions;
     
     
        $values .= '(:num' . $num . ' , :client' . $client . ', :designation' . $designation . ', :quantite' . $quantite . ', :prixht' . $prixht . ', :dateFacture' . $dateFacture . ', :facturede' . $facturede . ', :conditions' . $conditions . '),';
        // prepare facturation data
        $facturation[] = [
          'designation' => $designation,
          'num'  => $_POST['num'][$key],
          'client'  => $_POST['client'][$key],
          'quantite'    => $_POST['quantite'][$key],
          'prixht'  => $_POST['prixht'][$key],
          'dateFacture'  => $_POST['dateFacture'][$key],
          'facturede'  => $_POST['facturede'][$key],
          'conditions'  => $_POST['conditions'][$key]
        ];
    }
    Mais ça me fait obtenir cette erreur :
    Fatal error: Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in C:\Program Files (x86)\EasyPHP-Devserver-17\eds-www\Facturation_generale\afficheFacture.php:46Stack trace:#0 C:\Program Files (x86)\EasyPHP-Devserver-17\eds-www\Facturation_generale\afficheFacture.php(46): PDOStatement->execute(Array)#1 {main} thrown in C:\Program Files (x86)\EasyPHP-Devserver-17\eds-www\Facturation_generale\afficheFacture.php on line 46
    Et voici la ligne 46 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $req->execute($params);
    Formatrice - Web développeuse - WebMarketing - Recrutement
    Site O'ClockWeb : http://oclockweb.cvflashjob.com/
    Mon Facebook : https://www.facebook.com/minkoueobame

  16. #16
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Bon, je ne vais pas te raconter de salades, je ne parviens pas à rentrer dans la logique de ton code actuel..
    Tu as bien compris ceci dit que ton problème vient de la façon dont tu insères les données dans ta base, qui ne fonctionne pas.
    Repartons de plus concret : on veut obtenir ça (manuel PHP), soit la technique des requêtes préparées avec marqueurs nommés, et on souhaite autant que possible automatiser les choses avec nos noms de variables, sans les mettre en dur ?
    Je te laisse réfléchir dans ton coin, mais promis, je suis dessus aussi en même temps...

    Moi quand je suis perdue, je me raccroche au manuel PHP comme un chrétien se raccroche à sa bible...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (:name, :value)");
    $stmt->bindParam(':name', $name);
    $stmt->bindParam(':value', $value);
     
    // insertion d'une ligne
    $name = 'one';
    $value = 1;
    $stmt->execute();
     
    // insertion d'une autre ligne avec des valeurs différentes
    $name = 'two';
    $value = 2;
    $stmt->execute();
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  17. #17
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Tu peux tester ça dans un nouveau fichier traitement.php ?
    Bien sûr, n'oublie de faire pointer ton formulaire sur cette nouvelle page :

    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
    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
    <?php
    if(isset($_POST)){
    	//on veut obtenir ça
    	/*
    	1) $stmt = $dbh->prepare ("INSERT INTO user (firstname, surname) VALUES (:fname, :sname)");
    	2) $stmt -> bindParam(':fname', 'John');
    	$stmt -> bindParam(':sname', 'Smith');
    	$stmt -> execute();
    	*/
    	//nos 8 champs (j'ai horreur de la répétition)
    	$fields=array('designation','num','client','quantite','prixht','dateFacture','facturede','conditions');
     
    	//On vérifie si la variable existe et sinon elle vaut NULL
    	foreach($fields as $field){
    		$$field = isset($_POST[$field]) ? $_POST[$field] : NULL;
    	}
    	//on passe à 1)
    	$sql='INSERT INTO facturation (';
    	foreach($fields as $field){
    		$sql.=$field.',';
    	}
    	$sql=substr($sql,0,-1);
    	$sql.=') VALUES (';
    	foreach($fields as $field){
    		$sql.=':'.$field.',';
    	}
    	$sql=substr($sql,0,-1);
    	$sql.=')';
    	//INSERT INTO facturation (designation,num,client,quantite,prixht,dateFacture,facturede,conditions) VALUES (:designation,:num,:client,:quantite,:prixht,:dateFacture,:facturede,:conditions)
    	//on passe à 2
    	foreach($fields as $field){
    		$stmt -> bindParam(':'.$field,${$field});
    	}
    	if($stmt -> execute()){
    		echo 'insertion réussie !';
    	}
    	else{
    		echo 'Ouch !';
    	}
    }
    ?>
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  18. #18
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Ce que tu fais n'a aucun sens...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     <input type="text" placeholder="Numéro de la facture" name="num" required><br/>
    Ici, on ne récupère qu'un et un seul numéro avec $_POST['num'].

    $_POST['num'][$key] n'a donc aucun sens.

    Je doute que tu comprennes toi-même ce que tu fais.

    Fais un var_dump($_POST);. Au moins tu verras ce que tu récupères...
    Dernière modification par rawsrc ; 19/03/2018 à 00h03.

  19. #19
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Ce que tu dois déterminer, c'est ce qui est unique et ce qui multiple.
    Tu as une seule facture, avec un numéro, un client, une date.
    Tu as plusieurs désignations, quantités et prix.

    Donc quand tu boucles sur les désignations, il faut utiliser la même valeur de numéro de facture pour tous les tours de boucles, mais une valeur différente de désignation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    foreach ($_POST['designation'] as $key => $designation) {
        $params[':designation' . $key] = $designation; // multiple, on utilise la valeur de la boucle
        $params[':num' . $key]    = $_POST['num']; // unique : tout est dans la même facture
        $params[':client' . $key]    = $_POST['client']; // unique : tout est pour le même client
        $params[':quantite' . $key]    = $_POST['quantite'][$key]; // multiple, on utilise la valeur de la boucle
        $params[':prixht' . $key]  = $_POST['prixht'][$key]; // multiple, on utilise la valeur de la boucle
        $params[':dateFacture' . $key] = $_POST['dateFacture']; // unique : tout est dans la même facture
        $params[':facturede' . $key] = $_POST['facturede']; // unique : tout est dans la même facture
        $params[':conditions' . $key] = $_POST['conditions']; // unique : tout est dans la même facture
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  20. #20
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Il faut surtout reprendre toute la logique depuis le début.

    UNE facture - plusieurs produits

    On doit avoir :
    • une table "factures" (id_facture, numéro, date,...)
    • une table "facture_produits" (id_produit, id_facture, designation, quantité, prix,...)



    Le numéro de facture ou la date n'ont pas à être copiés plusieurs fois !

Discussions similaires

  1. Récupérer une valeur dans un tableau de tableau de JSON
    Par ecnerrolf dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 27/06/2014, 10h03
  2. [HTML] Récupérer une valeur dans un tableau - DIV
    Par frtou dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 02/09/2008, 10h12
  3. Récupérer une valeur dans un tableau ?
    Par le polak dans le forum Excel
    Réponses: 1
    Dernier message: 26/05/2008, 18h08
  4. Récupérer une valeur dans un tableau
    Par Jeren dans le forum Langage
    Réponses: 2
    Dernier message: 29/04/2008, 10h03
  5. Réponses: 2
    Dernier message: 15/02/2008, 21h45

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