Formulaires php mysql

seif4rock Messages postés 9 Date d'inscription mercredi 9 juillet 2008 Statut Membre Dernière intervention 29 avril 2009 - 30 déc. 2008 à 15:18
kohntark Messages postés 3706 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 - 2 janv. 2009 à 16:23
Bonjour à tous
Je suis entrain de développer une application de facturation pour une compagnie de transport.
Une facture peut avoir un ou plusieurs articles.
J'ai crée d'abord un formulaire pour la saisie d'une facture avec un champ pour la saisie du nombre d'articles (n) correspondant à cette facture.
Ensuite, quand je valide le formulaire et j'insère les données dans la table facture(fait), je veux créer un formulaire pour la saisie des articles, il y aura donc n formulaires correspondant chacun à un article, puis insérer ces données dans la table articles.
ça ressemble un peu au formulaire du phpMyAdmin qui demande le nombre de champs puis affiche tant de lignes de formulaires que le nombre de champs saisis.
J'espère que j'ai pu expliquer le problème.
Merci pour votre aide.
Seif4rock

7 réponses

kohntark Messages postés 3706 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
30 déc. 2008 à 16:11
Salut,

Je ne suis pas sur de voir où se situe le problème ...

Je ne retiens pas les "n formulaires" car je n'en vois pas du tout l'intérêt :
[formulaire saisie facture]
[traitement php, insertion en DB, ...]

$nb_articles = [nb d'articles déclarés dans la facture]

echo '<form name="formulaire" method="post" action="">';

for ($i=0; $i < $nb_articles; $i++) {
    echo '
   
   
    [etc ...]
    ';
}
echo '

</form>';

Ensuite il ne reste plus qu'à traiter les données récupérées.

Cordialement,

Kohntark-
0
seif4rock Messages postés 9 Date d'inscription mercredi 9 juillet 2008 Statut Membre Dernière intervention 29 avril 2009
30 déc. 2008 à 16:22
Donc vous proposez de faire une boucle sur les champs de saisie des articles..
Mais reste encore  la récupération des données saisies car on a plus un seul mais n champs a insérer dans la table articles (on a plus par exemple une seule quantité à insérer ($_POST['quantite']) mais n quantité à inserer)
Merci
Seif4rock
0
kohntark Messages postés 3706 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
30 déc. 2008 à 16:59
Re,

Le mieux est encore de construire les champs sous cette forme :

...

Comme ça tu récupères un array du genre :

[ref] => Array
(
[0] =>
[reference du premier article]
[1] =>
[reference du second article]

[2] =>
...)


[prix] => Array
(
[0] =>
[prix du premier article]
[1] =>
[... du second]
[2] =>
...)


[qte] => Array
(
[0] =>
[1] =>
[2] =>
)

ensuite l'insertion en DB :
foreach ($_POST as $cat=>$value) {
    $sql = "INSERT into DB (reference, prix, qte) VALUES ('$value[0]','$value[1]','$value[2]')";
}

Cordialement,

Kohntark -
0
seif4rock Messages postés 9 Date d'inscription mercredi 9 juillet 2008 Statut Membre Dernière intervention 29 avril 2009
1 janv. 2009 à 17:20
Merci j'ai suivi tes conseils
Voila mon nouveau formulaire
***************************
for ($i=1; $i <= $n; $i++) {
echo '
'.$i.'/ , &nbsp;, &nbsp;, &nbsp;, &nbsp;,

Designation, ,

Quantité, ,

Prix_Unit, ,

Num Pièce, ,

Nature Pièce, ,

TVA ';
$query = "SELECT * FROM tva";
$result = mysql_query($query);
echo '<select name="code_tva">';
 
while ($row=mysql_fetch_array($result)) {
echo '<option ' . $row['code_tva'] . ' value="' . $row['code_tva'] . '">' . $row['code_tva'] .  '%</option>';
}
echo '</select>,
,

----
&nbsp;
';
}
***************************
Ensuite je récupère comme tu me l'as dit ces données et j'essaie l'insèrtion dans ma table:

**********************
<?PHP
mysql_connect("localhost", "root", "");
mysql_select_db("facturation3");
foreach ($_POST as $cat=>$value) {
    mysql_query("INSERT into article (num_article, designation_article, quantite, prix_unit, num_piece, nature_piece, code_tva, num_facture) VALUES
    ('','$value[1]','$value[2]','$value[3]','$value[4]','$value[5]','$value[6]','$value[7]')") or die (mysql_error()) ;
}
?>
**********************
L'insertion dans la table échoue
Si par exemple  j'entre deux article par le formulaire, je récupère seulement les $value[1] et $value[2] (représentant les désignations des deux articles) et le reste est vide...
ça fait deux jours ke j'essaie mais j'obtiens tjrs pas de résultat...
Seif4rock
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
kohntark Messages postés 3706 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
2 janv. 2009 à 11:22
Salut,

J'ai une erreur dans mon code. Au lieu de :
foreach ($_POST as $cat=>$value) {
    $sql = "INSERT into DB (reference, prix, qte) VALUES ('$value[0]','$value[1]','$value[2]')";
}
=>
for ($i=0; $i < count($_POST); $i++) {
  $sql = 'INSERT into DB (reference, prix, qte) VALUES ('.$_POST['ref'][$i].','.$_POST['prix'][$i].','.$_POST['qte'][$i].')';
}

En espèrant que tu t'en sortes avec ça 

Cordialement,

Kohntark-
0
seif4rock Messages postés 9 Date d'inscription mercredi 9 juillet 2008 Statut Membre Dernière intervention 29 avril 2009
2 janv. 2009 à 15:52
Merci beaucoup kohntark
En fait j'ai essayé avec une autre écriture et ça marché:


($n représente le champ nbre_articles dans la table facture, je la récupère directement )

for ($i=1; $i <= $n ; $i++) {

mysql_query("INSERT INTO article (num_article, designation_article,
quantite, prix_unit, num_piece, nature_piece, code_tva, num_facture)
VALUES (

'', '".$_POST['designation_article'][$i]."',
'".$_POST['quantite'][$i]."','".$_POST['prix_unit'][$i]."','".$_POST['num_piece'][$i]."','".$_POST['nature_piece'][$i]."','".$_POST['code_tva'][$i]."','".$_POST['num_facture'][$i]."')")
or die (mysql_error());

Toutes les données sont insérées dans la table article sauf celles de la TVA, elle est toujours nulle???

Seif4rock
0
kohntark Messages postés 3706 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
2 janv. 2009 à 16:23
C'est le rêve une TVA toujours nulle !!! ... si seulement tu pouvais travailler aux impôts

Fais un :
print_r[$_POST] tout en haut de ta page. Si 'code_tva' n'est pas correct ça vient du formulaire, sinon il peut y avoir un pb sur cette valeur vis à vis de mysql :
if (false === mysql_query("INSERT INTO[...])) die (mysql_error());

Kohntark -
0