Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/08/2007, 21h21   #1
Nouveau Membre du Club
 
Avatar de Yagami_Raito
 
Inscription : mai 2007
Messages : 106
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 106
Points : 26
Points : 26
Par défaut [SQL] Remplir une base SQL à partir d'un tableau à plusieurs lignes et colonnes

Bonjour à tous,

J'ai un tableau avec plusieurs lignes et chaque ligne correspond à un métier et chaque colonne à un mois.
L'utilisateur doit saisir un nombre dans chaque ligne pour connaitre la présence des métiers dans l'entreprise mois par mois.
Par exemple: Il y a 2 chefs au mois de janvier, l'utilisateur saisira 2 dans la ligne chef et dans la colonne janvier etc pour les autres métiers.




Dans ma table SQL, j'ai une colonne métier et 12 colonnes correspondant a chacun des mois.



J'aimerais insérer les saisies de l'utilisateur dans ma table SQL, mais je n'y arrive pas. Utilisation de boucle pour chacune des case de type <input type="text" etc..., ou je sais pas quoi.

L'utilisateur tape 2 dans la ligne chef et dans la colonne Janvier, j'aimerais que le 2 apparaissent dans ma table SQL à la ligne Chef et colonne Janvier.

Aidez-moi svp!

PS: Désolé je n'ai pas le code de mon tableau, ni une photo sous l'ordinateur que j'utilise.
__________________
Yagami_Raito est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/08/2007, 09h22   #2
Modératrice
 
Avatar de Celira
 
Femme
Développeuse PHP/Java
Inscription : avril 2007
Messages : 3 686
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Développeuse PHP/Java

Informations forums :
Inscription : avril 2007
Messages : 3 686
Points : 5 451
Points : 5 451


Ton tableau serait en fait une série d'input text à remplir et tu voudrais que lorsque mettons on clique sur un bouton valider, tout ce que l'utilsateur a tapé dans la tableau soit envoyé dans la base et au bon endroit.

Est-ce que j'ai bien compris ?
__________________
Modératrice PHP
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)

Pour afficher votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur)
Celira est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/08/2007, 09h58   #3
Membre chevronné
 
Avatar de cadoudal56
 
Inscription : février 2005
Messages : 671
Détails du profil
Informations personnelles :
Âge : 40

Informations forums :
Inscription : février 2005
Messages : 671
Points : 646
Points : 646
Hello,

C'est assez simple en fait. Bien que cela a l'air compliquer.
Le tout c'est de bien maitriser la concatenation pour la déclaration de variable.

Dans le formulaire. On part du principe que l'on a une serie de metier en ligne et de mois en colonne (donc 12)

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
 
// liste des metiers
$metiers    = array('responsable','chef','cariste','interimaire');
echo '<table>';
for ($m=0; $m< count($metiers); $m++;) {
echo '<tr><td>'.$metiers[$m].'</td>';
     for  ($x=1; $x<=12; $x++) {
     echo '<td><imput type="text" name="'.$metiers[$m].$x.'"></td>';
     }
echo '</tr>';
}
echo '<tr><td colspan="13"><input type="submit" value="Sauvegarder"></td></tr></table>';
Si je n'ai pas fait d'erreur, tu devrais avoir un tableau de 4 lignes et 13 colonnes avec tes champs textes.

Maintenant et en ce qui concerne la sauvegarde des infos
Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
 
// liste des metiers
$metiers    = array('responsable','chef','cariste','interimaire');
 
$VALUES='';
for ($m=0; $m< count($metiers); $m++;) {
    if ($VALUES) {$VALUES .= ",";}
$VALUES .= "(".$metiers[$m].",".${$metiers[$m].'1'}.",".${$metiers[$m].'2'}.",".${$metiers[$m].'3'}.",".${$metiers[$m].'4'}.",".${$metiers[$m].'5'}.",".${$metiers[$m].'6'}.",".${$metiers[$m].'7'}.",".${$metiers[$m].'8'}.",".${$metiers[$m].'9'}.",".${$metiers[$m].'10'}.",".${$metiers[$m].'11'}.",".${$metiers[$m].'12'}.")";
}
 
$INSERT = 'INSERT INTO tbl_effectifs (metier, jan, fev, mar, avr, mai, juin, jui, aou, sep, oct, noc, dec) VALUES '.$VALUES;
J'espere que je n'ai pas fait d'erreur, mais cela devrait ressembler a cela.
Ou en tout cas, on ne devrait pas en etre loin.
Assure toi tout de meme que la requete soit bonne et conforme en faisant un echo $INSERT avant d'envoyer les infos dans la base

Tout l'avantage de ce systeme réside dans le fait que tu n'éffectue qu'une seule requete. Mais aussi dans le fait que pour ajouter un nouveau métier, tu as juste a rajouter une variable dans le tableau.

Dis nous si cela a fonctionné

@+
cadou
__________________
PHP Competition System
Script de gestion de coupes et championnats
http://phpcompet.free.fr

Mon jeu de foot
cadoudal56 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/08/2007, 10h44   #4
Nouveau Membre du Club
 
Avatar de Yagami_Raito
 
Inscription : mai 2007
Messages : 106
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 106
Points : 26
Points : 26
Citation:
Envoyé par Celira


Ton tableau serait en fait une série d'input text à remplir et tu voudrais que lorsque mettons on clique sur un bouton valider, tout ce que l'utilsateur a tapé dans la tableau soit envoyé dans la base et au bon endroit.

Est-ce que j'ai bien compris ?
Hey!!

Oui c'est exactement ca! Comme dis cadoudal56 ca à l'air super compliqué, pour reporter tous les input dans la base au bon endroit.
J'ai oublié de préciser mais les métiers de chaque lignes sont le résultat d'une requête. Je ne sais pas si cela change quelque chose mais je vous en informe.

PS: Comment ajouter un test pour vérifier que l'utilisateur tape un chiffre compris entre 0.5 et 30 ?

Merci
__________________
Yagami_Raito est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/08/2007, 12h50   #5
Membre chevronné
 
Avatar de cadoudal56
 
Inscription : février 2005
Messages : 671
Détails du profil
Informations personnelles :
Âge : 40

Informations forums :
Inscription : février 2005
Messages : 671
Points : 646
Points : 646
Ben je ne sais pas, que donne la solution que je te propose ?
Ce qu'il y avait a comprendre c'est que quand tu construis ton tableau, le nom de la boite de texte doit se composer du nom du metier + le numero du mois :

chef1 pour janvier
chef2 pour fevrier
chef5 pour mai

etc...

Ensuite pour récupérer la variable dans le script afin d'enregsitrer les infos, il faut que tu concatenes certaines infos pour récupérer la valeur de la variable.

Par exemple pour avoir le contenu de chef1 tu dois faire ${$metiers[0].'1'}

Vois tu le principe ?

@+
cadou
__________________
PHP Competition System
Script de gestion de coupes et championnats
http://phpcompet.free.fr

Mon jeu de foot
cadoudal56 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/08/2007, 12h58   #6
Nouveau Membre du Club
 
Avatar de Yagami_Raito
 
Inscription : mai 2007
Messages : 106
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 106
Points : 26
Points : 26
Après avoir bien analyser ton code, je l'ai bien compris! Merci encore.


PROBLEME n°1:
Concernant le tableau de métier, il y aurait une modification à faire car le tableau est crée suite à une requête.
Est-ce que le code suivant serait juste:

Code PHP :
1
2
3
4
5
6
7
$metiers=array();
 
$res= mysql_query("select distinct `EMPLOI` from `emplois` WHERE `SERVICE`='$service_utilisateur");
{
while($ligne= mysql_fetch_array ($res))
array_push($metiers,$ligne['EMPLOI']);
}

PROBLEME n°2:
Comment tester si l'utilisateur à entrer une valeur comprise entre 0.5 et 30, et si oui y inserer dans la base?

