Version imprimable du sujet

Cliquez ici pour voir ce sujet dans son format original

Forum osCommerce-fr _ Developpement OsC2.3 _ Requête mysql et array [Résolu]

Écrit par : equisol 22 Sep 2015, 13:11

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 !!!

Écrit par : Havock 22 Sep 2015, 15:24

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);
}

Écrit par : equisol 22 Sep 2015, 17:46

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

Merci beaucoup !!

Propulsé par Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)