• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

jotix

[Ajuda] Colocar bandeira ao lado do IP

41 mensagens neste tópico

Olá a todos! :P

Estou a fazer um site do género bux, e gostaria de acrescentar algumas funções automatizadas ao script php.

Uma delas é indicar, na área de admin, a origem do IP do utilizador, sem que seja necessário estar a copiar e colar o endereço de IP noutro site para ver a sua origem.

Aparece assim na área de admin:

Screende20-Jun0735.jpg

Pretendia colocar o nome do País ao lado do IP.

O código php actual é este:

<b>Edit Users</b>

<?


if (isset($_POST["id"]))
{

$id=$_POST["id"];
$username=$_POST["username"];
$password=$_POST["password"];
$referer=$_POST["referer"];
$email=$_POST["email"];
$pemail=$_POST["pemail"];
$country=$_POST["country"];
$vistis=$_POST["vistis"];
$referals=$_POST["referals"];
$referalvisits=$_POST["referalvisits"];
$money=$_POST["money"];
$user_status=$_POST["user_status"];


    //Todo parece correcto procedemos con la inserccion
    $query = "UPDATE tb_users SET username='$username', password='$password', referer='$referer', email='$email', pemail='$pemail', country='$country', visits='$vistis', referals='$referals', referalvisits='$referalvisits', money='$money', user_status='$user_status' where id='$id'";
    mysql_query($query) or die(mysql_error());

    echo "<font color=\"green\"><b>User edited.</b></font><br><br>";

}


if (isset($_GET["id"]))
{

$id=$_GET["id"];

if ($_GET["option"]=="edit")
{
?>

<?

$tablae = mysql_query("SELECT * FROM tb_users where id='$id'"); // selecciono todos los registros de la tabla usuarios, ordenado por nombre

while ($registroe = mysql_fetch_array($tablae)) { // comienza un bucle que leera todos los registros y ejecutara las ordenes que siguen


?>

<form method="post" action="index.php?op=7">

Id: <input type="hidden" name="id" value="<?= $registroe["id"] ?>"><?= $registroe["id"] ?><br>
Username: <input type="text" name="username" value="<?= $registroe["username"] ?>"><br>
Password: <input type="text" name="password" value="<?= $registroe["password"] ?>"><br>
Referer: <input type="text" name="referer" value="<?= $registroe["referer"] ?>"><br>
E-mail: <input type="text" name="email" value="<?= $registroe["email"] ?>"><br>
AlertPay e-mail: <input type="text" name="pemail" value="<?= $registroe["pemail"] ?>"><br>
Country: 
<input type="text" name="country" value="<?= $registroe["country"] ?>" />
<br>
Visits: <input type="text" name="vistis" value="<?= $registroe["visits"] ?>"><br>
Referals: <input type="text" name="referals" value="<?= $registroe["referals"] ?>"><br>
Referals visits: <input type="text" name="referalvisits" value="<?= $registroe["referalvisits"] ?>"><br>
Money: $<input type="text" name="money" value="<?= $registroe["money"] ?>"><br>
Group:  (<?= $registroe["user_status"] ?>)  

<select name="user_status">

				<option value="<?= $registroe["user_status"] ?>"></option>
				<option value="admin">Admin</option>
				<option value="user">User</option>
</select>
<br>


Ip: <?= $registroe["ip"] ?><br>
Join date: <?= $registroe["joindate"] ?><br>
Last log date: <?= $registroe["lastlogdate"] ?><br>
Last ip log: <?= $registroe["lastiplog"] ?><br>



<input type="submit" value="Save" class="button">

</form>

<?

}
?>


<?
}

if ($_GET["option"]=="delete")
{

    //Todo parece correcto procedemos con la inserccion
    $queryz = "DELETE FROM tb_users WHERE id='$id'";
    mysql_query($queryz) or die(mysql_error());

    echo "<font color=\"#cc0000\"><b>User deleted.</b></font><br><br>";
}

}

?>
<table>
<tr>
<th>Id</th>
<th>Username</th>
<th>Ip</th>
<th>E-mail</th>
<th>Referer</th>
<th>Visits</th>
<th>Money</th>
<th></th>
<th></th>
</tr>
<?

//Limito la busqueda
$TAMANO_PAGINA = 50;

//examino la página a mostrar y el inicio del registro a mostrar
$pagina = limpiar($_GET["pagina"]);
if (!$pagina) {
    $inicio = 0;
    $pagina=1;
}
else {
    $inicio = ($pagina - 1) * $TAMANO_PAGINA;
} 

$tabla = mysql_query("SELECT * FROM tb_users ORDER BY id ASC limit $inicio,$TAMANO_PAGINA"); // selecciono todos los registros de la tabla usuarios, ordenado por nombre

while ($registro = mysql_fetch_array($tabla)) { // comienza un bucle que leera todos los registros y ejecutara las ordenes que siguen


echo "
<tr>
<td>". $registro["id"] ."</td>
<td>". $registro["username"] ."</td>
<td>". $registro["ip"] ."</td>
<td>". $registro["email"] ."</td>
<td>". $registro["referer"] ."</td>
<td>". $registro["visits"] ."</td>
<td>". $registro["money"] ."</td>
<td>";
?>
<form method="post" action="index.php?op=7&id=<?= $registro["id"] ?>&option=edit">
<input type="submit" value="Edit" class="button">
</form>
</td>
<td>
<form method="post" action="index.php?op=7&id=<?= $registro["id"] ?>&option=delete">
<input type="submit" value="Delete" class="button">
</form>
</td>
</tr>

<?

} // fin del bucle de ordenes



?>
</table>

<?
$uno = limpiar($_GET["pagina"]);

if (empty($uno)){ 
$uno = 1;
$mos = $uno + 1;
echo "<a href='index.php?op=7&pagina=$mos'><font face=\"verdana\" style=\"font-size:11px;\" color=\"#000000\"><b>Next page</b></font></a> ";
} else {

$mos = $uno + 1;

for ($z=$mos;$z<=$mos;$z++){
echo "<a href='index.php?op=7&pagina=$z'><font face=\"verdana\" style=\"font-size:11px;\" color=\"#000000\"><b>Next page</b></font></a> ";

}



}
?>

Sem alguém souber como se faz, agradecia a explicação.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pronto,

Fui ao site http://www.maxmind.com/download/geoip/api/php/

Li o readme com a ajuda do djthyrax, depois fiz o download dos ficheiros geoip.inc e geoip.dat para a directoria onde o tenho o ficheiro Edit Users.

Como eu quero criar uma coluna ao lado do IP a dizer o país no ficheiro 'Edit Users', qual é o proximo passado? Alterar a tabela mysql?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Viva,

Talvez o melhor processo seja teres numa pasta as bandeiras de todos os países que pretendes, cada uma com o código do país (PT, ESP, FR, etc) e depois importares a imagem consoante o país do IP.

Dependendo da API que escolheste as funções mudam, mas será este o método:

$codigo_pais = Função_Obter_Codigo_País(IP)
echo "<img src='bandeiras/$codigo_pais.jpg' />";

Penso que esta é a maneira mais simples.

Abraço,

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Então e o script do GeoIP? Já tenho a pasta com as bandeiras.

Desculpa, mas o que é API?

Sou muito leigo nisto... :down:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tipo, usas as funções do GeoIP para arranjar o país e metes no campo na BD. Quando fores buscar o registo à BD, vê qual é o pais e mostras a bandeira como ele disse na 2a linha de code.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Usar as funções do GeoIP para arranjar o país e metes no campo na BD.

Em qual BD? Como tiro as funções?

Esta é a base de dados dos utilizadores:

Screende21-Jun0141.jpg

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

No mysql, arranjas um campo para o país do IP. Para arranjares o país, lês a documentação do GeoIP.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas crio uma nova tabela, ou adiciono categorias à Tabela ip?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não seria mais simples determinar na altura o país em vez de guardar esses dados na DB? Como é que está estruturada a tua pasta com as bandeiras, e o nome delas?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se usaste a documentação do GeoIP, será assim:

include("geoip.inc");

$gi = geoip_open("GeoIP.dat",GEOIP_STANDARD);

$country_code = geoip_country_code_by_addr($gi, "<IP>");

geoip_close($gi);

echo "<img src='bandeiras/$country_code.[jpg/png/etc]' />";

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

zero-cool, então segundo a tua versão, é só adicionar ao código do ficheiro editusers.php o código k apresentas e fazer o upload dos ficheiros geoip.dat

Mas será só isso? E em que parte do ficheiro editusers insiro o teu código?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites


include("geoip.inc");
$gi = geoip_open("GeoIP.dat",GEOIP_STANDARD);
$country_code = geoip_country_code_by_addr($gi, $registro["ip"]);
geoip_close($gi);

echo "
<tr>
<td>". $registro["id"] ."</td>
<td>". $registro["username"] ."</td>
<td>". $registro["ip"] ." <img src='bandeiras/".$country_code.".jpg' /></td>
<td>". $registro["email"] ."</td>
<td>". $registro["referer"] ."</td>
<td>". $registro["visits"] ."</td>
<td>". $registro["money"] ."</td>
<td>";

Experimenta assim.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

E que nome devo dar às bandeiras?

Eu acho que seria mesmo melhor colocar colocar o pais do IP por escrito em vez da bandeira.

Tive a ver o ficheiro do geoip.inc e tem lá umas variáveis deste género:

linha 153

    var $GEOIP_COUNTRY_NAMES = array(

"", "Asia/Pacific Region", "Europe", "Andorra", "United Arab Emirates",

E agora, qual código devo inserir no file editusers

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

geoip_country_code_by_addr devolve-te o código do país.

geoip_country_name_by_addr devolve-te o nome do país.

Segue o exemplo acima com as modificações necessárias.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Então, isto também vai ser alterado:

<td>". $registro["ip"] ." <img src='bandeiras/".$country_code.".jpg' /></td>

Já não há imagens, se eu quero ficar pelo nome.

Como altero?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
include("geoip.inc");
$gi = geoip_open("GeoIP.dat",GEOIP_STANDARD);
$country_name = geoip_country_name_by_addr($gi, $registro["ip"]);
geoip_close($gi);

echo "
<tr>
<td>". $registro["id"] ."</td>
<td>". $registro["username"] ."</td>
<td>". $registro["ip"] ." (".$country_name.")</td>
<td>". $registro["email"] ."</td>
<td>". $registro["referer"] ."</td>
<td>". $registro["visits"] ."</td>
<td>". $registro["money"] ."</td>
<td>";

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não funciona...!

Dá-me este erro:

Edit Users

Warning: fopen(GeoIP.dat) [function.fopen]: failed to open stream: No such file or directory in /home/zubux/public_html/admin/geoip.inc on line 314

Warning: ftell(): supplied argument is not a valid stream resource in /home/zubux/public_html/admin/geoip.inc on line 267

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ora então:

Alterei o código do ficheiro editusers.php numa parte para:

include("geoip.inc");

$gi = geoip_open("GeoIP.dat",GEOIP_STANDARD);

$country_name = geoip_country_name_by_addr($gi, $registro["ip"]);

geoip_close($gi);

while ($registro = mysql_fetch_array($tabla)) { // comienza un bucle que leera todos los registros y ejecutara las ordenes que siguen

echo "

<tr>

<td>". $registro["id"] ."</td>

<td>". $registro["username"] ."</td>

<td>". $registro["ip"] ." (".$country_name.")</td>

<td>". $registro["email"] ."</td>

<td>". $registro["referer"] ."</td>

<td>". $registro["visits"] ."</td>

<td>". $registro["money"] ."</td>

<td>";

?>

Na página de admin aparece assim:

ComicTuga02-Jul0044.jpg

Ou seja, dá a sensação que não insere o nome país.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
include("geoip.inc");
while ($registro = mysql_fetch_array($tabla)) { // comienza un bucle que leera todos los registros y ejecutara las ordenes que siguen
$gi = geoip_open("GeoIP.dat",GEOIP_STANDARD);
$country_name = geoip_country_name_by_addr($gi, $registro["ip"]);
geoip_close($gi);
echo "
<tr>
<td>". $registro["id"] ."</td>
<td>". $registro["username"] ."</td>
<td>". $registro["ip"] ." (".$country_name.")</td>
<td>". $registro["email"] ."</td>
<td>". $registro["referer"] ."</td>
<td>". $registro["visits"] ."</td>
<td>". $registro["money"] ."</td>
<td>";
?>

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora