Server fa sballare la stampata con l'IP originale

Mi spiego: ho questo codice che funziona "perfettamente" e cioè: mette a video l'ip, la nazione e la bandierina corretti. E fin qui ci siamo MA, quando uso Tor per navigare anonimo ed entro nel mio guestbook vedo con sorpresa che tutti i messaggi che mi hanno inviato gli utenti, si cambiano con l'ip, la nazione e la bandierina del relay che sto usando in quel momento sparso in tutto il mondo.

Mi chiedo come mai nel guestbook non rimane la stampata originale

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="unknown";
} 
return $two_letter_country_code; 
} 
 
//Recupera l'ip del Visitor e lo confronta con quello in "../ip_flags/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)){ 
$bandieraGuest = "&nbsp;&nbsp;&nbsp;<img class=\"borderBandiera\" src=\"http://miosito.it/$file_to_check\" width=\"16\" height=\"12\" alt=\"\" title=\"\" />";
}
else
{ 
$bandieraGuest = "&nbsp;&nbsp;&nbsp;&nbsp;<img class=\"borderBandiera\" src=\"http://miosito.it/ip_flags/flags/NOFLAG.gif\" width=\"16\" height=\"12\" alt=\"noflag\" title=\"noflag\" />";
}
inviato 6 anni fa
php
php
6
X 0 X

Mi spiego: ho questo codice che funziona "perfettamente" e cioè: mette a video l'ip, la nazione e la bandierina corretti. E fin qui ci siamo MA, quando uso Tor per navigare anonimo ed entro nel mio guestbook vedo con sorpresa che tutti i messaggi che mi hanno inviato gli utenti, si cambiano con l'ip, la nazione e la bandierina del relay che sto usando in quel momento sparso in tutto il mondo.

Mi chiedo come mai nel guestbook non rimane la stampata originale

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="unknown";
} 
return $two_letter_country_code; 
} 
 
//Recupera l'ip del Visitor e lo confronta con quello in "../ip_flags/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)){ 
$bandieraGuest = "&nbsp;&nbsp;&nbsp;<img class=\"borderBandiera\" src=\"http://miosito.it/$file_to_check\" width=\"16\" height=\"12\" alt=\"\" title=\"\" />";
}
else
{ 
$bandieraGuest = "&nbsp;&nbsp;&nbsp;&nbsp;<img class=\"borderBandiera\" src=\"http://miosito.it/ip_flags/flags/NOFLAG.gif\" width=\"16\" height=\"12\" alt=\"noflag\" title=\"noflag\" />";
}

Correggo: l'unica cosa che rimane sempre stampata giusta è  l'IP.

risposto 6 anni fa
php
php
6
X 0 X

1) Come e dove  salvi le informazioni sulla bandiera dei messaggi già lasciati nel guestbook?

2) Come recuperi le informazioni sulla bandiera per i messaggi già lasciati?

risposto 6 anni fa
Mario Santagiuliana
X 0 X

1) Come e dove  salvi le informazioni sulla bandiera dei messaggi già lasciati nel guestbook?

2) Come recuperi le informazioni sulla bandiera per i messaggi già lasciati?

Ti spiego, ho 3 file in tutto:

1. form.php

2. ins.php questo prende i dati dal form e li elabora e li invia a view.php che li mette a video

3. view.php che prende i dati da ins.php e li stampa

Quel codice che ho postato si trova nel file che stampa (view.php), se lo metto in ins.php non si stampa niente.

Ultima cosa: sia in ins.php e view.php ho questo, se ne metto solo uno non stampa niente:

// Nome del file dove verranno salvati i dati sul server (Questo va messo qui in ins.php)
$file = "message.html";


// Nome del file che c'è sul server, view.php prende i dati da là (Questo va messo qui in view.php)
$file = "message.html";
risposto 6 anni fa
php
php
6
X 0 X

A noi interessa solo view.php dato che è questo che riporta in modo scorretto le bandiere dei messaggi già lasciati sul guestbook giusto?

Non puoi dunque fornirci tutto il file per visionarlo?

risposto 6 anni fa
Mario Santagiuliana
X 0 X

A noi interessa solo view.php dato che è questo che riporta in modo scorretto le bandiere dei messaggi già lasciati sul guestbook giusto?

Non puoi dunque fornirci tutto il file per visionarlo?

Ti posto tutto il view...però è strano che stampa in modo permanente solo l'IP

<?php

// Nome del file che c'è sul server, view.php prende i dati da là (Questo va messo qui in view.php)
$file = "message.html"; 

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="unknown";
} 
return $two_letter_country_code; 
} 
//Recupera l'ip del Visitor e lo confronta con quello in "../ip_flags/flags/ip_files/countries.php" 
$ip=$_SERVER['REMOTE_ADDR'];
$two_letter_country_code=iptocountry($ip);

//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)){ 
$bandieraGuest = "&nbsp;&nbsp;&nbsp;<img class=\"borderBandiera\" src=\"http://photoman.altervista.org/$file_to_check\" width=\"16\" height=\"12\" alt=\"\" title=\"\" />";
}
else
{ 
$bandieraGuest = "&nbsp;&nbsp;&nbsp;&nbsp;<img class=\"borderBandiera\" src=\"http://photoman.altervista.org/ip_flags/flags/NOFLAG.gif\" width=\"16\" height=\"12\" alt=\"noflag\" title=\"noflag\" />";
}             
                           
//Stampa a video
$rows_file=file($file);
$count=count($rows_file);
$numero_messaggi=$count;

if (isset($pagina) AND $pagina > 0){
if ($pagina > $pagine_totali){
$pagina = $pagine_totali; 
} 
else{
 }
}
else{
$pagina = 1;
$inizio = 0; 
}
$mess_pag=array_slice   ($rows_file,$inizio); 
$mess_pag=array_reverse($mess_pag);
$cont1=count($mess_pag);
$cont2=0;
$tabella = "<div id=\"numero-Messaggi\"><span class=\"totMessaggi\">IN TOTALE CI SONO</span><span class=\"redMess\">$numero_messaggi</span><span class=\"totMessaggi\">MESSAGGI</span></div>";
echo $tabella; 

