jotix Posted June 20, 2008 at 06:34 AM Report Share #192350 Posted June 20, 2008 at 06:34 AM Olá a todos! 😛 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: 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. Link to comment Share on other sites More sharing options...
zero-cool Posted June 20, 2008 at 10:26 AM Report Share #192367 Posted June 20, 2008 at 10:26 AM Viva, Tenta usar uma classe GeoIP. Há muitas disponíveis, tens que ver qual é aquela que melhor se adequa (há algumas que usam a base de dados GeoIP da MaxMind, outras que vão buscar através e stream, etc) http://www.phpclasses.org/browse/package/4516.html (url) http://www.phpclasses.org/browse/package/3582.html (ficheiro .cvs) Abraço, Link to comment Share on other sites More sharing options...
jotix Posted June 20, 2008 at 09:12 PM Author Report Share #192512 Posted June 20, 2008 at 09:12 PM 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? Link to comment Share on other sites More sharing options...
zero-cool Posted June 20, 2008 at 09:54 PM Report Share #192536 Posted June 20, 2008 at 09:54 PM 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, Link to comment Share on other sites More sharing options...
jotix Posted June 20, 2008 at 11:16 PM Author Report Share #192566 Posted June 20, 2008 at 11:16 PM Então e o script do GeoIP? Já tenho a pasta com as bandeiras. Desculpa, mas o que é API? Sou muito leigo nisto... :down: Link to comment Share on other sites More sharing options...
djthyrax Posted June 20, 2008 at 11:43 PM Report Share #192570 Posted June 20, 2008 at 11:43 PM 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. Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum! Link to comment Share on other sites More sharing options...
jotix Posted June 21, 2008 at 12:24 AM Author Report Share #192583 Posted June 21, 2008 at 12:24 AM Podes explicar isso como se eu fosse um miudo de 10 anos? Link to comment Share on other sites More sharing options...
djthyrax Posted June 21, 2008 at 12:30 AM Report Share #192587 Posted June 21, 2008 at 12:30 AM Qual parte? Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum! Link to comment Share on other sites More sharing options...
jotix Posted June 21, 2008 at 12:42 AM Author Report Share #192592 Posted June 21, 2008 at 12:42 AM 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: Link to comment Share on other sites More sharing options...
djthyrax Posted June 21, 2008 at 01:08 AM Report Share #192595 Posted June 21, 2008 at 01:08 AM No mysql, arranjas um campo para o país do IP. Para arranjares o país, lês a documentação do GeoIP. Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum! Link to comment Share on other sites More sharing options...
jotix Posted June 21, 2008 at 01:21 AM Author Report Share #192598 Posted June 21, 2008 at 01:21 AM Mas crio uma nova tabela, ou adiciono categorias à Tabela ip? Link to comment Share on other sites More sharing options...
djthyrax Posted June 21, 2008 at 01:21 AM Report Share #192599 Posted June 21, 2008 at 01:21 AM Na mesma tabela. Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum! Link to comment Share on other sites More sharing options...
zero-cool Posted June 21, 2008 at 10:04 AM Report Share #192612 Posted June 21, 2008 at 10:04 AM 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? Link to comment Share on other sites More sharing options...
zero-cool Posted June 21, 2008 at 10:07 AM Report Share #192613 Posted June 21, 2008 at 10:07 AM 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]' />"; Link to comment Share on other sites More sharing options...
jotix Posted June 21, 2008 at 04:08 PM Author Report Share #192655 Posted June 21, 2008 at 04:08 PM 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? Link to comment Share on other sites More sharing options...
zero-cool Posted June 21, 2008 at 04:57 PM Report Share #192661 Posted June 21, 2008 at 04:57 PM 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. Link to comment Share on other sites More sharing options...
jotix Posted June 30, 2008 at 07:15 PM Author Report Share #194642 Posted June 30, 2008 at 07:15 PM 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 Link to comment Share on other sites More sharing options...
zero-cool Posted June 30, 2008 at 09:46 PM Report Share #194676 Posted June 30, 2008 at 09:46 PM 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. Link to comment Share on other sites More sharing options...
jotix Posted June 30, 2008 at 10:24 PM Author Report Share #194682 Posted June 30, 2008 at 10:24 PM 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? Link to comment Share on other sites More sharing options...
zero-cool Posted July 1, 2008 at 08:57 PM Report Share #194907 Posted July 1, 2008 at 08:57 PM 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>"; Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now