\nVoici l'erreur renvoyée par le serveur MySQL :\n
\n".mysql_error()); return $linkid; } function send_sql($sql,$message) //envoi la requete $sql a la base et affiche un message si il y a eu un probleme sinon on rend le resultat { if(!$res = @mysql_query($sql)) { $message_erreur = "\n"; $message_erreur .= "Impossible d'effectuer la requête pour $message\n"; $message_erreur .= "

\n"; // $message_erreur .= "Voici la requête : \n
\n"; // $message_erreur .= "$sql\n"; // $message_erreur .= "

\n"; $message_erreur .= "Voici le message d'erreur renvoyé par la base de données :\n
\n"; die ("$message_erreur".mysql_errno()." : ".mysql_error()."
\n"); } return $res; } /*************************************************************************************************/ /****************************** FONCTIONS POUR L'AFFICHAGE ***************************************/ function affiche_site($resultat,$type="index") //affiche les infos d'un site avec quelques fioritures en plus si c'est un partenaire //$resultat : enreg pris de la BD avec les infos du site //$type : type d'affichage different selon qu'on se trouve dans les categories, les tops, les nouveautes ou encore le moteur.... //$type pourra prendre les valeurs suivantes : index, topc, topv, news, search ! { global $nb_days2benew,$position; ?> ".$position.".\n"; } else { echo ""; } ?>   " target="_blank" class="titre_site_annu">    ) ( visite visites ) avec une moyenne de /10 sur 1) { ?> votes vote \n"; ?>

 
[ vote "; else { echo " votes "; } ?> - moyenne : /10 ]  -  ',180,320);" class="vote_site_annu">Voter pour ce site Commentaires () : ',350,350);" class="read_write_com_site_annu">Voir  |   #add',350,350);" class="read_write_com_site_annu">Rédiger moteur de recherche) { ?> Catégorie : " class="link_to_cat_annu"> moteur de recherche) { ?>
Catégorie : " class="link_to_cat_annu">  
"; } function show_arbo_en_ligne($id_cat,$page_name = "index.php",$sep = " ", $sessid = false) //affiche l'arborescence en ligne a partir d'une categorie //on part de la categorie dans laquelle on se trouve et on remonte vers les categories meres { global $T_categories; //nom de la table utilisee $accueil = "
Accueil". $sep ."\n"; $id_cat_mere = 1;//pour rentrer dedans while($id_cat_mere) { //on va chercher le nom et la categorie mere $sql = "SELECT id_cat_mere,cat_name FROM $T_categories WHERE id = '$id_cat' "; $res = send_sql($sql,"créer l'arbo en ligne"); $result = mysql_fetch_array($res,MYSQL_ASSOC); $id_cat_mere = $result["id_cat_mere"]; $nom = $result["cat_name"]; //lien vers la nouvelle categorie a ajouter dans la ligne if (!$sessid) $arbo = "".$nom."" . $sep . $arbo; else $arbo = "".$nom."" . $sep . $arbo; // on passe au suivant $id_cat = $id_cat_mere; } //il faut enlever le separateur qui est en trop la fin... $arbo = substr($arbo,0,strlen($arbo)-strlen($sep)); $arbo .= "
\n"; return $accueil.$arbo; } function path2cat($cat_id,$separateur = " > ") //retourne le chemin complet vers une categorie pour la liste complete des categories { global $T_categories; //nom de la table utilisee $id_cat_mere = 1; while($id_cat_mere) { //creation de la requete $sql = "select cat_name,id_cat_mere from $T_categories where id = '$cat_id'"; //envoie de la requete $res = send_sql($sql,"trouver le chemin vers un catégorie dans la création de la liste"); //traitement des resultats $resultat = mysql_fetch_array($res,MYSQL_ASSOC); $id_cat_mere = $resultat["id_cat_mere"]; $cat_name = $resultat["cat_name"]; //creation du chemin if(empty($path)) $path = $cat_name; else $path = $cat_name . $separateur . $path; //on passe au suivant $cat_id = $id_cat_mere; } return $path; } function show_list_cats($name_field = "id_cat", $idselected = "", $cache_cat = false) //affiche dans une liste deroukante la liste des categories { global $T_categories; //nom de la table utilisee $list = "\n"; return $list; } function keyword_in_bold($mots,$chaine) //met en gras les mots cles pour les resultats du moteur de recherche { return eregi_replace($mots,"\\0",$chaine); } /*************************************************************************************************/ /************************************* FONCTIONS DIVERSES ****************************************/ function is_scat_of($id_fille,$id_mere) //verifie si une sous-categorie est la fille(petite fille, arriere petite fille,...) d'une categorie donnee { global $T_categories; //nom de la table utilisee if ($id_fille == 0) return false; //creation de la requete $sql = "SELECT id_cat_mere FROM $T_categories WHERE id = $id_fille "; //envoi de la requete $res = send_sql($sql,"trouver la categorie mere"); //traitement du resultat $id_cat = mysql_result($res,0,"id_cat_mere"); if ($id_cat == $id_mere) return true; else return is_scat_of($id_cat,$id_mere); } function concat_arrays($tab_1,$tab_2) //similaire a la fonction array_merge mais fonctionne sous PHP //on va fusionner deux tableaux dans un troisieme { $ln_1 = sizeof($tab_1); //ln_1 contient le nombre d'elements dans tab1 et donc forcement dans tab_out aussi.... $tab_out = $tab_1; //on place tout les elements de tab_1 dans le tableau de sortie.... //maintenant on doit rajouter les elements de tab_2 $ln_2 = sizeof($tab_2); $j = $ln_1; // j sert a se balader dans les elements du tableau tab_out for ($i=0;$i<$ln_2;$i++,$j++) $tab_out[$j] = $tab_2[$i]; //on rend le nouveau tableau fusionne return $tab_out; } function is_in_array($valeur,$tab) //similaire a in_array mais fonctionne sous PHP //on rend 1 si la value rse trouve dans le tableau sinon on rend 0 { $ln = sizeof($tab); for ($i=0;$i<$ln;$i++) if ($tab[$i] == $valeur) return true; //la valeur se trouve dans le tableau //la valeur n'a pas ete trouvee return false; } function convert_date_us2fr($date_us) //convertit une date AAAA-MM-JJ en JJ-MM-AAAA { //separation des champs $date_in = explode("-",$date_us); $date_out = $date_in[2]; $date_out .= "-"; $date_out .= $date_in[1]; $date_out .= "-"; $date_out .= $date_in[0]; return $date_out; } function get_datefr_from_tamp($tampon) //rend la date au format jj-mm-aaaa a partir d'un tampon { return date("d-m-Y",$tampon); } function send_mail($emailto,$sujet,$corps,$emailfrom,$priority=3) //envoi un email a un visiteur { global $email_master,$nom_site; $corps = $corps; if ($emailto == $email_master) //envoi du mail au webmaster $to = "$nom_site<$email_master>"; else { $to = "$emailto"; $corps .= "\n\n\nInformatique Pratique - http://www.infoprat.net\nForums Informatique - http://forums.infoprat.net"; } if ($emailfrom == $email_master) $from = "From: $nom_site<$email_master>\nReply-To: $email_master\n"; else { $from = "From: $emailfrom\nReply-To: $emailfrom\n"; } $options = $from; $options .= "X-Priority: $priority\n"; //envoi du mail return @mail($to,$sujet,$corps,$options); //voici la ligne a utiliser pour les sites heberges chez Online.net pour l'envoi des mails //pour l'utiliser, il faut enlever les '//' devant les lignes ci-dessous et les mettre devant la ligne ci-dessus ! //return @email("webmaster",$to,$sujet,$corps); } function get_nbsites($cat) //retourne le nombre de sites presents dans une categorie ainsi que dans ses sous-categories { global $T_categories,$T_sites; //noms des tables utilisees //on place la categorie dans un tableau $list_all_cats[] = $cat; while (list($cle,$id_cat) = each ($list_all_cats)) //tant qu'on a encore des nouvelles categories { //on va chercher toutes les sous-categories de id_cat $sql_scats = "SELECT id FROM $T_categories WHERE id_cat_mere = '$id_cat' AND activation = 1 "; //on envoie la requete $res_scats = send_sql($sql_scats,"trouver le nombre de sous-catégories de $id_cat"); //ajout des categories dans le tableau while ($result = mysql_fetch_array($res_scats,MYSQL_ASSOC)) $list_all_cats[] = $result["id"]; } //preparation de la requete pour aller chercher le nombre de site $sql_nb_sites = "SELECT count(id) as count FROM $T_sites WHERE activation = 1 and ("; $nb_cats = sizeof($list_all_cats); for ($i=0;$i<$nb_cats-1;$i++) //on rajoute toutes les sous-categories $sql_nb_sites .= "id_cat = '$list_all_cats[$i]' or "; $sql_nb_sites .= "id_cat = '$list_all_cats[$i]') "; //envoi de la requete $res_nb_sites = send_sql($sql_nb_sites,"trouver le nombre de sites dans la catégorie $id_cat"); return mysql_result($res_nb_sites,0,"count"); } /*************************************************************************************************/ /*********************** FONCTIONS POUR LA VERIFICATION DES DONNEES ******************************/ function cherche_presence_url($url,$id_categorie,$max_presence) //recherche le nombre de presence d'une url dans les tables de l'annu //on retourne les ids des categories { global $T_sites,$T_sites_in_wait; //noms des table utilisees //calcul du nombre de presence de l'url $presence_in_site = url_exist($url,"$T_sites"); $presence_in_site_wait = url_exist($url,"$T_sites_in_wait"); //on fusionne ces deux tableaux contenant les id des categories ou le site est present $tab_presence = concat_arrays($presence_in_site,$presence_in_site_wait); $nb_presence = sizeof($tab_presence); if($nb_presence) //on a trouve l'url //si le site est deja present il faut verifier qu'on ne l'a pas deja soumis dans la meme categorie //et aussi si le nombre maximum de presence n'est pas depasse { if(is_in_array($id_categorie,$tab_presence)) { echo "
Ce site a déjà été ajouté/proposé pour dans cette catégorie !
\n"; return true; //url deja propose pour la meme categorie } if ($nb_presence >= $max_presence) //on verifie ensuite si l'url ne depasse pas le nombre de presence authorisee { echo "Un site ne peut être ajouté que dans $max_presence"; if ($max_presence > 1) echo " catégories !\n"; else //max = 0 ou max = 1 { echo " catégorie !\n"; } return true; //url est deja presente le maximum de fois authorisee } } return false; //l'url n'y est pas encore ou n'as pas depasse le nombre maximum de presence } function url_exist($url,$table) //retourne les id des categories dans lesquelles le site est deja present { //creation de la requete $sql = "SELECT id_cat FROM $table WHERE url = '$url' "; //envoi de la requete $res = send_sql($sql,"la recherche de site dans $table"); while($resultat = mysql_fetch_array($res,MYSQL_ASSOC)) //pour chaque resultat trouve $present_in_cat[] = $resultat["id_cat"]; return $present_in_cat; } function id_cat_exist($id_cat) //verifie si l'id de la categorie mere existe { global $T_categories; //nom de la table utilisee if ($id_cat == 0) //si c'est une categorie principale pas besoin de verifier return true; else { $sql = "SELECT id FROM $T_categories WHERE id = '$id_cat'"; $res = send_sql($sql,"vérifier si l'id de la catégorie existe"); if (mysql_num_rows($res)) return true; else //pas de categorie trouvee { return false; } } } function hexa_correct($code_hexa) //verifie si le code hexa est bon { //on remet tout en minuscule $code_hexa = strtolower($code_hexa); if (!(ereg("^#[0-9a-f]{6}$",$code_hexa)) ) { $message = "Votre code hexadécimal $code_hexa n'est pas correct !"; $message .= "

\n"; $message .= "Retour au formulaire\n"; die ($message); } return true; } function email_valide($email,$inc = false) //verifie la validite d'une adresse email : syntaxe + non vide { $message = "
"; if (empty($email)) { $message .= "Le champ adresse email ne peut être vide !\n

\n"; $email_ok = false; } else //l'email a ete entree, on la verifie { //verification de la syntaxe $email_ok = eregi("^[_\.0-9a-z-]+@([0-9a-z-]+\.)+[a-z]{2,4}$",$email); //verification du domaine if(TEST_MAIL) //on doit se connecter pour verifier l'existance du domaine { list($user, $domaine) = split("@", $email, 2); $domain_ok = @checkdnsrr($domaine, "MX"); } else //si on travaille en local, on ne se connecte pas pour verifier le domaine { $domain_ok = true; } } if (!$email_ok || !$domain_ok) { $message .= "L'adresse email \"$email\" n'est pas valide !\n

\n"; $message .= "

\n"; $message .= "Retour au formulaire\n"; echo $message; if ($inc) //si on peut faire die() (-> admin) include("after_annu.php"); exit; } return true; } function est_vide($champ,$message,$inc = false) //verifie si un champ est rempli sinon on affiche un message d'erreur { $message .= "

"; $message .= "Retour au formulaire"; $champ = trim($champ); if (empty($champ)) { echo $message; if ($inc) //si il faut inclure le fichier de fin (-> submit_sitew) include("after_annu.php"); exit; } else return false; //on rend faux pour dire que la variable n'est pas vide ! } function est_trop_long($champ,$ln_max,$message,$inc = false) //verifie si un champ n'est pas trop long { $ln_champ = strlen($champ); $message = "
$message fait $ln_champ caractères et le maximum autorisé est $ln_max caractères

\n"; $message .= "

\n"; $message .= "retour au formulaire\n"; if ($ln_champ > $ln_max ) { echo $message; if ($inc) include("after_annu.php"); exit; } else return false; //on rend faux si on a pas quitte car trop long } function est_trop_court($champ,$ln_min,$message,$inc = false) //verifie si un champ n'est pas trop court { $ln_champ = strlen($champ); $message = "$message fait $ln_champ caractères et le minimum autorisé est $ln_min caractères\n"; $message .= "

\n"; $message .= "Retour au formulaire\n"; if ($ln_champ < $ln_min ) { echo $message; if ($inc) include("after_annu.php"); exit; } else return false; //on rend faux si on a pas quitte car trop court } function est_entier($n) //verifie si un nombre est bien un entier : de 1 a 9 chiffres sans '.' { if (!(ereg("^[0-9]{1,9}$", $n))) { $message = "\"$n\" n'est pas un nombre entier!\n"; $message .= "

\n"; $message .= "Retour au formulaire\n"; die($message); } return true; } function est_reel($n) //verifie si un nombre est bien un reel : de 1 a 9 chiffres sans '.' { if (!(ereg("^[0-9]{1,9}"."[.]{0,1}"."[0-9]{0,9}$", $n))) { $message = "\"$n\" n'est pas un nombre reel!\n"; $message .= "

\n"; $message .= "Retour au formulaire\n"; die($message); } return true; } function place_dans_intervalle($n,$min,$max,$type = "") //place le nombre n dans [min,max] { if($type == "int") est_entier($n); if($type == "float") est_reel($n); //si le nombre est vide ou negatif on le met au minimum if (empty ($n) || $n < 0) $n = $min; //on place le nombre dans l'intervalle <-,max] if ($n > $max) $n = $max; //on le place dans [min,max] if ($n < $min) $n = $min; return $n; } /********************************* VERIFICATEUR DE LIENS *****************************************/ function url_valide ($url,$inc = false) //verifie la validite d'une url : commence par http:// + non vide { $message = ""; if (empty($url) || $url == "http://") $message .= "
Votre url ne peut être vide !
"; else //on doit verifier l'adresse { //on verifie si c'est bien le bon type de site $cmp_h = strcmp(substr($url,0,7),"http://"); $cmp_n = strcmp(substr($url,0,7),"news://"); $cmp_f = strcmp(substr($url,0,6),"ftp://"); $cmp_m = strcmp(substr($url,0,7),"mailto:"); if ($cmp_h != 0 && $cmp_n != 0 && $cmp_f != 0 && $cmp_m != 0) $message .= "
Url non valide ! Elle doit commencer par http:// (ou news:// ou encore ftp:// ou mailto:)
"; //on verifie si l'URL n'est pas KO if ($cmp_h == 0) //si c'est une URL http:// { $url_parsee = @parse_url($url); $host = trim($url_parsee["host"]); $path = trim($url_parsee["path"]); if (check_syntaxe_domaine($host)) { //si la syntaxe semble bonne on verifie la connexion $tab_return = check_connect($host,$path); if ($tab_return["statut"] == 0) $message .= "
Impossible de trouver le site $url !
\n"; } else { $message .= "
Erreur de syntaxe dans le domaine du site : $host !
"; } } } //si on a un message d'erreur il faut quitter if ($message) { $message .= "

\n"; $message .= "Retour au formulaire\n"; echo $message; if ($inc) include("after_annu.php"); exit; } else { return true; } //on rend vrai car si c'est pas bon on a quitte avant } function check_syntaxe_domaine($domaine) //verifie la syntaxe du domaine www.domaine.com d'une URL { //on verifie la syntaxe du domaine $domaine_ok = eregi("^(www\.)?[a-z0-9]{1,1}[_a-z0-9-]*[a-z0-9]{1,1}(\.[a-z0-9]{1,1}[a-z0-9-]*)?\.[a-z]{2,4}$",$domaine); //on verifie si ce n'est pas en local if (!$domaine_ok) $domaine_ok = ($domaine == "localhost") || ($domaine == "127.0.0.1"); //on verifie si ce n'est pas une IP if(!$domaine_ok) $domaine_ok = ereg("^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$",$domaine); return $domaine_ok; } function check_connect($host,$path) //verifie la validite de l'adresse, c'est a dire on regarde si le site existe bien... //on rend dans un tableau : // "statut" : 0 si KO, 1 si redirect ou bien pour faire passer en local, 2 si OK // "code" : code HTTP // "message" : message { if(!TEST_URL) //si on travaille en local, on ne se connecte pas { $tab_return["statut"] = 1; $tab_return["code"] = 0; $tab_return["message"] = "Pas de test de connexion\n"; return $tab_return; } $connect = 0; $no_code = 0; //connexion par socket if ($fp = @fsockopen($host,80)) { //traitement du path if(substr($path,strlen($path)-1) != '/') { if(!ereg("\.",$path)) $path .= "/"; } //envoi de la requete HTTP fputs($fp,"GET ".$path." HTTP/1.1\r\n"); fputs($fp,"Host: ".$host."\r\n"); fputs($fp,"Connection: close\r\n\r\n"); //on lit le fichier $line = fread($fp,255); $en_tete = $line; //on lit tant qu'on n'est pas la fin du fichier ou qu'on trouve le debut du code html... while (!feof($fp) && !ereg("<",$line) ) { $en_tete .= $line; $line = fread($fp,255); } fclose($fp); //on switch sur le code HTTP renvoye $no_code = substr($en_tete,9,3); switch ($no_code) { // 2** la page a été trouvée case 200 : $message = "OK"; $color = "#33cc00"; $connect = 2; break; case 204 : $message = "Cette page ne contient rien! (204)"; $color = "#ff9966"; break; case 206 : $message = "Contenu partiel de la page! (206)"; $color = "#ff9966"; break; // 3** il y a une redirection case 301 : $message = "La page a été déplacéé définitivement! (301)"; $message .= seek_redirect_location($en_tete); $color = "#ff9966"; $connect = 1; break; case 302 : $message = "La page a été déplacéé momentanément! (302)"; $message .= seek_redirect_location($en_tete); $color = "#ff9966"; $connect = 1; break; // 4** erreur du coté du client case 400 : $message = "Erreur dans la requête HTTP! (400)"; $color = "#ff0000"; break; case 401 : $message = "Authentification requise! (401)"; $color = "#ff0000"; break; case 402 : $message = "L'accès à la page est payant! (402)"; $color = "#ff0000"; break; case 403 : $message = "Accès à la page refusé! (403)"; $color = "#ff0000"; break; case 404 : $message = "Page inexistante! (404)"; $color = "#ff0000"; break; // 5** erreur du coté du serveur case 500 : $message = "Erreur interne au serveur! (500)"; $color = "#ff0000"; $connect = 1; break; case 502 : $message = "Erreur à cause de la passerelle du serveur! (502)"; $color = "#ff0000"; break; // cas restant default : $message = "Erreur non traitée dont le numéro est : $no_code!"; $color = "#000000"; break; } } else { $message = "Impossible de se connecter par socket"; $color = "#ff0000"; } //creation du tableau avec les valeurs a rendre $data_return["statut"] = $connect; //la page est OK ou KO (200 => OK sinon KO) $data_return["code"] = $no_code; //code HTTP renvoye $data_return["message"] = "".$message."\n"; //message a afficher return $data_return; } function seek_redirect_location($header) //recherche la location de la redirection si l'erreur HTTP renvoyee commence par 3 { $location = ""; $tab_header = explode("\n",$header); for ($i=0;$tab_header[$i];$i++) { $line = split(":",$tab_header[$i],2); if(eregi("location",$line[0])) { $location = trim($line[1]); break; } } if ($location) return "
Redirection vers :
".$location."\n"; else return "
Aucune adresse de redirection n'a été trouvée...\n"; } /*************************************************************************************************/ /******************************* FONCTIONS POUR LES SESSIONS *************************************/ function create_session($admin_id,$delai = 1800) //cree une nouvelle session pour l'administrateur admin_id et rend son id //delai = 1800 => la session durera 1800 secondes cad 30 minutes { if(empty($admin_id)) exit; global $T_sessions; //nom de la table utilisee //creation de l'id de la session $session_id = uniqid((double)microtime()*1000000, true); //creation des requetes $sql_del = "DELETE FROM $T_sessions WHERE timestamp < UNIX_TIMESTAMP() "; $sql_sel = "SELECT count(admin_id) AS count FROM $T_sessions WHERE admin_id = '$admin_id' "; $sql_ins = "INSERT INTO $T_sessions (session_id,timestamp,admin_id) VALUES ('$session_id',UNIX_TIMESTAMP()+$delai,'$admin_id') "; //envoi des requete //on supprime les vieilles sessions $del = send_sql($sql_del,"supprimer les sessions périmées"); //on verifie si l'admin n'est pas deja logge $sel = send_sql($sql_sel,"trouver si l'admin est deja logge"); if(mysql_result($sel,0,"count") != 0) { ?> Vous vous êtes déjà connecté dans votre partie admin.
Malheureusement, vous n'avez pas quitter la partie admin "correctement" !
Pour éviter ce message, quitter la partie admin en utilisant le lien déconnexion !!!
Pour pouvoir vous relogger, il faudra attendre un peu moins de 30 minutes...

Retour à l'annuaire Annuaire Informatique - Informatique Pratique \n"; $i++; //on affiche la categorie mere ?>
Cet annuaire contient sites répartis dans catégories


" class="link_cat_index_annu"> () \n"; //on affiche les sous-categories while ($une_souscat = mysql_fetch_array($res_scat,MYSQL_ASSOC)) { ?> " class="link_scat_index_annu">, "; } ?>
".show_arbo_en_ligne($_GET['cat_id'])."\n\n"; echo "\n"; //on affiches les sous-categories if (mysql_num_rows($res_scat)) //si il y a des sous-categories { echo "
"; $i=0; while ($resultat = mysql_fetch_array($res_scat,MYSQL_ASSOC)) { if ($i%2 == 0) //colonne de gauche echo "\n"; echo "\n"; echo "
\n"; ?> " class="link_scat_other_annu"> ()  
\n"; //fin du tableau puis separateur } //fin de la connexion mysql_close($lk); //on affiche la description de la catégorie $res_texte = mysql_fetch_array($res_descr,MYSQL_ASSOC); if ($res_texte["texte"]) //si on a une description a affiche { ?>


$nb_sites_on_page) //si il y a trop de sites a afficher sur la page { ?>
$i"; else echo "$i"; echo " - "; } //on affiche le dernier numero de page (sans tiret apres) if ($i == $page) echo $i; else echo "$i"; ?>


"; echo "\n"; echo "
"; echo "
\n"; echo "
Pas encore de sites dans cette catégorie !\n

\n"; echo "Profitez en pour y ajouter votre site si il correspond à cette catégorie.

\n"; echo "
"; echo "
\n"; } echo "
\n"; } ?>