while ($cont2<$cont1) {
$mess=$mess_pag[$cont2];
$info=explode("|",$mess);
$nome=$info[0];
$citta=$info[1];
$email=$info[2];
$url=$info[3];
$ip=$info[4];
$messaggio=$info[5];
$data_localeG=$info[6];
 
//Se il campo Email è vuoto mette a video la barretta (1/4)
if ($email == '') {
$email ="&nbsp;<font style=\"color:#a8a8a8\">-</font>";
}
else{
$email;
}

//Permette di aprire l'url inserito dal visitatore nel campo "Tuo Sito" (cioè, non mette davanti al suo url l'url del mio sito)
if (trim($url)!=''){ 
if (strpos($url, 'http') === false) $url = "http://$url"; 
} 
else { 
echo "";
}

//Dopo un tot di caratteri mette i 3 puntini (3/4)
$url1 = $url;
if (strlen($url1) >= 14){ //Se la stringa è 14 caratteri o più (senza puntini), viene accorciata a 13...
$url=substr($url,0,13)."...";
}

//Questo accorcia la Country, dopo un tot di caratteri mette i 3 puntini (4/4)
if (strlen($countries[$two_letter_country_code][1]) >= 15){ 
$countries[$two_letter_country_code][1]=substr($countries[$two_letter_country_code][1],0,10)."...";
}

//formattazione testo va qui in ins.php
$messaggio = str_replace("[B]","<b>",$messaggio);
$messaggio = str_replace("[/B]","</b>",$messaggio);
$messaggio = str_replace("[I]","<i>",$messaggio);
$messaggio = str_replace("[/I]","</i>",$messaggio);
$messaggio = str_replace("[U]","<u>",$messaggio);
$messaggio = str_replace("[/U]","</u>",$messaggio);

//Colora il testo selezionato va qui in view.php
$messaggio = str_replace("[COLOR=blue]","<font style=\"color:#0000ff\">",$messaggio);
$messaggio = str_replace("[COLOR=red]","<font style=\"color:red\">",$messaggio);
$messaggio = str_replace("[COLOR=green]","<font style=\"color:green\">",$messaggio);
$messaggio = str_replace("[COLOR=gray]","<font style=\"color:gray\">",$messaggio);
$messaggio = str_replace("[COLOR=black]","<font style=\"color:black\">",$messaggio);
$messaggio = str_replace("[/COLOR]","</font>",$messaggio);

//Le faccine vanno messe qui in view.php
$messaggio = str_replace("CONFUSO","<img src=\"http://photoman.altervista.org/faccine/cxonfuso.gif\" alt=\"Confuso\" title=\"Confuso\" />",$messaggio);
$messaggio = str_replace("IMPOSSIBILE","<img src=\"http://photoman.altervista.org/faccine/ixmpossibile.gif\" alt=\"Impossibile\" title=\"Impossibile\" />",$messaggio);
$messaggio = str_replace("TESTARDO","<img src=\"http://photoman.altervista.org/faccine/txestardo.gif\" alt=\"Testardo\" title=\"Testardo\" />",$messaggio);
$messaggio = str_replace("PIANGE","<img src=\"http://photoman.altervista.org/faccine/pxiange.gif\" alt=\"Piange\" title=\"Piange\" />",$messaggio);
$messaggio = str_replace("BACIO","<img src=\"http://photoman.altervista.org/faccine/bxacio.gif\" alt=\"Bacio\" title=\"Bacio\" />",$messaggio);
$messaggio = str_replace("FELICE","<img src=\"http://photoman.altervista.org/faccine/fxelice.gif\" alt=\"Felice\" title=\"Felice\" />",$messaggio);
$messaggio = str_replace("RIDE","<img src=\"http://photoman.altervista.org/faccine/rxide.gif\" alt=\"Ride\" title=\"Ride\" />",$messaggio);
$messaggio = str_replace("OCCHIOLINO","<img src=\"http://photoman.altervista.org/faccine/oxcchiolino.gif\" alt=\"Occhiolino\" title=\"Occhiolino\" />",$messaggio);
$messaggio = str_replace("CIAO","<img src=\"http://photoman.altervista.org/faccine/cxiao.gif\" alt=\"Ciao\" title=\"Ciao\" />",$messaggio);
$messaggio = str_replace("PAURA","<img src=\"http://photoman.altervista.org/faccine/pxaura.gif\" alt=\"Paura\" title=\"Paura\" />",$messaggio);

//Creazione della tabella contenente tutti i dati del messaggio 
$tabella =  "<div class=\"w\">"; 
$tabella .= "<div class=\"tabella-small\">";  
$tabella .= "<div class=\"carattere-1\">".$nome."</div>"; 
$tabella .= "<br /><br /><span class=\"carattere-mail\">".$email."</span>";
$tabella .= "<br /><div class=\"voci1\">Città:</div><div class=\"carattere-2\">".$citta."</div>";
$tabella .= "<br /><div class=\"voci3\">Sito:</div><a class=\"carattere-33\" href=\"$url1\" target=\"_blank\">$url</a>";
//Questo mette a video la Country di provenienza 
$tabella .= "<br /><div class=\"voci4\">Country:</div><div class=\"carattere-44\">".$countries[$two_letter_country_code][1]."</div>";
// Questo mette a video l'ip originale di provenienza...da ins.php + la bandierina
$tabella .= "<br /><div class=\"voci5\">Ip:&nbsp;".$ip."".$bandieraGuest."</div>";
$tabella .= "</div>";  /*tabella-small*/
$tabella .= "<div class=\"tabella-longTime\">".$data_localeG."</div>"; 
$tabella .= "<div class=\"tabella-long\">";
$tabella .= "<span class=\"carattere-3\">&nbsp;&nbsp;&nbsp;&nbsp;".$messaggio."</span>"; 
$tabella .= "</div>";  /* tabella-long */
$tabella .= "</div>";  /* w */
echo $tabella;
$cont2++;
}
?>
risposto 6 anni fa
php
php
6
X 0 X

Ti chiedo di riscrivere il codice con una indentazione comprensibile. Faccio fatica a leggere il codice.

risposto 6 anni fa
Mario Santagiuliana
X 0 X
Ti chiedo di riscrivere il codice con una indentazione comprensibile. Faccio fatica a leggere il codice.

Cosa non ti è chiaro, quale parte?

risposto 6 anni fa
php
php
6
X 0 X

Il problema sta solo nell'indentazione del codice.

Se fosse indentato meglio (non mi metto a riscriverlo io, non ho tempo) si capirebbe meglio dove inizia e dove finisce una funzione o un blocco di esecuzione. Ciò facilita la lettura mia, ed immagino di altri, l'uomo non è un calcolatore e ha bisogno degli abbellimenti grafici.

Tutto qui.

risposto 6 anni fa
Mario Santagiuliana
X 0 X

Il problema sta solo nell'indentazione del codice.

Se fosse indentato meglio (non mi metto a riscriverlo io, non ho tempo) si capirebbe meglio dove inizia e dove finisce una funzione o un blocco di esecuzione. Ciò facilita la lettura mia, ed immagino di altri, l'uomo non è un calcolatore e ha bisogno degli abbellimenti grafici.

Tutto qui.

Era così; http://www.phptutorial.info/iptocountry/the_script.html

risposto 6 anni fa
php
php
6
X 0 X

Tu salvi in messaggio.html i messaggi precedentemente lasciati, giusto?

Poi lo apri e ricrei l'output html. Il problema è che non rifai per ogni messaggio iptocountry per ritrovare dagli ip salvati precedentemente la bandiera corrispondente.

O almeno non ho capito dove fai questo passaggio.

Non capisco dove tu vai a ritrovare il codice delle bandiere.

risposto 6 anni fa
Mario Santagiuliana
X 0 X

Tu salvi in messaggio.html i messaggi precedentemente lasciati, giusto?

Poi lo apri e ricrei l'output html. Il problema è che non rifai per ogni messaggio iptocountry per ritrovare dagli ip salvati precedentemente la bandiera corrispondente.

O almeno non ho capito dove fai questo passaggio.

Non capisco dove tu vai a ritrovare il codice delle bandiere.

Il codice delle bandiere, delle Country e degli ip sono nella cartella 

/ Nome del file che c'è sul server, view.php prende i dati da là (Questo va messo qui in view.php)

$file = "message.html";

//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 ="<img style=\"border-right:1px solid #9c9e95;border-bottom:1px solid #9c9e95;margin-bottom:-2px;\" src=\"http://photoman.altervista.org/$file_to_check\" width=\"16\" height=\"12\" alt=\"\" title=\"\" />";

}

else

{

$bandierina = "<img style=\"border-right:1px solid #9c9e95;border-bottom:1px solid #9c9e95;margin-bottom:-2px;\" src=\"http://photoman.altervista.org/ip_flags/flags/NOFLAG.gif\" width=\"16\" height=\"12\" alt=\"noflag\" title=\"noflag\" />";

}

PS: il textarea di questo form per le risposte, non va bene, continua a saltare se scrivi molto

risposto 6 anni fa
php
php
6
modificato 6 anni fa
X 0 X

Forse la parte che ti manca è questa in ins.php

// Nome del file dove verranno salvati i dati sul server (Questo va messo qui in ins.php)
$file = "message.html";

// Mette data-ora nel file message.html che è nel server
$data_localeG = ($_POST['data_localeG']);

// ...e scrittura dei dati in message.html
$commento=$nome."|".$citta."|".$email."|".$url."|".$ip."|".$messaggio." |".$data_localeG."\n";
if (!(file_exists($file)))
{fopen($file,"w");}
$new_mess=fopen($file,"a+");
fwrite($new_mess,$commento);
fclose($new_mess);
risposto 6 anni fa
php
php
6
X 0 X

Sbagli a fare il salvataggio.

Da quello che ho capito (il codice non è indentato e facci fatica ad interpretarlo) tu ricavi gli ip e le bandiere in base all'ip del tuo visitatore. Non è così che devi procedere.

Quando un visitatore salva un messaggio tu devi salvare anche il suo ip (eventualmente anche già il codice della bandiera). Poi per visualizzare il tutto devi recuperare il codice della bandiera rieseguendo la funzione che riporta il tuo ip in codice del paese.

Come puoi partire a ricreare le bandiere dei messaggi precedenti dall'ip del tuo ultimo visitatore? Non capisco il senso di questo...

risposto 6 anni fa
Mario Santagiuliana
X 0 X

Sbagli a fare il salvataggio.

Da quello che ho capito (il codice non è indentato e facci fatica ad interpretarlo) tu ricavi gli ip e le bandiere in base all'ip del tuo visitatore. Non è così che devi procedere.

Quando un visitatore salva un messaggio tu devi salvare anche il suo ip (eventualmente anche già il codice della bandiera). Poi per visualizzare il tutto devi recuperare il codice della bandiera rieseguendo la funzione che riporta il tuo ip in codice del paese.

Come puoi partire a ricreare le bandiere dei messaggi precedenti dall'ip del tuo ultimo visitatore? Non capisco il senso di questo...

