Bonjour

Je cherche à insérer les données dans 2 tables différentes. 1 infosfacture corresponds à 1 ou plusieurs facturations.

Voici mes tables :
Code sql : 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
CREATE TABLE `infosfacture` (  `id_facture` int(11) NOT NULL AUTO_INCREMENT,
  `num` varchar(10) DEFAULT NULL,
  `client` text,
  `datefacture` DATETIME DEFAULT NULL,
  `facturede` text,
  `conditions` text
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
 
---- Structure de la table `infosfacture`
--
 
CREATE TABLE `facturation` (
  `id_prestation` int(11) NOT NULL AUTO_INCREMENT,
  `fk_facturation_id` int(11) NOT NULL,
  `designation` text,
  `quantite` int(11) DEFAULT NULL,
  `prixht` decimal(10,2) DEFAULT NULL,
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

Voici mon code qui traite les données venant 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
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
<?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;
//var_dump($_POST);
// generate request params
$params = [];
$values = '';
$facturation = [];
foreach ($_POST['designation'] as $key => $designation) {
    $params[':designation' . $key] = $designation;
    $params[':num' . $key]    = $_POST['num'];
    $params[':client' . $key]    = $_POST['client'];
    $params[':quantite' . $key]    = $_POST['quantite'][$key];
    $params[':prixht' . $key]  = $_POST['prixht'][$key];
    $params[':datefacture' . $key] = $_POST['datefacture'];
    $params[':facturede' . $key] = $_POST['facturede'];
    $params[':conditions' . $key] = $_POST['conditions'];
 
 
    $values1 .= '(:num' . $key . ' , :client' . $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($_POST['num'][$key]);
 
 
// remove trailing ","
$values1 = rtrim($values1, ',');
$req1 = $base->prepare('INSERT INTO infosfacture (num, client, datefacture, facturede, conditions) VALUES '. $values1);
 
 
 
 
//$sql= $base->prepare('SELECT id FROM infosfacture WHERE id='.$fk)
 
 
$values2 .= '(:designation' . $key . ', :quantite' . $key . ', :prixht' . $key . ', LAST_INSERT_ID()),';
 
 
$values2 = rtrim($values2, ',');
$req2 = $base->prepare('INSERT INTO facturation (designation, quantite, prixht, fk_facturation_id) VALUES '. $values2);
 
 
BEGIN;
$req1->execute($params);
$req2->execute($params);
COMMIT;
 
 
$base = null;
?>
Voici mon 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="afficheFacture2.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>