Non appare più bandierina della nazione

Ho messo php5 e ora quando l'utente mi scrive a video non appare più la bandierina associata all'IP ma solo la classica bandierina "?" cioè: sconosciuta, cioè pesca solo questa bandiera.

$ip=$_SERVER['REMOTE_ADDR'];  

include("ip_flags/ip_files/countries.php");

//Funzione per il nome Country e la bandierina
function iptocountry($ip) { 
$numbers = explode(".", $ip); 

include("ip_flags/ip_files/".$numbers[0].".php"); 
$code=($numbers[0] * 16777216) + ($numbers[1] * 65536) + ($numbers[2] * 256) + ($numbers[3]);

//Pesca il nome della Country da "ip_flags/ip_files/countries.php"
foreach($ranges as $key => $value){ 
if($key<=$code){ 
if($ranges[$key][0]>=$code){
$two_letter_country_code=$ranges[$key][1];break;
}
 } 
  } 
 if ($two_letter_country_code==""){
$two_letter_country_code="unkown";
} 
return $two_letter_country_code; 
} 

//Recupera l'ip del Visitor e lo confronta con quelli in "ip_flags/ip_files/countries.php" 
$ipVisitor=$_SERVER['REMOTE_ADDR']; 
$two_letter_country_code=iptocountry($ipVisitor);

//Pesca la bandierina della Country da "ip_flags/flags"
$file_to_check="ip_flags/flags/$two_letter_country_code.gif";
if (file_exists($file_to_check)){ 
$bandierina ="".$two_letter_country_code."/<img class=\"borderBandieraScrivimi\"src=\"http://photoman.altervista.org/$file_to_check\" width=\"16\" height=\"12\" alt=\"\" title=\"\" />";
}
else
{ 
$bandierina = "<img class=\"borderBandieraScrivimi1\"src=\"http://photoman.altervista.org/ip_flags/flags/noflag.gif\" width=\"16\" height=\"12\" alt=\"\" title=\"\" />";
}
inviato 8 anni fa
php
php
6
X 0 X

[...]

[$key][1];break;

}

[...]

Prova a levare il "break"...

---

exists($file_to_check)){

$bandierina ="".$two_l

Perchè metti "".$

Le due virgolette aperte e chiuse subito dopo non significano niente!

risposto 8 anni fa
Oliviero
X 0 X

[...]

[$key][1];break;

}

[...]

Prova a levare il "break"...

---

exists($file_to_check)){

$bandierina ="".$two_l

Perchè metti "".$

Le due virgolette aperte e chiuse subito dopo non significano niente!

Ho tolto break; ma è uguale, le 2 virgolette "".$two_letter_country_code."/... se le tolgo

da errore servono a isolare i codici.

Il codice trova solo questa bandierina (noflag.gif):

$bandierina = "<img class=\"borderBandieraScrivimi1\"src=\"http://photoman.altervista.org/ip_flags/flags/noflag.gif\" width=\"16\" height=\"12\" alt=\"\" title=\"\" />";

è questo codice che non trova:

$file_to_check="ip_flags/flags/$two_letter_country_code.gif";
risposto 8 anni fa
php
php
6
X 0 X

Ho risolto, come sempre è una sciocchezza: i nomi delle bandierine erano in minuscolo e il DB li aveva in maiuscolo :lamo:

risposto 8 anni fa
php
php
6
X 0 X

PHP permettimi di darti un consiglio: fai un salto su php.net e dai un'occhiata alla sintassi di base (Abbiamo anche un'ottima guida scritta da Gianni qui su phpnews.it).

Oliviero ti ha fatto notare una cosa importante: le virgolette prima e dopo della variabile sono inutile e non fanno altro che rallentare l'esecuzione dello script (oltre che rallantarti quando scrivi il codice)

$a = "questa è una stringa"; //questa è una stringa
$b = "" . $a . ""; //questa è una stringa
$c = $a; //questa è una stringa

Capisco che PHP sia un linguaggio molto permissivo, tuttavia bisogna capire che per programmar e bisogna innanzitutto imparare a seguire le regole imposte dal linguaggio. Questa è una di quelle regole dettate dal buon senso.

Da quando frequento questo forum molte delle discussioni (a partire dalle mie) sono dovute ad una inesistente aderenza alle regole sintattiche e semantiche imposte dal linguaggio e alla scarsissima attenzione del programmatore (o alla svogliatezza).

Ti consiglio quindi, di tornare a dare una lettura alla guida.

Nota: Questo non è un attacco personale, ma una specie di rimprovero per far capire che le regole ci sono per essere seguite :P

Ciao

:bye:

risposto 8 anni fa
Andrea Turso
Andrea Turso
96
modificato 8 anni fa
X 0 X

Ottimo trashofmasters concordo in pieno ;)

risposto 8 anni fa
Oliviero
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda