Bonjour,

Voila je rencontre un petit problème avec mon code, j'ai un formulaire dynamique avec un bouton en js pour ajouter des lignes supplémentaire, le probleme c'est pour insérer mes données dans ma table avec ma requête insert into j'ai une erreur "array to string conversion" j'ai déja passé plusieurs heures à résoudre mon problème mais en vain.

Voici mon code html avec mon bouton en js :

<script type="text/javascript">
    function add()
        {
        var input = addInput.innerHTML
        addInput.innerHTML = input + '<table><div id="divform" class="form-group row"><div class="col-xs-10" id="formulaire"><tr><td><input class="form-control" type="date" name="dateactu[]" value="2017-01-10" id="input"></br></td><td><input class="form-control" type="text" name="heure_eff[]" placeholder="heure(s) éffectuée(s)"  id="input"></br></td><td><input class="form-control" placeholder="prix repas" type="text" name="repas[]" id="input"></br></td><td><input class="form-control" type="text" name="num_commande[]" placeholder="numéro commande" id="input"></br></td><td><input class="form-control" type="text" name="nom_cli[]" placeholder="nom du client" id="input"></br></td><td><input class="form-control" type="text" name="adr_cli[]" placeholder="adresse client" id="input"></br></td></tr></div></div></table>';
        }
    </script>

  </head>

  <body>
    <?php include "utils/navbar.php" ?>

<br/>
<form method="post" action="callback/addformulaire.php">

  <div class="form-group row" id="semaine">
    <label for="example-week-input" class="col-xs-2 col-form-label">Semaine n°</label>
    <div class="col-xs-10">
      <input class="form-control" type="week" name="nb_semaine[]" value="2017-W01">
    </div>
  </div>

</br>
<hr>
</br>
<?php
for ($i=0; $i < 5 ; $i++) {
  echo '<table name="tableform">
  <div id="divform" class="form-group row">
    <div class="col-xs-10" id="formulaire">
    <tr>
      <td><input class="form-control" type="date" name="dateactu[]" value="2017-01-10" id="input"></br></td>
      <td><input class="form-control" type="text" name="heure_eff[]" placeholder="heure(s) éffectuée(s)"  id="input"></br></td>
      <td><input class="form-control" placeholder="prix repas" type="text" name="repas[]" id="input"></br></td>
      <td><input class="form-control" type="text" name="num_commande[]" placeholder="numéro commande" id="input"></br></td>
      <td><input class="form-control" type="text" name="nom_cli[]" placeholder="nom du client" id="input"></br></td>
      <td><input class="form-control" type="text" name="adr_cli[]" placeholder="adresse client" id="input"></br></td>
    </tr>
      </div>
    </div></table>';

}
?>
<input type="submit" name="envoyer" id="btnenvoi" class="btn btn-success" value="Envoyer">
<input id="btn+" type="button" class="btn btn-info" onClick="add();" value="Ajouter champs">
</br>
</br>
<div id="addInput"></div>

</form>

Et mon code php :

<?php
session_start();
$connect = 0;
$admin = 0;
if (!empty($_SESSION['login'])) $connect = 1;
if (!empty($_SESSION['admin'])) {
    if ($_SESSION['admin'] == 1) $admin = 1;
}
// Je vérifie que toutes les infos du formulaire sont bien là.
if (!empty($_POST['heure_eff']) && !empty($_POST['repas'])
      && !empty($_POST['num_commande']) && !empty($_POST['nom_cli']) && !empty($_POST['adr_cli'])) {

        $nbligne = count($_POST['heure_eff']);
        $dateactu = $_POST['dateactu'];
        $heure_eff = $_POST['heure_eff'];
        $repas = $_POST['repas'];
        $num_commande = $_POST['num_commande'];
        $nom_cli = $_POST['nom_cli'];
        $adr_cli = $_POST['adr_cli'];
        $nb_semaine = $_POST['nb_semaine'];

        try {

    //connexion BDD
    $bdd = new PDO('mysql:host=localhost;dbname=rapport', 'root', 'root');

        $sql = $bdd->prepare ('INSERT INTO form (dateactu, heure_eff, repas, num_commande, nom_cli, adr_cli, nb_semaine) VALUE (
        :dateactu, :heure_eff, :repas , :num_commande , :nom_cli , :adr_cli , :nb_semaine )');

            for ($i=0; $i < $nbligne; $i++) {
              $sql -> execute(array('dateactu' => $dateactu , 'heure_eff' => $heure_eff , 'repas' => $repas , 'num_commande'=> $num_commande , 'nom_cli' => $nom_cli, 'adr_cli' => $adr_cli , 'nb_semaine' => $nb_semaine));
            }
            header('Location: ../contact.php');

          }

      catch (PDOException $e) {
          echo 'Erreur : ' . $e -> getMessage();
                              }
}
   else {
    echo "Vous n\'avez pas rempli tous les champs.";
        }
?>

L'erreur : Notice: Array to string conversion in C:\UwAmp\www\rapport\rapport\callback\addformulaire.php on line 31
la ligne 31 correspond à "$sql -> execute(array('dateactu' => $dateactu , 'heure_eff' => $heure_eff , 'repas' => $repas ... "
Lorsque je regarde dans ma table form j'ai bien le nombre de ligne que je veux mais dans tous les champs j'ai "Array" et non les données que j'ai entré dans le formulaire

11 réponses


Huggy
Réponse acceptée

Pour compléter ce que dit @Kenor, vu que tu as déjà l'index dans ta boucle for, il suffit de l'utiliser

           for ($i=0; $i < $nbligne; $i++) {
              $sql -> execute(array('dateactu' => $dateactu[$i] , 'heure_eff' => $heure_eff[$i] ...
            }

Ton champ se présente sous forme de tableau : dateactu[] (cf les crochets)
donc tu as un tableau en retour, hors tu n'utilises pas un tableau.

Donc ça fait une erreur explicite "array (ce que tu as) to string convertion (ce que tu utilises)"

Le truc c'est que si j'enleve ces crochets dans ma table j'ai qu'une seul ligne de mon form alors je sais pas comment faire

C'est bon ça marche, c'était juste ça ! Merci beaucoup à vous deux

Mince je suis allé un peu trop vite , j'ai des erreurs : "Notice: Undefined offset: 1 in C:\UwAmp\www\rapport\rapport\callback\addformulaire.php on line 31" sur 5 lignes lorsque j'ajoute des lignes de formulaire avec mon bouton en js

Edit : Pour mes 5 première lignes des mon form ça marche mais pas plus

fait :

echo '<pre>';
var_dump($_POST);
echo '</pre>';

Pour voir si tu as toutes les données, et voir les données que tu n'as pas.

L'erreur que tu as, c'est lorsque tu as fait par exemple $tableau['machin'] et que 'machin' n'existe pas en index, donc là, tu essayes d'accéder à un index qui n'existe pas. Regarde donc si il existe bien ou non, si toutes les données que tu as entrés sont là ou pas etc.

Ca me retourne ça : C:\UwAmp\www\rapport\rapport\contact.php:79:
array (size=0)
empty

J'ai ajouter des !empty($_POST['nom_champ']) de tous les champs , j'ai toutes mes données dans ma bdd même les lignes supp de mon form mais ça m'affiche toujours les erreurs undefined offset 1 , 2 , 3 , 4, 5

Ah je penses que c'est juste mon "nbsemaine" vu qu'il n'y est qu'une fois dans mon form, je vais checker ça

Attention, ce n'est pas !empty($_POST['nom_champ']) mais isset($_POST['nom_champ']) que tu dois utiliser pour vérifier qu'un index existe. (tu peux avoir un champ vide, mais qu'il existe, l'erreur de "undefined" restera)

Du coup c'est bon j'ai plus d'erreurs , je mets mon code si des gens en ont besoin

    <script type="text/javascript">
    function add()
        {
        var input = addInput.innerHTML
        addInput.innerHTML = input + '<table><div id="divform" class="form-group row"><div class="col-xs-10" id="formulaire"><tr><td><input class="form-control" type="date" name="dateactu[]" value="2017-01-10" id="input"></br></td><td><input class="form-control" type="text" name="heure_eff[]" placeholder="heure(s) éffectuée(s)"  id="input"></br></td><td><input class="form-control" placeholder="prix repas" type="text" name="repas[]" id="input"></br></td><td><input class="form-control" type="text" name="num_commande[]" placeholder="numéro commande" id="input"></br></td><td><input class="form-control" type="text" name="nom_cli[]" placeholder="nom du client" id="input"></br></td><td><input class="form-control" type="text" name="adr_cli[]" placeholder="adresse client" id="input"></br></td></tr></div></div></table>';
        }
    </script>

  </head>

  <body>
    <?php include "utils/navbar.php" ?>

<br/>
<form method="post" action="callback/addformulaire.php">

  <div class="form-group row" id="semaine">
    <label for="example-week-input" class="col-xs-2 col-form-label">Semaine n°</label>
    <div class="col-xs-10">
      <input class="form-control" type="week" name="nb_semaine" value="2017-W01">
    </div>
  </div>

</br>
<hr>
</br>
<?php

for ($i=0; $i < 5 ; $i++) {
  echo '<table name="table">
  <div id="divform" class="form-group row">
    <div class="col-xs-10" id="formulaire">
    <tr>
      <td><input class="form-control" type="date" name="dateactu[]" value="2017-01-10" id="input"></br></td>
      <td><input class="form-control" type="text" name="heure_eff[]" placeholder="heure(s) éffectuée(s)"  id="input"></br></td>
      <td><input class="form-control" placeholder="prix repas" type="text" name="repas[]" id="input"></br></td>
      <td><input class="form-control" type="text" name="num_commande[]" placeholder="numéro commande" id="input"></br></td>
      <td><input class="form-control" type="text" name="nom_cli[]" placeholder="nom du client" id="input"></br></td>
      <td><input class="form-control" type="text" name="adr_cli[]" placeholder="adresse client" id="input"></br></td>
    </tr>
      </div>
    </div></table>';

}
?>
<input type="submit" name="envoyer" id="btnenvoi" class="btn btn-success" value="Envoyer">
<input id="btn+" type="button" class="btn btn-info" onClick="add();" value="Ajouter champs">
</br>
</br>
<div id="addInput"></div>

</form>
<?php
session_start();
$connect = 0;
$admin = 0;
if (!empty($_SESSION['login'])) $connect = 1;
if (!empty($_SESSION['admin'])) {
    if ($_SESSION['admin'] == 1) $admin = 1;
}
// Je vérifie que toutes les infos du formulaire sont bien là.
if (!empty($_POST['dateactu']) && !empty($_POST['heure_eff']) && !empty($_POST['repas'])
      && !empty($_POST['num_commande']) && !empty($_POST['nom_cli']) && !empty($_POST['adr_cli'])) {

        $nbligne = count($_POST['heure_eff']);
        $dateactu = $_POST['dateactu'];
        $heure_eff = $_POST['heure_eff'];
        $repas = $_POST['repas'];
        $num_commande = $_POST['num_commande'];
        $nom_cli = $_POST['nom_cli'];
        $adr_cli = $_POST['adr_cli'];
        $nb_semaine = $_POST['nb_semaine'];

        try {

    //connexion BDD
    $bdd = new PDO('mysql:host=localhost;dbname=rapport', 'root', 'root');

        $sql = $bdd->prepare ('INSERT INTO form (dateactu, heure_eff, repas, num_commande, nom_cli, adr_cli, nb_semaine) VALUE (
        :dateactu, :heure_eff, :repas , :num_commande , :nom_cli , :adr_cli , :nb_semaine )');

              for ($i=0; $i < $nbligne; $i++) {
              $sql -> execute(array('dateactu' => $dateactu[$i] , 'heure_eff' => $heure_eff[$i] , 'repas' => $repas[$i] , 'num_commande'=> $num_commande[$i] , 'nom_cli' => $nom_cli[$i], 'adr_cli' => $adr_cli[$i] , 'nb_semaine' => $nb_semaine));
            }
            header('Location: ../contact.php');

          }

      catch (PDOException $e) {
          echo 'Erreur : ' . $e -> getMessage();
                              }
}
   else {
    echo "Vous n\'avez pas rempli tous les champs.";
        }
?>