Recuperer des variables avec nom dynamiques

Résolu/Fermé
diice Messages postés 131 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 25 février 2017 - 23 mai 2009 à 19:53
diice Messages postés 131 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 25 février 2017 - 24 mai 2009 à 12:58
Bonjour,

voilà mon probleme :

J'ai une table MySql "travaux" avec differents champs (titres, url, date...)
a ces "travaux",je souhaite y lier plusieurs photos, mais sans nombre determiné.
J'ai donc creér un table "images" (id_travaux, titre, fichier...)

donc dans mon formulaire d'ajout de nouveaux travaux, je laisse la possibilité d'ajouter autant de "images" que l'utilisateur le souhaite. Je laisse la possibilité d'ajouter des champs supplementaires via javascript.
(j'ai utilisé le code de l'editeur-du-javascript suivant: http://www.editeurjavascript.com/scripts/scripts_formulaires_3_653.php).

donc mon javascript me creé 3 champs supplémentaires a chaque fois que l'utilisateur appuis sur "ajouter une page".
le nom des champs est :
- titre_1
- num_page_1
- fichier_1

si on ajoute une deuxieme photo ca sera :
- titre_2
- num_page_2
- fichier_2

etc.... (maximum 10)

bref, jusque la, ca va...

le probleme c'est quand je veux inserer tout ca en base de donnée (dans ma table "images") la je bloque.
Je vois bien un petit array() mais je n'arrive pas a savoir combien de "photos" sous ajoutées.
je suis obligé de faire des conditions sur un ajout potentiel de 10 photos, ce qui ne m'arrange pas du tout !!!

comment pourrais-je faire pour ajouter dans un tableau mes "images" ???
merci beaucoup d'avance !

7 réponses

incaout Messages postés 347 Date d'inscription lundi 8 septembre 2008 Statut Membre Dernière intervention 15 novembre 2012 74
23 mai 2009 à 20:59
Salut,

Je te propose d'utiliser les fonctions du Document Object Model.

Le principe est de recenser toutes les balises de type input. Ensuite de tester le début du nom de la balise. Si le nom est égal à "titre_", alors tu incrémentes un compteur. A la fin tu sais combien d'élements ont été créés.

function CompteElt()
{
var compteur = 0;
//Cree un tableau des input
var tablo = document.getElementsByTagName("INPUT");
//Parcours le tableau et teste le nom des champs
for(c=0;c<tablo.length-1;c++)
{
if(tablo[c].name.substring(0,6)=='titre_')
{
compteur ++;
}
}
return compteur;

}

Tu peux selon le même principe si tu veux enregistrer les informations de chaque champ qui t'intéresse dans un tableau à 3 dimensions.

En espérant que cela t'aidera,

A +

IC
0
diice Messages postés 131 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 25 février 2017 1
23 mai 2009 à 21:10
merci beaucoup !

effectivement , je pense que ca devrait bien m'aider !
j'essaye ca et je te dit au jus !

merci beaucoup !
0
incaout Messages postés 347 Date d'inscription lundi 8 septembre 2008 Statut Membre Dernière intervention 15 novembre 2012 74
23 mai 2009 à 22:03
Re.

Je viens de penser que tu sera qd même embetté pour l'insertion dans ta base de données. Pourquoi ne pas utiliser le tableau POST plutot dans la mesure où lui enregistre tous les champs transmis ? A ce moment là, tu fais une boucle de parcours du tableau POST, tu testes le nom de chaque clé toujours sur le même principe et ensuite si concordance, tu stockes dans une variable ou un tableau et après tu insères dans ta base.

En quel langage développes tu cote serveur ? PHP ?

A+

IC
0
diice Messages postés 131 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 25 février 2017 1
23 mai 2009 à 22:32
effectivement, j'ai quelques soucis, je suis en train de faire des recherches sur les DOM !
parce que du coup je sais pas comment reprendre le tableau du javascript (je suis une grosse bille en javascript !)

sinon je développe en php.

mais effectivement avec le post, j'ai toutes mes variables sans probleme, et c'est la qu'interviendrai ton code DOM, mais du coup je sais pas comment l'extraire du javascript...
0

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

Posez votre question
diice Messages postés 131 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 25 février 2017 1
24 mai 2009 à 04:33
bon, j'ai trouvé une autre solution :

// renommer les variables POST
$titres_page = $_POST['titres_page'];
$num_page = $_POST['num_page'];
$fichier = $_POST['fichier'];
// nombre de Post "Titre" ramenés 
$num_titre=sizeof($titres_page);

// boulce pour passage en BDD suivant le nombre de POST Titres
for ($i=0;$i<$num_titre;$i++) {

// verification que l'entree id_taf + num_page n'est pas deja dans la table
	.... {
// Si nouvelle entree unique alors, insere dans BDD
	$req_insert="insert into $medias values('','$id_taf','$num_page[$i]','$titres_page[$i]','$fichier[$i]')";
    $resultat = mysql_db_query("$base",$req_insert,$link) or die('Erreur SQL !<br>'.$req_insert.'<br>'.mysql_error());
	
//confirmation visuelle
	echo "<br>fichier <b>".$fichier[$i]."</b> inséré";
		}
	else { echo "fichier $fichier[$i] deja present dans la table"; }
	}


voilà pour ceux qui chercheraient !
je sais pas sile code est juste, mais ca marche !
0
incaout Messages postés 347 Date d'inscription lundi 8 septembre 2008 Statut Membre Dernière intervention 15 novembre 2012 74
24 mai 2009 à 10:41
Salut.

Je pensais en effet à une méthode genre celle que tu as adopté. Le DOM se situe en effet côté client. C pratique pour manipuler en javascript les éléments d'une page mais pas pour faire le traitement comme tu le souhaites. Je crois qu'il existe des fonctions DOM pour PHP mais plutot axé sur des documents XLM afin d'en analyser le contenu. Mais cela veut dire en fait que tu travailles sur un fichier enregistré que tu ouvres en PHP.

Bonne continuation.

IC
0
diice Messages postés 131 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 25 février 2017 1
24 mai 2009 à 12:58
merci beaucoup Incaout, j'ai essayé tout simplement de mettre en php la fonction que tu m'avais donné, car oui pour les DOM il parlait beaucoup de XML.

donc, bon ca marche avec quelques bugs, mais rien de bloquant.

merci beaucoup encore de m'avoir orienté :)
0