fonction where

yoyoyo
Invité n'ayant pas de compte PHPfrance

21 oct. 2005, 18:07

bonjour

je suis tout nouveau ici et j'ai une question si vous pouviez m'aider SVP :

je veux savoir de quel pays viennent mes visiteurs sur mon site
alors je recup les adresses serveurs de chaque visiteur, mais la liste
commence a etre longue :s

alors ex : aqv199.neoplus.adsl.tpnet.pl ici c'est un polonais (PL)

donc exemple voici ma requete qui dans la liste de milliers de IP comme
celui d'en haut, je recherche les polonais donc les adresses PL :
$reponse = mysql_query("SELECT host FROM visiteurs WHERE host='pl'");
mais il ne trouve et ecrit rien !!!

je pense que il faudrait trouver le code style :
$reponse = mysql_query("SELECT host FROM visiteurs WHERE host="*.pl"");
car il recherche dans les adresses des net alors qu'il faudrait sonder les
adresses qui on des .pl

voila, jy arrive pas, pouvez vous m'aider SVP ?

ViPHP
fab
ViPHP | 2657 Messages

21 oct. 2005, 18:11

au lieu de where host="*.pl"
essaye host LIKE '%.pl'
Seul l'intelligent a le pouvoir de se trouver con
try { work(); } catch(FlemmeExeption $e) { sleep(84600); }

yoyoyo
Invité n'ayant pas de compte PHPfrance

21 oct. 2005, 18:20

merci pour ta reponse rapide :shock: :D

ca fonctionne en effet :d cooool

maintenant il me reste a lister tout les pays :s

comment pourrait je faire si dans une autre table je listerai tout les pays
existant ? (fr, br, pl, tr..) ?
$reponse = mysql_query("SELECT host FROM visiteurs WHERE FROM domaine host LIKE '%.pl'");
peut etre non ?

ViPHP
fab
ViPHP | 2657 Messages

21 oct. 2005, 18:34

hum si tu veux tout avoir, pour optimiser et pas faire une requete par pays, je te conseillerai de faire une requete qui les prends tous
Apres te faire un traitement sur chaque résultat pour avoir l'extension apres apres de stocker dans un tableau par extension :)
Seul l'intelligent a le pouvoir de se trouver con
try { work(); } catch(FlemmeExeption $e) { sleep(84600); }

yoyoyo
Invité n'ayant pas de compte PHPfrance

21 oct. 2005, 18:45

comment les séparer par extension ?

voila un niveau php que je ne saurai faire :?

car certaines adresses peut avoir un .fr mais certain .net (2 lettres ou 3 lettres)

il faudrait alors lister puis recuperer les extentions qui soit avant le point (en partant de la fin de l'adresse en plus ! :?

je sais pas mais je crois plus simple de faire une requete par extention
%.pl pour rechercher toutes les adresses polonaises puis les compter..etc..

mais vu la liste des pays visiteurs :? je sais pas comment faire

j'attaque donc une deuxieme table dans mysql qui liste tous les pays
et faire une requete sur la premiere qui enregistre les visiteurs

mais la, ca devient compliquer :cry:

ViPHP
fab
ViPHP | 2657 Messages

22 oct. 2005, 00:54

<?php
$host = "je.veux.boire.de.la.vodka.fr";
$host_array = explode('.',$host); // on sépare tous les "."
$host_count = count($host_array); // nombre d'éléments dans le tableau
$extension_array_number = $host_count - 1; // le tableau commençant à 0 l'extension est nombre d'élements moins 1
$extension = $host_array[$extension_array_number];
echo $extension;
?>
voila qui devrait fonctionner
Seul l'intelligent a le pouvoir de se trouver con
try { work(); } catch(FlemmeExeption $e) { sleep(84600); }

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

22 oct. 2005, 02:04

ou alors en 2 lignes:
$host = "je.veux.boire.de.la.vodka.fr";
$pos = strrpos($host, "."); // position de la derniere occurence d'un point
echo substr($host,$pos+1);  // reste de la chaine apres le dernier point
maintenant je sais pas si c'est plus ou moins rapide, juste pour info
:wink:

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

yoyoyo
Invité n'ayant pas de compte PHPfrance

22 oct. 2005, 10:42

merci pour votre aide, effectivement fab et truc ce sont les meme codes

en prenant celui de fab, je desire maintenant compter par exemple tout
les francais, soit les resultats FR :
$reponse = mysql_query("SELECT host FROM visiteurs");

while ($donnees = mysql_fetch_array($reponse) )
{

$host = $donnees['host'];
$host_array = explode('.',$host); 
$host_count = count($host_array); 
$extension_array_number = $host_count - 1; 
$extension = $host_array[$extension_array_number];

 if($extension =='fr')  
{
$retour = mysql_query("SELECT COUNT(*) AS extension");
$donnees = mysql_fetch_array($retour);
echo $donnees['extension'];
}
}
mysql_close();
?>
et ici, il m'affiche plus que les FR ok..
mais au lieu de les additionner et de me dire qu'il y en a 50
il me les affiche a la suite sans me faire le total...
j'ai eu beau regardé la doc php.net sur array, je ne vois pas l'erreur :cry:

ViPHP
pjl
ViPHP | 2119 Messages

22 oct. 2005, 10:45

je ne suis pas convaincu que tu utilises la bonne méthode.

C'est plus facile avec l'adresse ip.
On en a parlé à plusieurs reprises (cherche geolocalisation)

Mammouth du PHP | 19672 Messages

22 oct. 2005, 10:46

//...
$retour = mysql_query("SELECT COUNT(*) AS extension");
//...
Et si tu ajoutais, par exemple "FROM nom_de_la_table" :?:
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

yoyoyo
Invité n'ayant pas de compte PHPfrance

22 oct. 2005, 11:03

pjl, effectivement j'ai trouvé le sujet, mais le code marche pas
car il avait reussi a trouvé son erreur tout seul :s

le prob est que j'ai deja bcp de données a trier, je pense que ma methode
est plus efficace car je peux travaillé sur ma base de données deja existante

j'ai modifié le code :
<?
mysql_connect("serveur", "base", "pass"); // Connexion à MySQL
mysql_select_db("table"); // Sélection de la base coursphp

$reponse = mysql_query("SELECT host FROM visiteurs");

while ($donnees = mysql_fetch_array($reponse) )
{

$host = $donnees['host'];
$host_array = explode('.',$host); // on sépare tous les "."
$host_count = count($host_array); // nombre d'éléments dans le tableau
$extension_array_number = $host_count - 1; // le tableau commençant à 0 l'extension est nombre d'élements moins 1
$extension = $host_array[$extension_array_number];

 if($extension =='fr')    // Pas de ; a la fin
{
$retour = count ($extension, COUNT_RECURSIVE);  //sans COUNT_RECURSIVE cé pareil
echo $retour;
}

}
mysql_close();
?>
maintenant il me les compte lool mais par exemple si j'en ai 6
il m'affiche :
1
1
1
1
1
1

(il les additionne tjrs pas :s ) il faudrait faire un total mais ca exite pas total en php :cry:

ps: non cyrano; extension est le resultat de ma requete donc pas d'une table..mais ca peut etre une source d'erreur effectivement

ViPHP
pjl
ViPHP | 2119 Messages

22 oct. 2005, 11:08

pjl, effectivement j'ai trouvé le sujet, mais le code marche pas
je ne sais pas de quel code tu parles mais je peux garantir que la géolocalisation par IP marche très bien, à partir du moment ou l'on est conscient des limites du système.

yoyoyo
Invité n'ayant pas de compte PHPfrance

22 oct. 2005, 11:19

je viens d'essayer le code et de l'adapté a recup mes IP deja collectée dans
ma base...non ca ne me plait pas trop lool (sorry :D )

je pense etre pret du but, j'arrive desormais a extraire d'une adresse
son extension, a selectionner l'extention voulu (ex les FR..)
mais je n'arrive pas a les additionner

avez vous une idée SVP ?

ca viens surement d'ici :
 if($extension =='fr')    // Pas de ; a la fin
{
$retour = count ($extension, COUNT_RECURSIVE);
echo $retour;
}

ViPHP
fab
ViPHP | 2657 Messages

22 oct. 2005, 12:00

<?php
$reponse = mysql_query("SELECT host FROM visiteurs");
$array_host = array();
while ($donnees = mysql_fetch_array($reponse) )
	{
	$host = $donnees['host'];
	$host_array = explode('.',$host);
	$host_count = count($host_array);
	$extension_array_number = $host_count - 1;
	$extension = $host_array[$extension_array_number];
	if(!is_array($array_host[$extension]))  // le tableau existe ?
		{
		$array_host[$extension] = array(); // non alors faut le créér
		}
	array_push($array_host[$extension],$host); // allé hop dans le tableau !
	}
// c'est ici que tu peux compter une fois la lecture des hosts terminée
// petit exemple pour fr
$count_fr = in_array("fr",$array_host) ? count($array_host['fr']) : 0 ;
mysql_close(); 
?>
Seul l'intelligent a le pouvoir de se trouver con
try { work(); } catch(FlemmeExeption $e) { sleep(84600); }

yoyoyo
Invité n'ayant pas de compte PHPfrance

22 oct. 2005, 12:02

impossible de faire l'addition du resultat de la requete,
meme avec la fonction SUM :
 if($extension =='fr')    // Pas de ; a la fin
{
$retour = count ($extension, COUNT_RECURSIVE);
$resultat =sum($retour);
echo $resultat;
}
Fatal error: Call to undefined function: sum() in visiteur.php

c'est etrange ou c'est un bug :(