PROBLEME n°3:
Comment faire pour afficher lorsque l'utilisateur arrive la 1ere fois sur la page, les numéros qui sont déjà présent dans la base.
Solution: Rajouter l'option value dans le input, mais que mettre dedans ?

PS: Je ne peux pas tester ton code pour le moment mais au cours de cette après-midi.

Si jamais vous avez des réponses guidez-moi!
Je vous informerais du résultat du code qui m'a été donné jusque là.
Merci à vous!

Voila le resultat du code:

Au moment de l'insertion, il y a une erreur qui dis que chef1,chef2,...,chef12,Sous-Chef1,Sous-Chef2... sont inconnu et ca pour tout les metiers dutableau $metiers;
__________________
Yagami_Raito est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/08/2007, 08h56   #7
Membre chevronné
 
Avatar de cadoudal56
 
Inscription : février 2005
Messages : 671
Détails du profil
Informations personnelles :
Âge : 40

Informations forums :
Inscription : février 2005
Messages : 671
Points : 646
Points : 646
Hello,

Pour le probleme n°1, ta requete semble bonne. Si tu souhaites voir ce qu'elle ressort (a des fins de controles) tu ecris ceci :
Code :
1
2
3
4
5
6
7
8
 
$metiers=array();
$res= mysql_query("select distinct `EMPLOI` from `emplois` WHERE `SERVICE`='$service_utilisateur");
while($ligne= mysql_fetch_array ($res)) {
array_push($metiers,$ligne['EMPLOI']);
}
echo print_f($metiers);
exit;
Ainsi tu devrais voir ce que contiens ton tableau. Si c'est OK, efface le print_f et le exit;

Pour le probleme n°2, je dirais que ce n'est peut-etre pas le plus urgent, mais tu as deux facons de le régler. La première, c'est de controler la valeur avant insertion dans la base. Mais je trouve cela limite car l'utilisateur doit valider le formulaire avant d'etre averti du probleme.
La seconde serait de faire un javascript un peu compliqué, qui checkeris toutes les valeurs avant envoi. C'est a mon avis le plus propre je pense. Je te propose que tu en fasses un probleme a part. On va d'abord régler le probleme n°3

Probleme n°3 :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
 
//On recherche les metiers dispos
$metiers=array();
$res= mysql_query("select distinct `EMPLOI` from `emplois` WHERE `SERVICE`='$service_utilisateur");
while($ligne= mysql_fetch_array ($res)) {
array_push($metiers,$ligne['EMPLOI']);
}
 
// On recherche les effectifs deja existants
$effectif=array();
$res2= mysql_query("select * from `effectifs`");
 
//pour toutes les lignes
for  ($m=0; $m<mysql_num_rows($res2); $m++) {
      //Pour tous les champs
      for  ($x=0; $x<mysql_num_fields($res2); $x++) {
      $effectif[$m][$x] = $res2[$m][$x];
      }
}
 
echo '<table>';
for ($m=0; $m< count($metiers); $m++;) {
echo '<tr><td>'.$metiers[$m].'</td>';
     for  ($x=1; $x<=12; $x++) {
     echo '<td><imput type="text" name="'.$metiers[$m].$x.'" value="'.$effectif[$m][$x].'"></td>';
     }
echo '</tr>';
}
echo '<tr><td colspan="13"><input type="submit" value="Sauvegarder"></td></tr></table>';
Citation:
Au moment de l'insertion, il y a une erreur qui dis que chef1,chef2,...,chef12,Sous-Chef1,Sous-Chef2... sont inconnu et ca pour tout les metiers dutableau $metiers;
C'est au niveau des variables ou au niveau de la base de données que cela peche ?

Essaie les conseils ci dessus et reviens nous dire ce que cela donne

@+
cadou
__________________
PHP Competition System
Script de gestion de coupes et championnats
http://phpcompet.free.fr

Mon jeu de foot
cadoudal56 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h15.


 
 
 
 
Partenaires

Hébergement Web