osCommerce France : Accueil Forum Portail osCommerce France Réponses aux questions Foire aux contributions

Bienvenue invité ( Connexion | Inscription )

 
Reply to this topicStart new topic
> Requête mysql et array [Résolu]
equisol
posté 22 Sep 2015, 13:11
Message #1


Ceinture jaune+ OSC
Icône de groupe

Groupe : Membres
Messages : 124
Inscrit : 7-November 07
Lieu : Lyon
Membre no 19668



Hello,

Voilà, je travaille sur un module un peu particulier et j'ai un problème d'enregistrement de données pour le script suivant, dont l'objectif principal est d'enregistrer les champs de plusieurs tables dans la table MATTER_FIELDS.
Le script tourne bien, et même un peu trop ! Le problème se situe au niveau du champs "matter_fields_selected" qui, pour le 2nd enregistrement (c'est-à-dire energy_types_id = '2'), comprend 2 fois les données.

Code
        $energy_types = tep_get_energy_types();
        for ($i=0, $n=sizeof($energy_types); $i<$n; $i++) {
          $energy_type_id = $energy_types[$i]['id'];

            $tab_contenu = Array();
            $conteur_tab = 1;
            $fields_query = tep_db_query("select column_name from information_schema.columns where table_schema = '" . DB_DATABASE . "' and (table_name = '" . TABLE_SHEETS . "' or table_name = '" . TABLE_SHEETS_DESCRIPTION . "')");
              while ($fields = tep_db_fetch_array($fields_query)) {
                echo $conteur_tab . $fields['column_name'] . '|';
        
                $tab_contenu[] = array(
                     'num_tab' => $conteur_tab,
                     'fields' => $fields['column_name'],
                );
                $conteur_tab++;
              }
              reset($tab_contenu);
              foreach( $tab_contenu as $value ) {
                echo $value['num_tab'] . $value['fields'];
                $field_selected[] = $value['fields'];
              }
    
              $sql_data_array = array('matter_fields_key' => $this->common_key,
                                      'matter_fields_selected' => implode(';', $field_selected),
                                      'matter_fields_name' => 'Profil');
        
              $insert_sql_data = array('matter_fields_id' => $space_offices_id,
                                       'energy_types_id' => $energy_types[$i]['id']);
        
              $sql_data_array = array_merge($sql_data_array, $insert_sql_data);
        
              tep_db_perform(TABLE_MATTER_FIELDS, $sql_data_array);
        }


Avec tep_get_energy_types qui comprend 2 enregistrements :
Code
  function tep_get_energy_types() {
    $energy_types_query = tep_db_query("select energy_types_id, energy_types_name from " . TABLE_ENERGY_TYPES . " order by energy_types_name");
    while ($energy_types = tep_db_fetch_array($energy_types_query)) {
      $energy_types_array[] = array('id' => $energy_types['energy_types_id'],
                                     'name' => $energy_types['energy_types_name']);
    }

    return $energy_types_array;
  }

Code
--
-- Contenu de la table `energy_types`
--

INSERT INTO `energy_types` (`energy_types_id`, `energy_types_name`, `energy_types_image`, `date_added`, `last_modified`, `energy_types_seo_title`) VALUES
(1, 'Membre', NULL, '2015-09-22 11:22:35', '2015-09-22 11:37:21', ''),
(2, 'Organisation', NULL, '2015-09-22 11:37:39', NULL, '');

Voici ce qui est créé dans la table matter_fields.
Code
--
-- Structure de la table `matter_fields`
--

CREATE TABLE IF NOT EXISTS `matter_fields` (
  `matter_fields_id` int(11) NOT NULL,
  `matter_fields_name` varchar(128) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  `matter_fields_key` varchar(64) NOT NULL,
  `matter_fields_selected` text NOT NULL,
  `energy_types_id` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

--
-- Contenu de la table `matter_fields`
--

INSERT INTO `matter_fields` (`matter_fields_id`, `matter_fields_name`, `matter_fields_key`, `matter_fields_selected`, `energy_types_id`) VALUES
(80, 'Profil', 'MODULE_OFFICE_ACTIVITIES_PROFILE_SORT_ORDER', 'sheets_id;energy_actors_id;sheets_quantity;sheets_model;sheets_image;sheets_
image_hover;sheets_price;sheets_date_added;sheets_last_modified;sheets_date_avai
l
able;sheets_weight;sheets_status;sheets_tax_class_id;manufacturers_id;sheets_ord
e
red;parent_id;sheets_id;language_id;sheets_name;sheets_description;sheets_url;sh
e
ets_viewed;sheets_seo_title;sheets_seo_description;sheets_seo_keywords;sheets_mi
n
i_description', 1),
(80, 'Profil', 'MODULE_OFFICE_ACTIVITIES_PROFILE_SORT_ORDER', 'sheets_id;energy_actors_id;sheets_quantity;sheets_model;sheets_image;sheets_
image_hover;sheets_price;sheets_date_added;sheets_last_modified;sheets_date_avai
l
able;sheets_weight;sheets_status;sheets_tax_class_id;manufacturers_id;sheets_ord
e
red;parent_id;sheets_id;language_id;sheets_name;sheets_description;sheets_url;sh
e
ets_viewed;sheets_seo_title;sheets_seo_description;sheets_seo_keywords;sheets_mi
n
i_description;sheets_id;energy_actors_id;sheets_quantity;sheets_model;sheets_ima
g
e;sheets_image_hover;sheets_price;sheets_date_added;sheets_last_modified;sheets_
d
ate_available;sheets_weight;sheets_status;sheets_tax_class_id;manufacturers_id;s
h
eets_ordered;parent_id;sheets_id;language_id;sheets_name;sheets_description;shee
t
s_url;sheets_viewed;sheets_seo_title;sheets_seo_description;sheets_seo_keywords;
s
heets_mini_description', 2);

--
-- Index pour les tables exportées
--

--
-- Index pour la table `matter_fields`
--
ALTER TABLE `matter_fields`
  ADD PRIMARY KEY (`matter_fields_id`,`energy_types_id`) USING BTREE;

Auriez-vous une solution pour que ce 2nd enregistrement ne prenne qu'une fois les les champs ?

Merci !!!

Ce message a été modifié par equisol - 22 Sep 2015, 17:47.


--------------------
Goo69
Go to the top of the page
 
Havock
posté 22 Sep 2015, 15:24
Message #2


Ceinture bleue OSC
Icône de groupe

Groupe : Membres
Messages : 894
Inscrit : 4-February 04
Membre no 1926



Bonjour equisol,

Dans ta boucle tu crées un array $field_selected et tu ne le vides jamais.

Essaye un truc du style :

Code
$energy_types = tep_get_energy_types();
for ($i=0, $n=sizeof($energy_types); $i<$n; $i++) {
    $energy_type_id = $energy_types[$i]['id'];
    $tab_contenu = Array();
    $conteur_tab = 1;
    $fields_query = tep_db_query("select column_name from information_schema.columns where table_schema = '" . DB_DATABASE . "' and (table_name = '" . TABLE_SHEETS . "' or table_name = '" . TABLE_SHEETS_DESCRIPTION . "')");
    while ($fields = tep_db_fetch_array($fields_query)) {
        echo $conteur_tab . $fields['column_name'] . '|';
        $tab_contenu[] = array(
             'num_tab' => $conteur_tab,
             'fields' => $fields['column_name'],
        );
        $conteur_tab++;
    }
    reset($tab_contenu);
    $field_selected = Array();
    foreach( $tab_contenu as $value ) {
        echo $value['num_tab'] . $value['fields'];
        $field_selected[] = $value['fields'];
    }

    $sql_data_array = array('matter_fields_key' => $this->common_key,
                          'matter_fields_selected' => implode(';', $field_selected),
                          'matter_fields_name' => 'Profil');

    $insert_sql_data = array('matter_fields_id' => $space_offices_id,
                           'energy_types_id' => $energy_type_id);

    $sql_data_array = array_merge($sql_data_array, $insert_sql_data);

    tep_db_perform(TABLE_MATTER_FIELDS, $sql_data_array);
    
    unset($field_selected);
}


--------------------
L'indispensable est en cours de traitement,
L'urgent sera traité demain,
Le normal sera traité plus tard,
Le reste on vera ...
En conclusion : les journées sont trop courtes.
Utilisateur de MS2.2 Max 1.5 - OSC-Affiliate 1.09 - Admin With Access Levels 2.1 - Meta Tag Controller/ Generator - Credit/Gift Voucher/Coupons 5.05 - Download Controller v5.3 - X-Sell MS2 - WYSIWYG HTML Editor for Admin 1.7 - Dynamic Mo Pics - Loginbox Best - Order logging before payment processing - User Tracking - Faster Page Loads, Less DB queries - Plus plein de modifs perso :-)
Go to the top of the page
 
equisol
posté 22 Sep 2015, 17:46
Message #3


Ceinture jaune+ OSC
Icône de groupe

Groupe : Membres
Messages : 124
Inscrit : 7-November 07
Lieu : Lyon
Membre no 19668



Thanks a lot Havock, ça tourne nickel chrome !!

Merci beaucoup !!


--------------------
Goo69
Go to the top of the page
 

Reply to this topicStart new topic
1 utilisateur(s) sur ce sujet (1 invité(s) et 0 utilisateur(s) anonyme(s))
0 membre(s) :

 



RSS Version bas débit Nous sommes le : 23rd November 2017 - 19:23
Ce site est déclaré auprès de la commision Nationale
de l'Informatique et des Libertés (déclaration n°: 1043896)