L'ip del visitatore viene salvato perchè si stampa correttajmente e vi rimane, poi il codice prende questo ip e lo valuta con i range che ha nel db, ed infine mette a video Countri e bandierina in base a ciò che ha trovato in questo range di ip.

Quello che non capisco è che mi stampa giusto solo l'ip

risposto 6 anni fa
php
php
6
X 0 X

Ora ho organizzato meglio il codice in view.php, è più leggibile, ma mi da sempre lo stesso risultato.

Ho provato a mettere varie parti di codice in ins.php nella speranza che mi salvasse Country e bandierina, che avrei poi recuperato, ma è ancora come prima...sono fermo.

// Nome del file che c'è sul server, view.php prende i dati da là (Questo va messo qui in view.php)
$file = "message.html"; 

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

include("../ip_flags/ip_files/countries.php");
$file_to_check="../ip_flags/flags/$two_letter_country_code.gif";    
if (file_exists($file_to_check)){ $bandieraGuest = "&nbsp;&nbsp;&nbsp;<img class=\"borderBandiera\" src=\"http://photoman.altervista.org/$file_to_check\" width=\"16\" height=\"12\" alt=\"\" title=\"\" />";
}
else
{ 
$bandieraGuest = "&nbsp;&nbsp;&nbsp;<img class=\"borderBandiera\" src=\"http://photoman.altervista.org/ip_flags/flags/NOFLAG.gif\" width=\"16\" height=\"12\" alt=\"noflag\" title=\"noflag\" />";
}             
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]); 
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="unknown"; 
} 
return $two_letter_country_code; 
}
risposto 6 anni fa
php
php
6
X 0 X

Perchè lo prendi e lo stampi e basta.

Tu per ritrovare il codice delle bandiere usi una funzione che è dipendente dall'ip del tuo ultimo visitatore. L'errore secondo me sta proprio qui.

risposto 6 anni fa
Mario Santagiuliana
X 0 X

Perchè lo prendi e lo stampi e basta.

Tu per ritrovare il codice delle bandiere usi una funzione che è dipendente dall'ip del tuo ultimo visitatore. L'errore secondo me sta proprio qui.

Lo so, sto provando a mettere codici in ins.php sperando che me lo stampino.

Siccome in ins ho questo che stampa $ip=$_SERVER['REMOTE_ADDR'];, mettendoci anche questo $ipVisitor=$_SERVER['REMOTE_ADDR']; me lo dovrebbe stampare, invece stampa solo il primo

risposto 6 anni fa
php
php
6
X 0 X

Il problema non è in ins.php. Tu li già salvi l'ip di chi ti ha lasciato il messaggio.

Devi concentrarti nella pagina che ti fa visualizzare i vari messaggi. Per ogni messaggio devi estrarre l'ip e ricavare da questo il codice della bandiera. Non devi ricavare il codice della bandiera dall'ip di chi sta navigando in quella pagina.

risposto 6 anni fa
Mario Santagiuliana
X 0 X

Il problema non è in ins.php. Tu li già salvi l'ip di chi ti ha lasciato il messaggio.

Devi concentrarti nella pagina che ti fa visualizzare i vari messaggi. Per ogni messaggio devi estrarre l'ip e ricavare da questo il codice della bandiera. Non devi ricavare il codice della bandiera dall'ip di chi sta navigando in quella pagina.

Lo so...ho notato una cosa:

io ora un nuovo codice $ipVisitor=$_SERVER['REMOTE_ADDR']; che non è richiamato da nessuna parte, in ins ho questo che forse è da modificare:

// ...e scrittura dei dati in message.html
$commento=$nome."|".$citta."|".$email."|".$url."|".$ip."|".$messaggio."|".$data_localeG."\n";
if (!(file_exists($file)))
{fopen($file,"w");}
$new_mess=fopen($file,"a+");
fwrite($new_mess,$commento);
fclose($new_mess);

e in view, questo, anchesso forse da modificare:

while ($cont2<$cont1) {
$mess=$mess_pag[$cont2];
$info=explode("|",$mess);
$nome=$info[0];
$citta=$info[1];
$email=$info[2];
$url=$info[3];
$ip=$info[4];
$messaggio=$info[5];
$data_localeG=$info[6];

forse è per quello che non funziona, che dici?

risposto 6 anni fa
php
php
6
X 0 X

1- Ricordati di fare l'indentazione del codice. Ancora non lo fai.

2- Non credo il problema sia dove dici tu. Nell'ultimo pezzo di codice che hai dato c'è:

$ip=$info[4];

Che è l'ip di chi ha scritto il messaggio. E' questo che devi usare per ricavare il codice della bandiera corrispondente.

Non questo:

$ip=$_SERVER['REMOTE_ADDR'];
risposto 6 anni fa
Mario Santagiuliana
X 0 X

L'ho sistemato meglio, dove metto quel codice che dici tu?

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]); 
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="unknown"; 
} 
return $two_letter_country_code; 
} 

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

include("../ip_flags/ip_files/countries.php");
$file_to_check="../ip_flags/flags/$two_letter_country_code.gif";    
if (file_exists($file_to_check)){ 
$bandieraGuest = "&nbsp;&nbsp;&nbsp;<img class=\"borderBandiera\" src=\"http://photoman.altervista.org/$file_to_check\" width=\"16\" height=\"12\" alt=\"\" title=\"\" />";
}
else
{ 
$bandieraGuest = "&nbsp;&nbsp;&nbsp;<img class=\"borderBandiera\" src=\"http://photoman.altervista.org/ip_flags/flags/NOFLAG.gif\" width=\"16\" height=\"12\" alt=\"noflag\" title=\"noflag\" />";
}            
risposto 6 anni fa
php
php
6
X 0 X

Quasi ci siamo, allora: ho provato a togliere $ip=$_SERVER['REMOTE_ADDR']; e a video non si stampa niente, ne ip, ne Country, ne bandierine.

Questo significa che queste 3 cose sono collegate, poi ho rimesso il codice e ho inviato un nuovo form e a video mi ha stampato tutto, ma nel form precedente ho visto che si erano stampati la Country e la bandierina, tranne l'ip (nel form precedente).

Perciò, mi chiedo: dove è andato a prendere la Country e la bandierina da mettere nel form precedente?

Di sicuro non dal server. E' questo il punto da scoprire: da dove questo codice va a prende Country e bandierine

risposto 6 anni fa
php
php
6
modificato 6 anni fa
X 0 X

CE L'HO FATTA!, non ci credo! :wallbash:  :D

risposto 6 anni fa
php
php
6
X 0 X

Sei riuscito a sistemare il codice?

Vuoi farlo vedere così anche a qualcun altro può risultare utile?

risposto 6 anni fa
Mario Santagiuliana
X 0 X

Sei riuscito a sistemare il codice?

Vuoi farlo vedere così anche a qualcun altro può risultare utile?

Si, funziona, lo posso postare, ma se Gianni non si decide ad aggiustare il textarea, è un po un problema postare codici lunghi...

risposto 6 anni fa
php
php
6
X 0 X

Non capisco dove hai il problema...c'è una textarea per inserire le risposte, tale textarea può essere espansa a piacere con il mouse.

Inserisci il codice dentro i bbcode tag php.

risposto 6 anni fa
Mario Santagiuliana
X 0 X

Non capisco dove hai il problema...c'è una textarea per inserire le risposte, tale textarea può essere espansa a piacere con il mouse.

Inserisci il codice dentro i bbcode tag php.

Che ne so che si può espandere...ora posto il codice per chi lo vuole.

E' un codice che ho messo nel mio guestbook che è composto da 3 file php

1. form

2. ins, che riceve i dati dal form, li elabora e li invia

3. view, che riceve i dati da ins e li mette a video

in ins c'è questo:

...
/* Tutto questo codice trova e l'ip del visitor, Country e bandierina e li scrive in message.html
che poi verranno estrapolati da message.html che c'è in view.php e messi a video */
$ip=$_SERVER['REMOTE_ADDR'];   
$two_letter_country_code=iptocountry($ip);

include("../ip_flags/ip_files/countries.php");
$file_to_check="../ip_flags/flags/$two_letter_country_code.gif";    
if (file_exists($file_to_check)){ 
$bandieraGuest .= "&nbsp;&nbsp;&nbsp;<img class=\"borderBandiera\" src=\"http://miosito.it/$file_to_check\" width=\"16\" height=\"12\" alt=\"\" title=\"\" />";
}
else
{ 
$bandieraGuest .= "&nbsp;&nbsp;&nbsp;<img class=\"borderBandiera\" src=\"http://miosito.it/ip_flags/flags/noflag.gif\" width=\"16\" height=\"12\" alt=\"noflag\" title=\"noflag\" />";
}
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]); 
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="unknown"; 
} 
return $two_letter_country_code; 
}              

// Nome del file dove verranno salvati i dati sul server (Questo va messo qui in ins.php)
$file = "message.html";

// ...e scrittura dei dati in message.html
$commento=$nome."|".$citta."|".$email."|".$url."|".$countries[$two_letter_country_code][1]."|".$ip."|".$bandieraGuest."|".$messaggio."|".$data_localeG."\n";
if (!(file_exists($file)))
{fopen($file,"w");}
$new_mess=fopen($file,"a+");
fwrite($new_mess,$commento);
fclose($new_mess);
...

e questo in view.php

...
// Nome del file che c'è sul server, view.php prende i dati da là (Questo va messo qui in view.php)
$file = "message.html"; 

/* Questo estrapola da message.html i dati dell'ip visitor che si sono stampati nel message.html di ins.php */
$ip=$_SERVER['REMOTE_ADDR'];   

//Stampa a video
$rows_file=file($file);
$count=count($rows_file);
$numero_messaggi=$count;

while ($cont2<$cont1) {
$mess=$mess_pag[$cont2];
$info=explode("|",$mess);
$nome=$info[0];
$citta=$info[1];
$email=$info[2];
$url=$info[3];
$countries[$two_letter_country_code][1]=$info[4];
$ip=$info[5];
$bandieraGuest=$info[6];
$messaggio=$info[7];
$data_localeG=$info[8];
...
risposto 6 anni fa
php
php
6
X 0 X

Grazie  :D

risposto 6 anni fa
Mario Santagiuliana
X 0 X
Grazie  :D

...anche se non ho ancora capito come questo codice in ins $two_letter_country_code=iptocountry($ip); riesca a funzionare avendo la sua funzione più in basso

function iptocountry($ip) {

$numbers = explode(".", $ip);

...

risposto 6 anni fa
php
php
6
X 0 X

Questo è un discorso di visibilità delle funzioni e del codice.

risposto 6 anni fa
Mario Santagiuliana
X 0 X
Questo è un discorso di visibilità delle funzioni e del codice.

Non ho capito, che intendi?

risposto 6 anni fa
php
php
6
X 0 X

Le funzioni in php hanno una visibilità globale. Puoi dunque chiamarle prima di dove hai scritto la tua funzione.

Differente è la visibilità delle funzioni negli oggetti.

http://php.net/manual/en/language.oop5.visibility.php

risposto 6 anni fa
Mario Santagiuliana
X 0 X

Le funzioni in php hanno una visibilità globale. Puoi dunque chiamarle prima di dove hai scritto la tua funzione.

Differente è la visibilità delle funzioni negli oggetti.

http://php.net/manual/en/language.oop5.visibility.php

 :sleep: l'importante che funzioni...un'ultima cosa per poi chiudere:

secondo te quando si richiama un codice è più corretto scrivere così, es ...".$nome."... o così ...$nome... 

risposto 6 anni fa
php
php
6
X 0 X

E' indifferente se sta fra i doppi apici. A parte che siamo fuori tema, ti rispondo qui e poi basta.

Puoi fare un echo di una variabile così:

$variabile = "numero";
echo "Qualcosa: $variabile"; //-> Qualcosa: numero
echo "Qualcosa: ".$variabile; //-> Qualcosa: numero

Il risultato è sempre lo stesso perchè la variabile è all'interno delle doppie graffette.

Se invece fai con il solo apice:

$variabile = "numero";
echo 'Qualcosa: $variabile'; //-> Qualcosa: $variabile
echo 'Qualcosa: '.$variabile; //-> Qualcosa: numero

Questi sono due esempi banali.

risposto 6 anni fa
Mario Santagiuliana
X 0 X

...e se vuoi dare il tocco finale al mio codice puoi mettere questo alla bandierina:

title=\"".$countries[$two_letter_country_code][1]."

$bandierina ="&nbsp;&nbsp;&nbsp;<img style=\"border-right:1px solid #9c9e95;border-bottom:1px solid #9c9e95;margin-bottom:-2px;\" src=\"http://miosito.it/$file_to_check\" width=\"16\" height=\"12\" title=\"".$countries[$two_letter_country_code][1]."\" />";
risposto 6 anni fa
php
php
6
modificato 6 anni fa
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda