insertion de données issues d'un array sans boucles de type

Mammouth du PHP | 702 Messages

05 sept. 2012, 11:28

Bonjour à tous,

j'ai un petit soucis que je rencontre,
à ce jour et que je n'ai jamais rencontré auparavant.

Pour des raisons évidentes j'ai du enregistrer certaines données
de ma BDD par l'intermédiaire d'une boucle (un nouvel enregistrement
à chaque itération).

Aujourd'hui je retravaille (moi ou un utilisateur de la plateforme)
les données.

J'ai donc un tableau physique, enfin non virtuel mais en HTML, (balise <table>)
qui reprend différents Postes. Ces postes portent tous des libellés.
et les noms des champs associés ne sont pas conçus sous la forme d'un tableau car
la l'enregistrement se fait en une seule ligne. Donc les noms de mes libellés
sont sous la forme name="texte" et non plus name="data[$i]texte".

Le soucis est que lors de l'indéxation dans la base de donnée,
j'ai une simple requête Insert INTO et je connais le libellé des champs qui vont
recevoir les données mais le problème est lors de l'insertion j'ai un array
qui ressemble à ça:

Code : Tout sélectionner

array 'poste' => string 'Principal' (length=9) 'ordre' => string '1' (length=1) array 'poste' => string 'Intérêts' (length=8) 'ordre' => string '2' (length=1) array 'poste' => string 'Clause pénale' (length=13) 'ordre' => string '3' (length=1)
Comment indiquer enfin comment faire en sorte que l'indéxation se passe
correctement, sachant que la clef peut changer à tout moment en fonction
de l'ordre qui est défini (champs ordre).

comment indiquer que par exemple le contenu du tableau répondant au critère
poste = Principal
doit être alloué au champ ordre_principal?

J'avais pensé à faire une requête par itération (j'en ai une quinzaine) mais je
pense que ça va faire un peut lourd.

Je sais que ça peut sembler bizarre de prendre une boucle et de linéariser les
données en un seul enregistrement mais pour le coup j'avais pas le choix j'ai eu
cette contrainte.

Par avance merci pour votre aide et vos conseils.

SP.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

05 sept. 2012, 14:12

salut,


Pour être franc je n'ai pas compris ton problème peux être plus explicite, ou donner un exemple ?


parce que la pour le coup je dirais un foreach sur ton tableau et une requête préparée.

après tu peur très bien concaténer clef et valeur si besoin est.



@+
Il en faut peu pour être heureux ......

Mammouth du PHP | 702 Messages

05 sept. 2012, 14:15

en fait je récupère un tableau, je ne sais pas quelle clef donnera quoi et j'ai besoin d'insérer ces données dans une seule requête le soucis comme je ne peux pas identifier les clefs j'ai juste un libellé par exemple principal et dans l'autre table j'ai ordre_principal.

Du coup j'ai un array que je dois insérer dans une seule requête au sein d'un INSERT INTO.

mais je ne sais pas comment faire.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

05 sept. 2012, 15:04

Suis pas sur d'avoir tout bien compris... en gros dans ta base tu as des champs "ordre_principal", "ordre_secondaire", "ordre_tertiaire" ... et tu veux que la valeur de ton tableau avec pour ordre 1 aille dans le premier, celle qui a pour valeur 2 dans le second, etc. ? Et ton nombre "d'ordre" est limité à 15 options ?

Est-ce que tes ordres sont tous toujours renseignés (tu as toujours un tableau avec 15 valeurs) ? sinon, sont-elles toujours consécutives (en commençant ou non ) ou est-ce qu'il peut y avoir des trous (1, 2, 5, 7) ?

En gros, l'idée pourrait être d'ordonner ton tableau pour avoir les champs dans le même ordre que ce qui est prévu par ta requête et n'avoir plus qu'à faire un implode ou équivalent...
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 2278 Messages

05 sept. 2012, 19:01

Bonjour,

Je crois que je saisis, mais par précaution:
Quelle est la structure de la Table dans la BDD ?
et un petit
print_r($_POST); de ce que t'envoie le formulaire de maj,
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD