Esempio n. 1
0
 function executeProc($procedure, $idProc, $tparams)
 {
     global $msg, $dbh, $PMBuserid;
     global $pmb_procedure_server_credentials, $pmb_procedure_server_address;
     if (SESSrights & ADMINISTRATION_AUTH) {
         $name = "";
         $report = "";
         if ($tparams) {
             foreach ($tparams as $aparam => $vparam) {
                 global ${$aparam};
                 ${$aparam} = $vparam;
             }
         }
         switch ($procedure) {
             case INTERNAL:
                 $hp = new parameters($idProc, "procs");
                 $hp->get_final_query();
                 $code_sql = $hp->final_query;
                 $autorisations = $hp->proc->autorisations;
                 break;
             case EXTERNAL:
                 $pmb_procedure_server_credentials_exploded = explode("\n", $pmb_procedure_server_credentials);
                 if ($pmb_procedure_server_address && count($pmb_procedure_server_credentials_exploded) == 2) {
                     $aremote_procedure_client = new remote_procedure_client($pmb_procedure_server_address, trim($pmb_procedure_server_credentials_exploded[0]), trim($pmb_procedure_server_credentials_exploded[1]));
                     $procedure = $aremote_procedure_client->get_proc($idProc, "AP");
                     $the_procedure = $procedure["procedure"];
                     if ($procedure["error_message"]) {
                         $report = htmlentities($msg["remote_procedures_error_server"], ENT_QUOTES, $charset) . ":<br><i>" . $procedure["error_message"] . "</i>";
                         $result = array("name" => $the_procedure->name, "report" => $report);
                         return $result;
                     } else {
                         if ($the_procedure->params && $the_procedure->params != "NULL") {
                             $sql = "CREATE TEMPORARY TABLE remote_proc LIKE procs";
                             mysql_query($sql, $dbh) or die(mysql_error());
                             $sql = "INSERT INTO remote_proc (idproc, name, requete, comment, autorisations, parameters, num_classement) VALUES (0, '" . mysql_escape_string($the_procedure->name) . "', '" . mysql_escape_string($the_procedure->sql) . "', '" . mysql_escape_string($the_procedure->comment) . "', '', '" . mysql_escape_string($the_procedure->params) . "', 0)";
                             mysql_query($sql, $dbh) or die(mysql_error());
                             $idproc = mysql_insert_id($dbh);
                             $hp = new parameters($idproc, "remote_proc");
                             $hp->get_final_query();
                             $the_procedure->sql = $hp->final_query;
                             $name = $the_procedure->name;
                             $code_sql = $the_procedure->sql;
                             $commentaire = $the_procedure->comment;
                         }
                     }
                 }
                 break;
         }
         $linetemp = explode(";", $code_sql);
         if ($autorisations) {
             $temp_autorisation = explode(" ", $autorisations);
         }
         $allow = false;
         if ($temp_autorisation) {
             foreach ($temp_autorisation as $userid) {
                 if ($userid == $PMBuserid) {
                     $allow = true;
                 }
             }
             if (!$allow) {
                 $report = $msg["11"];
                 //					throw new Exception($message, $code);
                 $result = array("name" => $name, "report" => $report);
                 return $result;
             }
         }
         for ($i = 0; $i < count($linetemp); $i++) {
             if (trim($linetemp[$i])) {
                 $line[] = trim($linetemp[$i]);
             }
         }
         while (list($cle, $valeur) = each($line)) {
             if ($valeur) {
                 // traitement des paramètres
                 // traitement tri des colonnes
                 if ($sortfield != "") {
                     // on cherche à trier sur le champ $trifield
                     // compose la chaîne de tri
                     $tri = $sortfield;
                     if ($desc == 1) {
                         $tri .= " DESC";
                     } else {
                         $tri .= " ASC";
                     }
                     // on enlève les doubles espaces dans la procédure
                     $valeur = ereg_replace("/\\s+/", " ", $valeur);
                     // supprime un éventuel ; à la fin de la requête
                     $valeur = ereg_replace("/;\$/", "", $valeur);
                     // on recherche la première occurence de ORDER BY
                     $s = stristr($valeur, "order by");
                     if ($s) {
                         // y'a déjà une clause order by... moins facile...
                         // il faut qu'on sache si on aura besoin de mettre une virgule ou pas
                         if (ereg(",", $s)) {
                             $virgule = true;
                         } else {
                             if (!ereg("{$sortfield}", $s)) {
                                 $virgule = true;
                             } else {
                                 $virgule = false;
                             }
                         }
                         if ($virgule) {
                             $tri .= ", ";
                         }
                         // regarde si le champ est déjà dans la liste des champs à trier et le remplace si besoin
                         $new_s = preg_replace("/{$sortfield}, /", "", $s);
                         $new_s = preg_replace("/{$sortfield}/", "", $new_s);
                         // ajoute la clause order by correcte
                         $new_s = preg_replace("/order\\s+by\\s+/i", "order by {$tri}", $new_s);
                         // replace l'ancienne chaîne par la nouvelle
                         $valeur = str_replace($s, $new_s, $valeur);
                     } else {
                         $valeur .= " order by {$tri}";
                     }
                 }
                 $report .= "<strong>" . $msg["procs_ligne"] . " {$cle} </strong>:&nbsp;{$valeur}<br /><br />";
                 if (explain_requete($valeur)) {
                     $res = @mysql_query($valeur, $dbh);
                     $report .= mysql_error();
                     $nbr_lignes = @mysql_num_rows($res);
                     $nbr_champs = @mysql_num_fields($res);
                     if ($nbr_lignes) {
                         $report .= "<table >";
                         for ($i = 0; $i < $nbr_champs; $i++) {
                             $fieldname = mysql_field_name($res, $i);
                             $report .= "<th>{$fieldname}</th>";
                         }
                         for ($i = 0; $i < $nbr_lignes; $i++) {
                             $row = mysql_fetch_row($res);
                             $report .= "<tr>";
                             foreach ($row as $dummykey => $col) {
                                 if (trim($col) == '') {
                                     $col = '&nbsp;';
                                 }
                                 $report .= '<td >' . $col . '</td>';
                             }
                             $report .= "</tr>";
                         }
                         $report .= "</table><hr />";
                         $report .= "<font color='#ff0000'>" . $msg['admin_misc_lignes'] . " " . mysql_affected_rows($dbh) . "</font>";
                     } else {
                         $report .= "<br /><font color='#ff0000'>" . $msg['admin_misc_lignes'] . " " . mysql_affected_rows($dbh);
                         $err = mysql_error($dbh);
                         if ($err) {
                             $report .= "<br />{$err}";
                         }
                         $report .= "</font><hr />";
                     }
                 } else {
                     // erreur explain_requete
                     $report .= $valeur . "<br /><br />" . $msg["proc_param_explain_failed"] . "<br /><br />" . $erreur_explain_rqt;
                 }
             }
         }
         // fin while
         $result = array("name" => $name, "report" => $report);
         return $result;
     }
     return array();
 }
Esempio n. 2
0
function display_remote_proc($id)
{
    global $pmb_procedure_server_credentials, $pmb_procedure_server_address;
    global $empr_proc_view_remote;
    global $type_list;
    global $msg;
    $pmb_procedure_server_credentials_exploded = explode("\n", $pmb_procedure_server_credentials);
    $the_procedure = 0;
    if ($pmb_procedure_server_address && count($pmb_procedure_server_credentials_exploded) == 2) {
        $aremote_procedure_client = new remote_procedure_client($pmb_procedure_server_address, trim($pmb_procedure_server_credentials_exploded[0]), trim($pmb_procedure_server_credentials_exploded[1]));
        $procedure = $aremote_procedure_client->get_proc($id);
        if ($procedure["error_message"]) {
            $buf_contenu = htmlentities($msg["remote_procedures_error_server"], ENT_QUOTES, $charset) . ":<br><i>" . $procedure["error_message"] . "</i>";
            print $buf_contenu;
            return;
        }
        $the_procedure = $procedure["procedure"];
    }
    if (!$the_procedure) {
        echo htmlentities($msg["remote_procedures_error_client"], ENT_QUOTES, $charset);
        return;
    }
    global $msg;
    global $admin_proc_form;
    global $charset;
    $empr_proc_view_remote = str_replace('!!id!!', $id, $empr_proc_view_remote);
    $empr_proc_view_remote = str_replace('!!form_title!!', htmlentities($msg["remote_procedures_detail_procedure_distante"], ENT_QUOTES, $charset), $empr_proc_view_remote);
    $additional_information = $the_procedure->untested ? $msg["remote_procedures_procedure_non_validated_additional_information"] : "";
    $empr_proc_view_remote = str_replace('!!additional_information!!', htmlentities($additional_information, ENT_QUOTES, $charset), $empr_proc_view_remote);
    $empr_proc_view_remote = str_replace('!!name!!', htmlentities($the_procedure->name, ENT_QUOTES, $charset), $empr_proc_view_remote);
    $empr_proc_view_remote = str_replace('!!name_suppr!!', htmlentities(addslashes($the_procedure->name), ENT_QUOTES, $charset), $empr_proc_view_remote);
    $empr_proc_view_remote = str_replace('!!ptype!!', htmlentities($the_procedure->type == "PEMPS" ? $msg["caddie_procs_type_SELECT"] : $msg["caddie_procs_type_ACTION"], ENT_QUOTES, $charset), $empr_proc_view_remote);
    $empr_proc_view_remote = str_replace('!!code!!', htmlentities($the_procedure->sql, ENT_QUOTES, $charset), $empr_proc_view_remote);
    $empr_proc_view_remote = str_replace('!!comment!!', htmlentities($the_procedure->comment, ENT_QUOTES, $charset), $empr_proc_view_remote);
    $parameters = $the_procedure->params;
    $parameters = $aremote_procedure_client->parse_parameters($parameters);
    //	highlight_string(print_r($parameters, true));
    if ($parameters) {
        $empr_proc_view_remote = str_replace('!!parameters_title!!', "<label class='etiquette' for='form_comment'>" . htmlentities($msg["remote_procedures_procedure_parameters"], ENT_QUOTES, $charset) . "</label>", $empr_proc_view_remote);
        $parameters_display = '<table><tr><th>' . htmlentities($msg["remote_procedures_procedure_parameters_name"], ENT_QUOTES, $charset) . '</th><th>' . htmlentities($msg["remote_procedures_procedure_parameters_title"], ENT_QUOTES, $charset) . '</th><th>' . htmlentities($msg["remote_procedures_procedure_parameters_type"], ENT_QUOTES, $charset) . '</th><th>' . htmlentities($msg["remote_procedures_procedure_parameters"], ENT_QUOTES, $charset) . '</th></tr>';
        $parity = 0;
        foreach ($parameters as $parametername => $parameter) {
            $pair_impair = $parity++ % 2 ? "even" : "odd";
            $tr_javascript = " onmouseover=\"this.className='surbrillance'\" onmouseout=\"this.className='{$pair_impair}'\" ";
            $parameters_display .= '<tr class="' . $pair_impair . '" ' . $tr_javascript . '>';
            $parameters_display .= '<td align="center">' . htmlentities($parametername, ENT_QUOTES, $charset) . '</td>';
            $parameters_display .= '<td align="center">' . htmlentities($parameter["title"]['value'], ENT_QUOTES, $charset) . '</td>';
            $parameters_display .= '<td align="center">' . htmlentities($type_list[$parameter["type"]["value"]], ENT_QUOTES, $charset) . '</td>';
            switch ($parameter["type"]["value"]) {
                case "query_list":
                    $parameters_display .= '<td><ul><li>' . htmlentities($msg["procs_options_requete"], ENT_QUOTES, $charset) . ': ' . htmlentities($parameter["options"]["QUERY"][0]["value"], ENT_QUOTES, $charset) . '</li><li>' . htmlentities($msg["procs_options_liste_multi"], ENT_QUOTES, $charset) . ': ' . ($parameter["options"]["MULTIPLE"][0]["value"] == "yes" ? htmlentities($msg["40"], ENT_QUOTES, $charset) : htmlentities($msg["39"], ENT_QUOTES, $charset)) . '</li></ul></td>';
                    break;
                case "text":
                    $parameters_display .= '<td><ul><li>' . htmlentities($msg["procs_options_text_taille"], ENT_QUOTES, $charset) . ': ' . htmlentities($parameter["options"]["SIZE"][0]["value"], ENT_QUOTES, $charset) . '</li><li>' . htmlentities($msg["procs_options_text_max"], ENT_QUOTES, $charset) . ': ' . $parameter["options"]["MAXSIZE"][0]["value"] . '</li></ul></td>';
                    break;
                case "list":
                    $parameters_display .= '<td><ul>';
                    $parameters_display .= '<li>' . htmlentities($msg["procs_options_liste_multi"], ENT_QUOTES, $charset) . ': ' . ($parameter["options"]["MULTIPLE"][0]["value"] == "yes" ? htmlentities($msg["40"], ENT_QUOTES, $charset) : htmlentities($msg["39"], ENT_QUOTES, $charset)) . '</li>';
                    $parameters_display .= '<li>' . htmlentities($msg["procs_options_choix_vide"], ENT_QUOTES, $charset) . ': ' . htmlentities($parameter["options"]["UNSELECT_ITEM"][0]["value"], ENT_QUOTES, $charset) . ' (' . htmlentities($parameter["options"]["UNSELECT_ITEM"][0]["VALUE"], ENT_QUOTES, $charset) . ')</li>';
                    $choix = array();
                    foreach ($parameter["options"]["ITEMS"][0]["ITEM"] as $achoix) {
                        $choix[] = $achoix["value"] . " (" . $achoix["VALUE"] . ")";
                    }
                    $parameters_display .= '<li>' . htmlentities($msg["procs_options_liste_options"], ENT_QUOTES, $charset) . ': ' . htmlentities(implode("; ", $choix), ENT_QUOTES, $charset) . '</li>';
                    $parameters_display .= '</ul></td>';
                    break;
                case "date_box":
                    $parameters_display .= '<td><br><br></td>';
                    break;
                case "selector":
                    $parameters_display .= '<td><ul>';
                    $parameters_display .= '<li>' . htmlentities($msg["include_option_methode"], ENT_QUOTES, $charset) . ': ' . ($parameter["options"]["METHOD"][0]["value"] == "1" ? $msg['parperso_include_option_selectors_id'] : $msg['parperso_include_option_selectors_label']) . '</li>';
                    $id_captions = array($msg['133'], $msg['134'], $msg['135'], $msg['136'], $msg['137'], $msg['333'], $msg['indexint_menu']);
                    $parameters_display .= '<li>' . htmlentities($msg["include_option_type_donnees"], ENT_QUOTES, $charset) . ': ' . htmlentities($id_captions[$parameter["options"]["DATA_TYPE"][0]["value"]], ENT_QUOTES, $charset) . '</li>';
                    $parameters_display .= '</ul></td>';
                    break;
                case "file_box":
                    $parameters_display .= '<td><ul>';
                    $parameters_display .= '<li>' . htmlentities($msg["include_option_methode"], ENT_QUOTES, $charset) . ': ' . ($parameter["options"]["METHOD"][0]["value"] == "1" ? htmlentities($msg["57"], ENT_QUOTES, $charset) : htmlentities($msg["include_option_table"], ENT_QUOTES, $charset)) . '</li>';
                    $parameters_display .= '<li>' . htmlentities($msg["include_option_nom_table"], ENT_QUOTES, $charset) . ': ' . htmlentities($parameter["options"]["TEMP_TABLE_NAME"][0]["value"], ENT_QUOTES, $charset) . '</li>';
                    $parameters_display .= '<li>' . htmlentities($msg["include_option_type_donnees"], ENT_QUOTES, $charset) . ': ' . ($parameter["options"]["DATA_TYPE"][0]["value"] == "1" ? "Chaine" : "Entier") . '</li>';
                    $parameters_display .= '</ul></td>';
                    break;
                default:
                    break;
            }
            $parameters_display .= '</tr>';
        }
        $parameters_display .= '</table>';
        $empr_proc_view_remote = str_replace('!!parameters_content!!', $parameters_display, $empr_proc_view_remote);
    }
    $empr_proc_view_remote = str_replace('!!parameters_title!!', "", $empr_proc_view_remote);
    $empr_proc_view_remote = str_replace('!!parameters_content!!', "", $empr_proc_view_remote);
    print $empr_proc_view_remote;
}
Esempio n. 3
0
 function make_serialized_task_params()
 {
     global $dbh, $type_proc, $form_procs, $form_procs_remote;
     global $tocsv_checked, $tocsv_sep, $tocsv_filepath, $tocsv_enclosure;
     global $pmb_procedure_server_credentials, $pmb_procedure_server_address;
     $t = parent::make_serialized_task_params();
     $t['type_proc'] = stripslashes($type_proc);
     $t['form_procs'] = stripslashes($form_procs);
     $t['form_procs_remote'] = stripslashes($form_procs_remote);
     $t['tocsv']['checked'] = $tocsv_checked;
     $t['tocsv']['sep'] = stripslashes($tocsv_sep);
     $t['tocsv']['filepath'] = stripslashes($tocsv_filepath);
     $t['tocsv']['enclosure'] = stripslashes($tocsv_enclosure);
     if ($form_procs) {
         $hp = new parameters($form_procs, 'procs');
         $t['envt'] = $hp->make_serialized_parameters_params();
     } else {
         if ($form_procs_remote) {
             $id = $form_procs_remote;
             $pmb_procedure_server_credentials_exploded = explode("\n", $pmb_procedure_server_credentials);
             if ($pmb_procedure_server_address && count($pmb_procedure_server_credentials_exploded) == 2) {
                 $aremote_procedure_client = new remote_procedure_client($pmb_procedure_server_address, trim($pmb_procedure_server_credentials_exploded[0]), trim($pmb_procedure_server_credentials_exploded[1]));
                 $procedure = $aremote_procedure_client->get_proc($id, "AP");
                 if (!$procedure['error_message']) {
                     $the_procedure = $procedure['procedure'];
                     if ($the_procedure) {
                         $sql = "CREATE TEMPORARY TABLE remote_proc LIKE procs";
                         pmb_mysql_query($sql, $dbh) or die(pmb_mysql_error());
                         $sql = "INSERT INTO remote_proc (idproc, name, requete, comment, autorisations, parameters, num_classement) VALUES (0, '" . pmb_mysql_escape_string($the_procedure->name) . "', '" . pmb_mysql_escape_string($the_procedure->sql) . "', '" . pmb_mysql_escape_string($the_procedure->comment) . "', '', '" . pmb_mysql_escape_string($the_procedure->params) . "', 0)";
                         pmb_mysql_query($sql, $dbh) or die(pmb_mysql_error());
                         $idproc = pmb_mysql_insert_id($dbh);
                         $hp = new parameters($idproc, "remote_proc");
                         $t['envt'] = $hp->make_serialized_parameters_params();
                     }
                 }
             }
         }
     }
     return serialize($t);
 }
Esempio n. 4
0
 function make_serialized_task_params()
 {
     global $dbh, $type_proc, $form_procs, $form_procs_remote;
     global $pmb_procedure_server_credentials, $pmb_procedure_server_address;
     $t = parent::make_serialized_task_params();
     $t["type_proc"] = stripslashes($type_proc);
     $t["form_procs"] = stripslashes($form_procs);
     $t["form_procs_remote"] = stripslashes($form_procs_remote);
     if ($form_procs) {
         $hp = new parameters($form_procs, "procs");
         $t["envt"] = $hp->make_serialized_parameters_params();
     } else {
         if ($form_procs_remote) {
             $id = $form_procs_remote;
             $pmb_procedure_server_credentials_exploded = explode("\n", $pmb_procedure_server_credentials);
             if ($pmb_procedure_server_address && count($pmb_procedure_server_credentials_exploded) == 2) {
                 $aremote_procedure_client = new remote_procedure_client($pmb_procedure_server_address, trim($pmb_procedure_server_credentials_exploded[0]), trim($pmb_procedure_server_credentials_exploded[1]));
                 $procedure = $aremote_procedure_client->get_proc($id, "AP");
                 if (!$procedure["error_message"]) {
                     $the_procedure = $procedure["procedure"];
                     if ($the_procedure) {
                         $sql = "CREATE TEMPORARY TABLE remote_proc LIKE procs";
                         mysql_query($sql, $dbh) or die(mysql_error());
                         $sql = "INSERT INTO remote_proc (idproc, name, requete, comment, autorisations, parameters, num_classement) VALUES (0, '" . mysql_escape_string($the_procedure->name) . "', '" . mysql_escape_string($the_procedure->sql) . "', '" . mysql_escape_string($the_procedure->comment) . "', '', '" . mysql_escape_string($the_procedure->params) . "', 0)";
                         mysql_query($sql, $dbh) or die(mysql_error());
                         $idproc = mysql_insert_id($dbh);
                         $hp = new parameters($idproc, "remote_proc");
                         $t["envt"] = $hp->make_serialized_parameters_params();
                     }
                 }
             }
         }
     }
     return serialize($t);
 }
Esempio n. 5
0
 function executeProc($procedure, $idProc, $tparams)
 {
     global $msg, $dbh, $charset, $PMBuserid;
     global $pmb_procedure_server_credentials, $pmb_procedure_server_address;
     if (SESSrights & ADMINISTRATION_AUTH) {
         $name = '';
         $report = '';
         if ($tparams['envt']) {
             foreach ($tparams['envt'] as $aparam => $vparam) {
                 global ${$aparam};
                 ${$aparam} = $vparam;
             }
         }
         switch ($procedure) {
             case INTERNAL:
                 $hp = new parameters($idProc, 'procs');
                 $hp->get_final_query();
                 $code_sql = $hp->final_query;
                 $autorisations = $hp->proc->autorisations;
                 break;
             case EXTERNAL:
                 $pmb_procedure_server_credentials_exploded = explode("\n", $pmb_procedure_server_credentials);
                 if ($pmb_procedure_server_address && count($pmb_procedure_server_credentials_exploded) == 2) {
                     $aremote_procedure_client = new remote_procedure_client($pmb_procedure_server_address, trim($pmb_procedure_server_credentials_exploded[0]), trim($pmb_procedure_server_credentials_exploded[1]));
                     $procedure = $aremote_procedure_client->get_proc($idProc, "AP");
                     $the_procedure = $procedure['procedure'];
                     if ($procedure['error_message']) {
                         $report = htmlentities($msg['remote_procedures_error_server'], ENT_QUOTES, $charset) . ':<br /><i>' . $procedure['error_message'] . '</i>';
                         $result = array('name' => $the_procedure->name, 'report' => $report);
                         return $result;
                     } else {
                         if ($the_procedure->params && $the_procedure->params != 'NULL') {
                             $sql = 'CREATE TEMPORARY TABLE remote_proc LIKE procs';
                             pmb_mysql_query($sql, $dbh) or die(pmb_mysql_error());
                             $sql = "INSERT INTO remote_proc (idproc, name, requete, comment, autorisations, parameters, num_classement) VALUES (0, '" . pmb_mysql_escape_string($the_procedure->name) . "', '" . pmb_mysql_escape_string($the_procedure->sql) . "', '" . pmb_mysql_escape_string($the_procedure->comment) . "', '', '" . pmb_mysql_escape_string($the_procedure->params) . "', 0)";
                             pmb_mysql_query($sql, $dbh) or die(pmb_mysql_error());
                             $idproc = pmb_mysql_insert_id($dbh);
                             $hp = new parameters($idproc, 'remote_proc');
                             $hp->get_final_query();
                             $the_procedure->sql = $hp->final_query;
                             $name = $the_procedure->name;
                             $code_sql = $the_procedure->sql;
                             $commentaire = $the_procedure->comment;
                         }
                     }
                 }
                 break;
         }
         $linetemp = explode(';', $code_sql);
         if ($autorisations) {
             $temp_autorisation = explode(' ', $autorisations);
         }
         $allow = false;
         if ($temp_autorisation) {
             foreach ($temp_autorisation as $userid) {
                 if ($userid == $PMBuserid) {
                     $allow = true;
                 }
             }
             if (!$allow) {
                 $report = $msg[11];
                 //					throw new Exception($message, $code);
                 $result = array('name' => $name, 'report' => $report);
                 return $result;
             }
         }
         $line = array();
         for ($i = 0; $i < count($linetemp); $i++) {
             if (trim($linetemp[$i])) {
                 $line[] = trim($linetemp[$i]);
             }
         }
         while (list($cle, $valeur) = each($line)) {
             if ($valeur) {
                 $report .= "<strong>" . $msg['procs_ligne'] . " {$cle} </strong>:&nbsp;{$valeur}<br /><br />";
                 $er = explain_requete($valeur);
                 if ($er) {
                     $res = @pmb_mysql_query($valeur, $dbh);
                     $report .= pmb_mysql_error();
                     $nbr_lignes = @pmb_mysql_num_rows($res);
                     $nbr_champs = @pmb_mysql_num_fields($res);
                     if ($nbr_lignes) {
                         $report .= "<table >";
                         for ($i = 0; $i < $nbr_champs; $i++) {
                             $fieldname = pmb_mysql_field_name($res, $i);
                             $report .= "<th>{$fieldname}</th>";
                         }
                         for ($i = 0; $i < $nbr_lignes; $i++) {
                             $row = pmb_mysql_fetch_row($res);
                             $report .= "<tr>";
                             foreach ($row as $dummykey => $col) {
                                 if (trim($col) == '') {
                                     $col = '&nbsp;';
                                 }
                                 $report .= '<td >' . $col . '</td>';
                             }
                             $report .= "</tr>";
                         }
                         $report .= "</table><hr />";
                         $report .= "<font color='#ff0000'>" . $msg['admin_misc_lignes'] . " " . pmb_mysql_affected_rows($dbh) . "</font>";
                     } else {
                         $report .= "<br /><font color='#ff0000'>" . $msg['admin_misc_lignes'] . " " . pmb_mysql_affected_rows($dbh);
                         $err = pmb_mysql_error($dbh);
                         if ($err) {
                             $report .= "<br />{$err}";
                         }
                         $report .= "</font><hr />";
                     }
                 } else {
                     // erreur explain_requete
                     $report .= $valeur . "<br /><br />" . $msg['proc_param_explain_failed'] . "<br /><br />" . $erreur_explain_rqt;
                 }
             }
         }
         // fin while
         //Export CSV sur le resultat de la derniere requete
         if ($er && $nbr_lignes && $tparams['tocsv']['checked'] == '1' && $tparams['tocsv']['filepath']) {
             if (!$tparams['tocsv']['sep']) {
                 $tparams['tocsv']['sep'] = ',';
             }
             $trow = array();
             if ($tparams['tocsv']['enclosure']) {
                 for ($i = 0; $i < $nbr_champs; $i++) {
                     $trow[] = addcslashes(pmb_mysql_field_name($res, $i), $tparams['tocsv']['enclosure']);
                 }
                 $row = $tparams['tocsv']['enclosure'] . implode($tparams['tocsv']['enclosure'] . $tparams['tocsv']['sep'] . $tparams['tocsv']['enclosure'], $trow) . $tparams['tocsv']['enclosure'] . "\r\n";
             } else {
                 $row = implode($tparams['tocsv']['sep'], $trow) . "\r\n";
             }
             file_put_contents($tparams['tocsv']['filepath'], $row);
             pmb_mysql_data_seek($res, 0);
             for ($i = 0; $i < $nbr_lignes; $i++) {
                 $trow = pmb_mysql_fetch_row($res);
                 if ($tparams['tocsv']['enclosure']) {
                     foreach ($trow as $k => $v) {
                         $trow[$k] = addcslashes($v, $tparams['tocsv']['enclosure']);
                     }
                     $row = $tparams['tocsv']['enclosure'] . implode($tparams['tocsv']['enclosure'] . $tparams['tocsv']['sep'] . $tparams['tocsv']['enclosure'], $trow) . $tparams['tocsv']['enclosure'] . "\r\n";
                 } else {
                     $row = implode($tparams['tocsv']['sep'], $trow) . "\r\n";
                 }
                 file_put_contents($tparams['tocsv']['filepath'], $row, FILE_APPEND);
             }
         }
         $result = array('name' => $name, 'report' => $report);
         return $result;
     }
     return array();
 }