Page 1 sur 1

Insertion d'une variable array issue d'un formulaire.

Posté : 01 oct. 2005, 19:06
par Invité
Bonjour,
J'ai créé une table 'machines' qui m'aide à faire un descriptif de ditributeurs automatiques de boissons chaudes, elle contient les champs :
id > INT auto increment
Marque > VARCHAR(255)
Modele > VARCHAR(255)
TypeMachine > ENUM('Café grains', 'Café soluble', 'Café Moulu', 'Thé feuilles')
NB_Goblets > smallint(6)
NB_Sels > smallint(6)
Liste_Sels > set('Café court', 'Café long', 'Café crême', 'Café au lait', 'Cappuccino', 'Moccacino', 'Cappcioc', 'Lait sucré', 'Boisson chocolat', 'Boisson chocolat au lait', 'Thé feuilles', 'Thé soluble', 'Potage tomates', 'Potage legumes', 'Eau chaude', 'Gobelet seul', 'Plus sucre', 'Sans sucre', 'Séléction sucre par affichage', 'Orge', 'Orge+Lait')
NB_Cafe_Min > smallint(6)
Dim_H > decimal(10,0)
Dim_L > decimal(10,0)
Dim_P > decimal(10,0)
TypesMonnaies > set('Monnaie', 'Jetons', 'Monnayeur accepteur', 'Monnayeur rendeur', 'Cashless')
Description > longtext

Pour renseigner les champs de cette base, je crée un formulaire situé sur la page materiel.php qui a pour action la page enreg_machine.php

Là ou je coince, c pour l'insertion dans ma table SQL des données issues des champs Liste_Sels et TypesMonnaies du formulaire (qui utilisent la balise

Code : Tout sélectionner

<select name="Liste_Sels[]" multiple>
par exemple pour liste sels.

voici ce que j'ai mis dans mon script enreg_mach.php, mais qui ne focntionne pas :
<?php
$i=0;
$j=0;
while($_POST["Types_Monnaies"][$i] && $_POST["Liste_Sels"][$j])
{
    $enregistrement = "INSERT INTO machines (id, Marque, Modele, TypeMachine, NB_Goblets, NB_Sels, Liste_Sels, NB_Cafe_Min, Dim_H, Dim_L, Dim_P, Description) ".
                      "VALUES ('', '$Marque', '$Modele', '$TypeMachine', '$NB_Goblets', '$NB_Sels', '$Liste_Sels[$j]', '$Types_Monnaies[$i]', '$NB_Cafe_Min', '$Dim_H', '$Dim_L', '$Dim_P', '$Description')";
    mysql_query($enregistrement);
    mysql_close();
    $i++;
    $j++;
}
Aucun message d'erreur n'apparait, mais le nouvel enregistrement n'est pas inséré dans la table

D'avance merci pour votre aide.

mailto:webmaster[Nosp@m]chambraymatic.fr
[NOSP@M] = @

Posté : 01 oct. 2005, 19:12
par ouckileou
les messages d'erreur MySQL ne s'affichent pas automatiquement, tu en as peut-être un

affiche le avec cette fonction : mysql_error()
mysql_query($enregistrement) or dir(mysql_error());
ou fais afficher le code de la requête pour l'exécuter dans phpMyAdmin pour la tester directement

tu auras surement des infos en plus ;)

Posté : 01 oct. 2005, 19:21
par Invité
Merci, aussitot dit aussitot fait ! le message d'erreur est le suivant :

Column count doesn't match value count at row 1

Posté : 01 oct. 2005, 19:22
par Cyrano
Ça veut dire que le nombtre de champs dans la table ne correspond pas au nombre de champs inscrits dans la requête qui en comporte à priori au moins un de trop.

Posté : 01 oct. 2005, 19:29
par Invité
Et pourtant ma table comporte 13 champs ma requete egalement :o(

Posté : 01 oct. 2005, 19:33
par Cyrano
Sauf que dans ta requête, tu envoies 13 valeurs pour 12 champs mentionnés, vérifie bien, soit il manque un champ, soit il y a une valeur de trop.

Posté : 01 oct. 2005, 19:50
par Invité
Effectivement je ne déclarait pas le champ 'Types_Monnaies' d'ou le probleme.

Merci

Seulement mon code n'est pas bon et je n'obtiens pas le resultat escompté.
En effet, a chaque sélection effectuée dans le formulaire de saisie, une création est faite dans la table. ( et non une seule création contenant tous les éléments sélectionnés dans le formulaire, pour le champ donné (Liste_Sels par exemple))

Il faudrait je pense que je sorte la requete SQL de la boucle. Mais je ne sais pas concatener les différents éléments d'un tableau, pour ensuite pouvoir les insérer dans la requete.

Mon but : obtenir $Liste_Sels = "Café court, Café long, Café crême, etc..."

Une idée SVP ?

Pour information...

Posté : 01 oct. 2005, 20:11
par Invité
Voici ce que j'obtiens lorsque j'effectue
un echo $enregistrement;
INSERT INTO machines (Marque,Modele,TypeMachine,NB_Goblets,NB_Sels,Liste_Sels,NB_Cafe_Min,Types_Monnaies,Dim_H,Dim_L,Dim_P,Description) VALUES ('Cocou','Coucou','Thé Feuilles','100','100','Array','','Array','1000','1000','1000','Test')

Comment transformer ce Array svp ?

Posté : 01 oct. 2005, 20:17
par Cyrano
$champs = implode(", ", $enregistrement);
Ensuite, tu fais un écho($champs); et ils seront tous séparés par une virgule. Attention, il n'y aura ni virgule au début ni à la fin.

Posté : 01 oct. 2005, 21:07
par Invité
Merci beaucoup pour vos interventions rapides, mon problème est résolu !