IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

[SQL] Remplir une base SQL à partir d'un tableau à plusieurs lignes et colonnes


Sujet :

PHP & Base de données

  1. #1
    Membre du Club Avatar de Yagami_Raito
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 106
    Points : 55
    Points
    55
    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.

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut


    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)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Membre éclairé Avatar de cadoudal56
    Profil pro
    Inscrit en
    Février 2005
    Messages
    694
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2005
    Messages : 694
    Points : 779
    Points
    779
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    LMN24 - Site d'actualité internationale multilingue
    http://www.lmn24.com

  4. #4
    Membre du Club Avatar de Yagami_Raito
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 106
    Points : 55
    Points
    55
    Par défaut
    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

  5. #5
    Membre éclairé Avatar de cadoudal56
    Profil pro
    Inscrit en
    Février 2005
    Messages
    694
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2005
    Messages : 694
    Points : 779
    Points
    779
    Par défaut
    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
    LMN24 - Site d'actualité internationale multilingue
    http://www.lmn24.com

  6. #6
    Membre du Club Avatar de Yagami_Raito
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 106
    Points : 55
    Points
    55
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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;

  7. #7
    Membre éclairé Avatar de cadoudal56
    Profil pro
    Inscrit en
    Février 2005
    Messages
    694
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2005
    Messages : 694
    Points : 779
    Points
    779
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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>';
    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
    LMN24 - Site d'actualité internationale multilingue
    http://www.lmn24.com

Discussions similaires

  1. [Débutant] remplir une base sql chaque 1 s avec un fichier .dat
    Par djdidi2010 dans le forum C#
    Réponses: 2
    Dernier message: 25/03/2013, 13h11
  2. Réponses: 2
    Dernier message: 06/03/2008, 14h26
  3. [SQL] obtenir le fichier .sql d'une base de données
    Par ca_mido dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 24/09/2007, 11h03
  4. convertir une base sql server en base Access
    Par Smix007 dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 06/05/2007, 11h44
  5. [SQL] Importer un fichier .sql dans une base de données avec PHP
    Par budiste dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 23/06/2006, 14h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo