".basename($err_file).'@'.$err_line.": \n
".str_replace("\n","\n
",$msg); if ($exit) exit; } // genere le header http approprié en fonction d'une erreur donnée function erreur($type, $ou = NULL, $header_only = false, $reponse = NULL, $msg = NULL) { header("Cache-Control: no-store, no-cache, must-revalidate"); header("Content-Type: text/html"); if ($type == 400) { @header('HTTP/1.1 400 Bad Request', true, 400); @header("Connection: Close"); $titre = "Erreur 400".(!empty($ou) ? " [$ou]" : ""); $body = "

Demande invalide

"; if ($msg) $body .= "

$msg.
Retourner à l'accueil

"; } else if ($type == 403) { @header('HTTP/1.1 403 Forbidden', true, 403); @header("Connection: Close"); $titre = "Erreur 403: Forbidden"; $body = "

Demande incorrecte

"; } else if ($type == 404) { @header('HTTP/1.1 404 Not Found', true, 404); @header("Connection: Close"); $titre = "Erreur 404: Document introuvable"; $body = "

Document demandé introuvable

"; } else { @header('HTTP/1.1 503 Service Unavailable', true, 503); @header("Retry-After: 600"); // 10 minutes @header("Connection: Close"); $titre = "Erreur 503: serveur KO"; if (!empty($ou)) $titre .= " [$ou]"; $body = "

Serveur hors service

"; if ($msg) $body .= "

$msg.

"; else $body .= "

Le service est temporairement suspendu pour des raisons de maintenance ou un trop grand nombre de demandes.
Merci de ré-essayer plus tard.

"; } if ($header_only) { exit; } if (!empty($reponse)) { echo $reponse; exit; } $doc = ''."\n"; $doc .= ""; $doc .= ""; $doc .= ""; $doc .= ""; $doc .= "$titre"; $doc .= ""; $doc .= ""; $doc .= "\n"; $doc .= ""; $doc .= ""; $doc .= htm_bandeau_haut(false, "../"); $doc .= $body; $doc .= htm_bandeau_bas(); $doc .= ""; echo $doc; exit; } //-------------------------- MANIP TEXTE -------------------------- // remplace les guillemets simples de txt par l'equivalent html ’ function quote_anonyme($txt) { return str_replace ("'", "’", $txt); } // banalise les guillemets simples et double function anti_quotes($txt) { return str_replace("'", "'", str_replace('"', """, $txt)); } // banalise les caractere speciaux function back_quote($txt) { return rawurlencode($txt); } function est_un_jpg($test) { // espace _ - et accents autorisés (mais normalement, ils sont virés en amont de ce test, pour au cas où ils poseraient problèmes... $semble_ok = preg_match("/^[0-9A-Za-zéèëêçàâäïîùüûñôöò _\-]+\.(jpg|JPG|jpeg|JPEG)$/" , $test, $match) ? true : false; if ($semble_ok && $match[0] == $test) return true; return false; } function est_un_reel($test) { $semble_ok = preg_match("/^-?[0-9]+(\.[0-9]*)?$|\.[0-9]+/" , $test, $match) ? true : false; if ($semble_ok && $match[0] == $test) return true; return false; } function est_un_entier($test, $nb_chiffres_max) { $semble_ok = preg_match("/^[0-9]{1,$nb_chiffres_max}/" , $test, $match) ? true : false; if ($semble_ok && $match[0] == $test) return true; return false; } function est_un_texte($test) { // return preg_match("/^([A-Za-zéèëêçàâäïîùüûñôöò][A-Za-z0-9éèëêçàâäïîùüûñôöò \\*\\+\\-_=\/\\.,:;'\"!\\?\\$\\(\\)\\[\\]~&@\n]*)$/D" , $test, $match) ? true : false; return preg_match("/^([\w ²\\*\\+\\-_=\/\\.,:;'\"!\\?\\$\\(\\)\\[\\]~&@\n]*)$/D" , $test, $match) ? true : false; } function est_un_texte_long($test) { //même regex que pour est_un_texte sauf que le \n (nouvelle ligne) est remplacé par \s (nouvelle ligne ou tabulation ou retour chariot) return preg_match("/^([\w ²\\*\\+\\-_=\/\\.,:;'\"!\\?\\$\\(\\)\\[\\]~&@\s]*)$/D" , $test, $match) ? true : false; } function est_une_date($test) { $semble_ok = preg_match(":^(((0?[1-9]|[1-2][0-9]|3[01])/)?(0?[1-9]|1[0-2])/)?(19|20)[0-9]{2}$:" , $test, $match) ? true : false; if ($semble_ok && $match[0] == $test) return true; return false; } function est_liste_entiers($test) { $semble_ok = preg_match("/^([0-9]+(,[0-9]+)*)/" , $test, $match) ? true : false; if ($semble_ok && $match[0] == $test) return true; return false; } function est_liste_entiers_signes($test) { $semble_ok = preg_match("/^((\+|-)?[0-9]+(,(\+|-)?[0-9]+)*)/" , $test, $match) ? true : false; if ($semble_ok && $match[0] == $test) return true; return false; } function est_un_nom_prenom($test) {// / $semble_ok = preg_match("/^[A-Za-zéèëêçàâäïîùüûñôöò '\\-]+$/" , $test, $match) ? true : false; if ($semble_ok && $match[0] == $test) return true; return false; } function est_un_habitat($test) {// / $semble_ok = preg_match("/^[0-9.A-B]+$/" , $test, $match) ? true : false; // lettre majuscule, chiffre et . if ($semble_ok && $match[0] == $test) return true; return false; } function est_un_mdp($test) { // 6 à 20 caractères, lettres, chiffres ou _ - ? ! $ & $semble_ok = preg_match("/^[0-9a-zA-Zéèëêçàâäïîùüûñôöò\\-\\?\\$_!&]{6,20}$/" , $test, $match) ? true : false; if ($semble_ok && $match[0] == $test) return true; return false; } function est_un_mail($test) {// / $ch = "[A-Z]|[a-z]|[0-9]|[éèëêçàâäïîùüûñôöò]"; $ex = "($ch)+($ch|[-\._])*@($ch)+($ch|[-_])*\.($ch)+"; if (!ereg($ex, $test)) return false; $ex = "[^@]+@(.+)"; if (!ereg($ex, $test, $match)) return false; return true; } function est_un_phone($test) { $semble_ok = preg_match("/^[0-9 \.]{10,14}$/" , $test, $match) ? true : false; if ($semble_ok && $match[0] == $test) return true; return false; } function est_un_login($test) { $semble_ok = preg_match("/^[a-zA-Z\\-]+$/" , $test, $match) ? true : false; if ($semble_ok && $match[0] == $test) return true; return false; } //-------------------------- function undoMagicQuotes($array, $topLevel=true) { // utilisation: $_GET = undoMagicQuotes($_GET); $newArray = array(); foreach($array as $key => $value) { if (!$topLevel) { $key = stripslashes($key); } if (is_array($value)) { $newArray[$key] = undoMagicQuotes($value, false); } else { $newArray[$key] = stripslashes($value); } } return $newArray; } function insecable($txt) { return str_replace(" ", " ", $txt); } function harmonise($nom, $prenom) { if ($prenom == "?" || empty($prenom) || $prenom == "ONCFS") { $p = ""; } else if (strpos($prenom, ' ') === FALSE && strpos($prenom, '.') === FALSE && strpos($prenom, '-') === FALSE) { $p = strtoupper($prenom[0]).strtolower(substr($prenom, 1)); } else { $p = preg_replace('/(.)[^ .-]+[ .-](.).+/', '$1.$2.', $prenom); } if ($nom == "?" || empty($nom)) { $n = "??"; } else { $n = strtoupper($nom[0]).strtolower(substr($nom, 1)); } return (object) array('n' => $n, 'p' => $p); } function double_guillemet($txt) { return str_replace('"', '""', $txt); } function en_milliers($nb) { return number_format($nb, 0, ",", " "); } //-------------------------- GENERATION HTML -------------------------- // attention titre, desc, style ne doivent contenir ni apostrophe, ni quote function htm_head($titre, $desc, $style, $script, $redirect=null, $no_robot=true, $relative="../") { global $g_from_nmp; $copyr = "\n"; $h = ''; $h .= ''."\n"; $h .= ''."\n"; $h .= $copyr; $h .= ''; $h .= ''; $h .= ''; $h .= "$titre"; $h .= ''; // archivage par les robot: pas de mise en cache (en theorie...), pas de // descriptions provenant de l'exterieur du site // NOINDEX: pas d'indexation par les robots pour l'instant // NOFOLLOW: ne pas suivre les liens pour l'instant if ($no_robot) $h .= ''; // un robot ne doit pas afficher une pre-visualisation de la page (en // theorie aussi...) $h .= ''; if ($redirect) { $h .= ""; } $h .= "\n"; if ($style) $h .= $style."\n"; if ($script) $h .= $script."\n"; $h .= "\n"; return $h; } // NB : cette variable $new sera à virer quand il n'y aura plus qu'une version des pages publiques function htm_bandeau_haut($user_ident, $relative) { // global $g_user, $g_mode_beta, $g_c_idcontrib_cont, $g_c_datein_cont, $g_c_auteur_cont, $g_c_idobs_obs, $g_tables_bdd; global $g_user, $g_mode_beta; $htm = "
"; $chemin_dossier = $relative.'img/bandeau/'; $dossier = opendir($chemin_dossier); $nb_img = 0; while($fichier = readdir($dossier)) { if(strpos($fichier,"image") !== FALSE) { // echo ''.$file.''; $nb_img += 1; $nomimages[$nb_img] = $chemin_dossier.$fichier; } } closedir($dossier); srand((double)microtime()*1000000); $affimage=rand(1,$nb_img); $htm .= "
"; // fin de l'affiche du bandeau avec les photos $htm .= "
"; $htm .= "logo BazNat"; $htm .= "Base de données naturalistes partagée en Midi-Pyrénées"; $htm .= "
"; $htm .= "
"; $htm .= "
"; if ($user_ident) $htm .= htm_user_ident(); $htm .= "
"; return $htm; } function htm_user_ident() { global $g_user, $g_mode_local; switch ($g_user->permissions) { case "admin": $qui = ($g_mode_local ? "LOCAL " : "")."administrateur connecté : $g_user->login"; break; case "contrib": $qui = ($g_mode_local ? "LOCAL " : "")."utilisateur connecté : $g_user->login"; break; case "valid": $qui = ($g_mode_local ? "LOCAL " : "")."validateur connecté : $g_user->login"; break; default: $qui = ($g_mode_local ? "LOCAL " : "")."invité connecté : $g_user->login"; break; } $htm = "
$qui
"; return $htm; } function htm_bandeau_bas($relative="../", $contact=true, $accueil=false) { $htm = "
\n"; if (!$accueil) { $htm .= "

\n"; $htm .= " "; $htm .= ""; $htm .= ""; $htm .= ""; $htm .= ""; $htm .= ""; $htm .= "\n"; $htm .= "

\n"; } else { $htm .= "

\n"; $htm .= " "; $htm .= ""; $htm .= ""; $htm .= "\n"; $htm .= ""; $htm .= "

\n"; } if ($contact) { $htm .= "
Contacts : Administrateurs base de données / Réalisation site internet BazNat
"; } else { $htm .= "
"; } $htm .= "

\n"; return $htm; } function htm_coord_carte($indent = "") { $htm = $indent."\n"; $htm .= $indent." \n"; $htm .= $indent." \n"; $htm .= $indent." \n"; $htm .= $indent." \n"; $htm .= $indent." \n"; $htm .= $indent." \n"; $htm .= $indent." \n"; $htm .= $indent." \n"; $htm .= $indent." \n"; $htm .= $indent." \n"; $htm .= $indent." \n"; $htm .= $indent." \n"; $htm .= $indent." \n"; $htm .= $indent." \n"; $htm .= $indent." \n"; $htm .= $indent." \n"; $htm .= $indent." \n"; $htm .= $indent." \n"; $htm .= $indent." \n"; $htm .= $indent." \n"; $htm .= $indent." \n"; $htm .= $indent."
WGS84 degré décimallat.long.
WGS84 degrés minutes secondeslat.long.
Lambert93YX
ou tapez vos coordonnées et positionnez le marqueur avec le bouton de droite correspondant
\n"; return $htm; } ?>login = $row[$g_c_log_aut]; $this->id_auteur = $row[$g_c_idaut_aut]; $this->permissions = $row[$g_c_prm_aut]; $this->consultation = $row[$g_c_consult_aut]; $this->structure = $row[$g_c_idstr_aut]; $this->benevole = $row[$g_c_idben_aut]; return $row[$g_c_mdp_aut]; } } // ------------------------ CONVERSION LAMBERT,WGS etc -------------------------- class Lambert93 { var $x, $y; function Lambert93($x, $y) { $this->Set($x, $y); } function Set($x, $y) { $this->x = $x; $this->y = $y; } } class WGS { var $lat, $lng; function WGS($lat, $lng) { $this->Set($lat, $lng); } function Set($lat, $lng) { $this->lat = $lat; $this->lng = $lng; } } class GeoCoords { private $lamb, $wgs; function GeoCoords() { $this->lamb = $this->wgs = null; } function SetWGS($lat, $lng) { if (empty($this->wgs)) { $this->wgs = new WGS($lat, $lng); } else { $this->wgs->Set($lat, $lng); } if ($this->lamb) $this->lamb->Set(null, null); } function SetLambert($x, $y) { if (empty($this->lamb)) { $this->lamb = new Lambert93($x, $y); } else { $this->lamb->Set($x, $y); } if ($this->wgs) $this->wgs->Set(null, null); } function GetWGS() { if ($this->wgs && $this->wgs->lat && $this->wgs->lng) return $this->wgs; if (!GeoCoords::$s_init_done) GeoCoords::$s_init_done = GeoCoords::constantes_secante(); if ($this->lamb) { $this->wgs = GeoCoords::lamb93_vers_wgs84($this->lamb); return $this->wgs; } return null; } function GetLambert() { if ($this->lamb && $this->lamb->x && $this->lamb->y) return $this->lamb; if (!GeoCoords::$s_init_done) GeoCoords::$s_init_done = GeoCoords::constantes_secante(); if ($this->wgs) { $this->lamb = GeoCoords::wgs84_vers_lamb93($this->wgs); return $this->lamb; } return null; } // --------------------------------------------------------------------------- // variables globales pour les conversions Lambert -> WGS // IAG GRS 80 static $s_e = 0.08181919112;//premiere excentricite de l'ellipsoide static $s_a = 6378137; // demi_grand axe de l'ellipsoide static $s_X0 = 700000, $s_Y0 = 6600000; // coordonnees en projection du point origine static $s_lambda0 = null; // longitude origine en RADIAN par rapport au meridien origine static $s_phi0 = null; // latitude origine: 46°30' soit 46.5 en decimal static $s_phi1 = null; // latitude en radian du 1er parallele mecoique : 44° static $s_phi2 = null; // latitude en radian du 1er parallele mecoique : 49° static $s_phiC = null; static $s_lambdaC = null; // parametre de projection calcules dans projection_secante() static $s_n; static $s_C; static $s_Xs, $s_Ys; // constantes pour optimisation static $s_demie_e = null; // cf constantes_secante static $s_e_carre = null; // cf constantes_secante static $s_demi_pi = null; // cf constantes_secante static $s_quart_pi = null; // cf constantes_secante static $s_init_done = false; // indique si l'initialisation des constantes a eu lieu ou non // --------------------------------------------------------------------------- // Formules de conversion tirées d'un document de l'IGN : // "Projection cartographique conique conforme de Lambert" - Notes Techniques NT/G 71 - 1ere edition 1995 // --------------------------------------------------------------------------- // conversion latitude -> latitude isometrique (alg0001) static protected function Latitude_iso($phi) { // phi : latitude $e_sin_phi = GeoCoords::$s_e * sin($phi); return log(tan($phi/2 + GeoCoords::$s_quart_pi)*pow((1 - $e_sin_phi)/(1 + $e_sin_phi),GeoCoords::$s_demie_e)); } // conversion latitude isometrique -> latitude (alg0002) static protected function Latitude($L) { // L : latitude isometrique $exp_L = exp($L); $phi_prev = 2 * atan($exp_L) - GeoCoords::$s_demi_pi; do { $e_sin_prev = GeoCoords::$s_e * sin($phi_prev); $phi = 2 * atan(pow((1 + $e_sin_prev)/(1 - $e_sin_prev), GeoCoords::$s_demie_e) * $exp_L) - GeoCoords::$s_demi_pi; $diff = abs($phi - $phi_prev); $phi_prev = $phi; } while ($diff < 1E-11); return $phi; } // calcul de la grande normale de l'ellipsoide (alg0021) static protected function Grande_normale($phi) { // phi: latitude $sin_phi = sin($phi); return GeoCoords::$s_a / sqrt(1 - GeoCoords::$s_e_carre * $sin_phi * $sin_phi); } // conversion coordonnees geographiques en projection conique conforme Lambert (alg0003) static protected function projection_conique($lambda, $phi) { // lambda: longitude par rapport au meridien origine // phi: latitude $n_diff_lambda = GeoCoords::$s_n * ($lambda - GeoCoords::$s_lambdaC); $e_gn_l = exp(-GeoCoords::$s_n * GeoCoords::Latitude_iso($phi)); $x = GeoCoords::$s_Xs + GeoCoords::$s_C * $e_gn_l * sin($n_diff_lambda); $y = GeoCoords::$s_Ys - GeoCoords::$s_C * $e_gn_l * cos($n_diff_lambda); return new Lambert93($x,$y); } // conversion de coordonnees en projection conique conforme Lambert vers coordonnees geographiques (alg0004) static protected function conique_vers_geographique($x, $y) { // => [latitude, longitude] en degre decimal // x en metres // y en metres $diff_x = $x - GeoCoords::$s_Xs; $diff_y = $y - GeoCoords::$s_Ys; $R = sqrt($diff_x * $diff_x + $diff_y * $diff_y); $gamma = atan($diff_x / -$diff_y); $lambda = GeoCoords::$s_lambdaC + $gamma / GeoCoords::$s_n; $lat_deg = rad2deg(GeoCoords::Latitude(- log(abs($R / GeoCoords::$s_C)) / GeoCoords::$s_n)); $lng_deg = rad2deg($lambda); return new WGS($lat_deg, $lng_deg); } // projection Lambert secante (alg0054) static protected function constantes_secante() { GeoCoords::$s_lambda0 = deg2rad(3); // longitude origine en RADIAN par rapport au meridien origine soit Paris par rapport à greenwich (2°20'14.025") soit 3° pour RGF93 GeoCoords::$s_phi0 = deg2rad(46.5); // latitude origine: 46°30' soit 46.5 en decimal GeoCoords::$s_phi1 = deg2rad(44); // latitude en radian du 1er parallele mecoique : 44° GeoCoords::$s_phi2 = deg2rad(49); // latitude en radian du 1er parallele mecoique : 49° GeoCoords::$s_phiC = GeoCoords::$s_phi0; GeoCoords::$s_lambdaC = GeoCoords::$s_lambda0; GeoCoords::$s_demie_e = GeoCoords::$s_e / 2; GeoCoords::$s_e_carre = GeoCoords::$s_e * GeoCoords::$s_e; GeoCoords::$s_demi_pi = M_PI / 2; GeoCoords::$s_quart_pi = M_PI / 4; $cos_phi1 = cos(GeoCoords::$s_phi1); $N1 = GeoCoords::Grande_normale(GeoCoords::$s_phi1); $L1 = GeoCoords::Latitude_iso(GeoCoords::$s_phi1); GeoCoords::$s_n = log((GeoCoords::Grande_normale(GeoCoords::$s_phi2) * cos(GeoCoords::$s_phi2)) / ($N1 * $cos_phi1)) / ($L1 - GeoCoords::Latitude_iso(GeoCoords::$s_phi2)); GeoCoords::$s_C = $N1 * $cos_phi1 * exp(GeoCoords::$s_n * $L1) / GeoCoords::$s_n; GeoCoords::$s_Xs = GeoCoords::$s_X0; if (GeoCoords::$s_phi0 >= GeoCoords::$s_demi_pi - 1E-11 && GeoCoords::$s_phi0 <= GeoCoords::$s_demi_pi + 1E-11) { GeoCoords::$s_Ys = GeoCoords::$s_Y0; } else { GeoCoords::$s_Ys = GeoCoords::$s_Y0 + GeoCoords::$s_C * exp(-GeoCoords::$s_n * GeoCoords::Latitude_iso(GeoCoords::$s_phi0)); } return true; } // --------------------------------------------------------------------------- static protected function wgs84_vers_lamb93($wgs) { // => [x93, y93] en metres // latitude: latitude decimale // longitude: longitude decimale return GeoCoords::projection_conique(deg2rad($wgs->lng), deg2rad($wgs->lat)); } static protected function lamb93_vers_wgs84($lamb) { // => [latitude, longitude] en degrés décimaux // x en metres // y en metres $wgs = GeoCoords::conique_vers_geographique($lamb->x, $lamb->y); $wgs->lat += 0.00069; // pour une precision de l'ordre de ~7 metres sur midi-pyrenees return $wgs; } } ?>\n"; $htm .= "\n"; $htm .= "\n"; return $htm; } ?> "Mammifères", "h" => "Reptiles & Amphibiens", "o" => "Oiseaux", "a" => "Arthropodes & Mollusques", "f" => "Flore"); $sql_id_derniere_contrib = "SELECT $g_c_idcontrib_cont FROM ".T_CONTRIB." ORDER BY $g_c_idcontrib_cont DESC LIMIT 0,100"; // selection des 100 dernières contributions $id_derniere_contrib = $id_derniere_contrib_prec = ""; $nb_contrib = 0; $affiche_dernieres_contribs = ""; if ($qry_id_derniere_contrib = @mysql_query($sql_id_derniere_contrib, $g_cnx_bdd)) { // UNE BOUCLE PAR CONTRIBUTION, EN COMMANCANT PAR LA PLUS RECENTE--------------- while ($rec_id_derniere_contrib = @mysql_fetch_object($qry_id_derniere_contrib)) { // on fabrique d'abord la sélection SQL qui récupère toutes les observations (non douteuse, avec nom français et non sensible) de la contribution en cours $id_derniere_contrib = $rec_id_derniere_contrib->$g_c_idcontrib_cont; // on récupère l'ID_OBS $sql_contrib_observations = ""; $sql_suite = ""; foreach ($dom as $d => $domaine) { // on récupère, pour cette ID_OBS, toutes les observations correspondantes if ($nb_contrib == 25) { break; } $clause_speciale = ""; if ($d == "o") { // dans le cas des oiseaux, si espèce sensible, alors on prend que les obs non nicheur probable ou certain $clause_speciale = " AND ((e.$g_c_sens_esp + 0) = 0 OR o.INDICE_UTIL_MILIEU < 7)"; // NB : Dans le SQL commun à tous les domaine, on rajotue aussi que si sensibilité = 1, alors on prend pas du tout. } $sql_contrib_observations .= $sql_suite; $sql_contrib_observations .= "(SELECT c.$g_c_idcontrib_cont, c.$g_c_post_cont, c.$g_c_cdpt_cont, c.$g_c_dateo_cont, c.$g_c_precid_cont, c.$g_c_auteur_cont, \"".$domaine."\" AS DOMAINE_EN_COURS, e.$g_c_vernac_esp, e.$g_c_scient_esp FROM {$g_tables_bdd[$d]->t_esp} as e, {$g_tables_bdd[$d]->t_obs} as o, ".T_CONTRIB." as c WHERE e.$g_c_ref_esp=o.$g_c_ref_obs AND o.$g_c_idobs_obs=c.$g_c_idcontrib_cont AND c.$g_c_idcontrib_cont = $id_derniere_contrib AND o.$g_c_doute_obs = 0 AND e.$g_c_sens_esp != 1 $clause_speciale) "; $sql_suite = " UNION "; } $domaine_en_cours = $domaine_prec = ""; if ($qry_contrib_observations = @mysql_query($sql_contrib_observations, $g_cnx_bdd)) { // UNE BOUCLE POUR CHAQUE OBSERVATION DE LA MÊME CONTRIBUTION while ($rec_contrib_observations = @mysql_fetch_object($qry_contrib_observations)) { if ($rec_contrib_observations) { // s'il y a des espèces affichables pour la contribution en cours // 1- on fabrique ce qu'il faut afficher dans la page d'accueil (
  • ) //------------------------------------- // on commence par ce qui est répété qu'une fois par contrib (donc le début de
  • et la partie contribution en cours) if ($id_derniere_contrib != $id_derniere_contrib_prec) { // si le contributeur a une option de consultation RESTREINTE, on n'affiche pas la donnée $sql_contributeur = "SELECT aut.$g_c_consult_aut FROM ".T_AUTEUR." as aut WHERE aut.$g_c_idaut_aut = ".$rec_contrib_observations->$g_c_auteur_cont; if (($qry_contributeur = @mysql_query($sql_contributeur, $g_cnx_bdd)) && ($rec_contributeur = @mysql_fetch_object($qry_contributeur))) { if ($rec_contributeur->$g_c_consult_aut == "large") { // si on affiche cette contribution, on implémente le compteur $nb_contrib += 1; // on rajoute une contrib, donc on incrémente le nombre de contrib affichée } else { // sinon, on sort de cette contrib et on passe à la suivante continue; } } else { errlog(__FILE__, __LINE__, 'Erreur SQL ! '.$sql_contributeur." ".mysql_error(), false); erreur(403); } if ($affiche_dernieres_contribs != "") { // on ferme le
  • précédent (sauf si on en est au début !) $affiche_dernieres_contribs .= "
  • \n"; } $affiche_dernieres_contribs .= "
  • Observé "; // mise en forme de la date if ($rec_contrib_observations->$g_c_precid_cont == "jour et mois inconnus") { $affiche_dernieres_contribs .= "en ".substr($rec_contrib_observations->$g_c_dateo_cont,0,4); } else if ($rec_contrib_observations->$g_c_precid_cont == "jour inconnu") { $timestamp = mktime(0,0,0,substr($rec_contrib_observations->$g_c_dateo_cont,5,2),0,substr($rec_contrib_observations->$g_c_dateo_cont,0,4)); $affiche_dernieres_contribs .= "en ".date('m/Y',$timestamp); } else { // NB : mktime(heure, minute, seconde, mois, jour, année) $timestamp = mktime(0,0,0,substr($rec_contrib_observations->$g_c_dateo_cont,5,2),substr($rec_contrib_observations->$g_c_dateo_cont,8,2),substr($rec_contrib_observations->$g_c_dateo_cont,0,4)); $affiche_dernieres_contribs .= "le ".date('d/m/Y',$timestamp); } $affiche_dernieres_contribs .= " à "; // récuparation et affichage du nom de la commune $sql_commune = "SELECT $g_c_cmn_com FROM ".T_COMMUNE." WHERE $g_c_cpost_com = ".$rec_contrib_observations->$g_c_post_cont; if ($qry_commune = @mysql_query($sql_commune, $g_cnx_bdd)) { while ($rec_commune = @mysql_fetch_object($qry_commune)) { $affiche_dernieres_contribs .= $rec_commune->$g_c_cmn_com; } } else { // ERREUR SERVEUR OU SQL errlog(__FILE__, __LINE__, 'Erreur SQL ! '.$sql_commune." ".mysql_error(), false); erreur(403); } $affiche_dernieres_contribs .= " ("; $affiche_dernieres_contribs .= $rec_contrib_observations->$g_c_cdpt_cont; $affiche_dernieres_contribs .= ") par "; // récuparation et affichage des observateurs $sql_observateurs = "SELECT aut.$g_c_nom_aut, aut.$g_c_prenom_aut FROM ".T_AUTEUR." as aut, ".T_OBS_AUTEUR." as obs_aut WHERE obs_aut.$g_c_idobs_obsa = ".$id_derniere_contrib." AND obs_aut.$g_c_idaut_obsa=aut.$g_c_idaut_aut ORDER BY aut.$g_c_nom_aut, aut.$g_c_prenom_aut"; $liste_observateurs = $suite_obs = ""; if ($qry_observateurs = @mysql_query($sql_observateurs, $g_cnx_bdd)) { while ($rec_observateurs = @mysql_fetch_object($qry_observateurs)) { $initiale_prenom = strtoupper(substr($rec_observateurs->$g_c_prenom_aut,0,1)); $nom = strtoupper(substr($rec_observateurs->$g_c_nom_aut,0,1)).strtolower(substr($rec_observateurs->$g_c_nom_aut,1)); $liste_observateurs .= $suite_obs.$initiale_prenom.". ".$nom; $suite_obs = ", "; } $affiche_dernieres_contribs .= $liste_observateurs; } else { // ERREUR SERVEUR OU SQL errlog(__FILE__, __LINE__, 'Erreur SQL ! '.$sql_observateurs." ".mysql_error(), false); erreur(403); } $affiche_dernieres_contribs .= " :"; $id_derniere_contrib_prec = $rec_id_derniere_contrib->$g_c_idcontrib_cont; // on récupère l'ID_OBS } //------------------------------------- // on ajoute ensuite pour chaque domaine la liste des espèces de la contribution en cours $domaine_en_cours = $rec_contrib_observations->DOMAINE_EN_COURS; if ($domaine_en_cours != $domaine_prec) { // si première fois qu'on rencontre un domaine, on commence une nouvelle ligne $affiche_dernieres_contribs .= "
    - "; $affiche_dernieres_contribs .= $domaine_en_cours; $affiche_dernieres_contribs .= " : "; $suite = ""; // on met séparation entre espèces à "", car on commence une nouvelle ligne $domaine_prec = $domaine_en_cours; } if ($rec_contrib_observations->$g_c_vernac_esp) { $affiche_dernieres_contribs .= $suite.$rec_contrib_observations->$g_c_vernac_esp; } else { $affiche_dernieres_contribs .= $suite."".$rec_contrib_observations->$g_c_scient_esp.""; } $suite = ", "; } else { // pour cette ID_OBS, aucune observation ne correspond (que douteux, ou esp sensible...) continue; // on continue la boucle } } // FIN DE LA BOUCLE DE CHAQUE OBSERVATION } else { // ERREUR SERVEUR // errlog(__FILE__, __LINE__, 'Erreur SQL ! '.$sql_contrib_observations." ".mysql_error(), false); // erreur(403); // si je met cette erreur, ça plante toute la page d'accueil, impossible de savoir pourquoi (peut être que on arrive là dans le cas où on fait continue;?? } } // FIN DE LA BOUCLE D'UNE MÊME CONTRIBUTION--------------- } else { // ERREUR SERVEUR errlog(__FILE__, __LINE__, 'Erreur SQL ! '.$sql_id_derniere_contrib." ".mysql_error(), false); erreur(403); } // $affiche_dernieres_contribs = $sql_contrib_observations ; ?>