Newsgroup: it.comp.www.php
Titolo: niewbie_mailform_Advncd: immettere IP, REF, DATE e TIME in una mail

ciao a tutti!
sto lavorando, da newbie, al mio primo mailform, che
funziona egregiamente, grazie anche a Spirito Libero e
alle sue direttive! :)
Adesso volevo fare in modo che ad ogni mail inviata
via mailform, io ricevessi anche l'IP, il REF, la data e l'ora
del visitatore.
Sto provando quindi questa soluzione, che però
non funziona poiché non ricevo altro che spazi bianchi.
In mail.php ho messo questa porzione di codice:
====================================
<?
$data = date("Y-m-d");
$ora = date("G:i:s");
//ref
if (isset($HTTP_REFERER))
    {
    if (eregi(
www.libero.it/miosito/
, $HTTP_REFERER))
        $ref = "Link interno";
    else
        $ref = $HTTP_REFERER;
    }
else
        $ref = "Sconosciuto";
//lingua
if ($HTTP_ACCEPT_LANGUAGE == "it") {$lingua = "Italiano";}
elseif ($HTTP_ACCEPT_LANGUAGE == "en") {$lingua = "Inglese";}
elseif ($HTTP_ACCEPT_LANGUAGE == "fr") {$lingua = "Fancese";}
elseif ($HTTP_ACCEPT_LANGUAGE == "de") {$lingua = "Tedesco";}
elseif ($HTTP_ACCEPT_LANGUAGE == "ja") {$lingua = "Giapponese";}
elseif ($HTTP_ACCEPT_LANGUAGE == "nl") {$lingua = "Olandese";}
elseif ($HTTP_ACCEPT_LANGUAGE == "es") {$lingua = "Spagnolo";}
elseif ($HTTP_ACCEPT_LANGUAGE == "ru") {$lingua = "Russo";}
elseif ($HTTP_ACCEPT_LANGUAGE == "pt") {$lingua = "Portoghese";}
elseif ($HTTP_ACCEPT_LANGUAGE == "zh") {$lingua = "Cinese";}
elseif ($HTTP_ACCEPT_LANGUAGE == "da") {$lingua = "Danese";}
elseif ($HTTP_ACCEPT_LANGUAGE == "el") {$lingua = "Greco";}
elseif ($HTTP_ACCEPT_LANGUAGE == "no") {$lingua = "Norvegese";}
elseif ($HTTP_ACCEPT_LANGUAGE == "sv") {$lingua = "Svedese";}
else $lingua = "Sconosciuto";
//browser
if(eregi("MSIE 5.5", $HTTP_USER_AGENT)) $browser = "Internet Explorer 5.5";
elseif(eregi("MSIE 6", $HTTP_USER_AGENT)) $browser = "Internet Explorer 6";
elseif(eregi("MSIE 5", $HTTP_USER_AGENT)) $browser = "Internet Explorer 5";
elseif(eregi("MSIE 4", $HTTP_USER_AGENT)) $browser = "Internet Explorer 4";
elseif(eregi("Netscape6", $HTTP_USER_AGENT)) $browser = "Netscape6";
elseif(eregi("Mozilla/4.", $HTTP_USER_AGENT)) $browser = "Netscape4";
elseif(eregi("Mozilla/3.", $HTTP_USER_AGENT)) $browser = "Netscape3";
elseif(eregi("Opera/5", $HTTP_USER_AGENT)) $browser = "Opera5";
elseif(eregi("Opera 5", $HTTP_USER_AGENT)) $browser = "Opera5";
elseif(eregi("Opera/6", $HTTP_USER_AGENT)) $browser = "Opera6";
elseif(eregi("Opera 6", $HTTP_USER_AGENT)) $browser = "Opera6";
elseif(eregi("Konqueror", $HTTP_USER_AGENT)) $browser = "Konqueror";
elseif(eregi("Mozilla", $HTTP_USER_AGENT)) $browser = "Mozilla";
else $browser = "Sconosciuto";
//os
if(eregi("Windows 98", $HTTP_USER_AGENT)) $os = "Windows 98";
elseif(eregi("Win 98", $HTTP_USER_AGENT)) $os = "Windows 98";
elseif(eregi("Windows 95", $HTTP_USER_AGENT)) $os = "Windows 95";
elseif(eregi("Win 95", $HTTP_USER_AGENT)) $os = "Windows 95";
elseif(eregi("Windows 2000", $HTTP_USER_AGENT)) $os = "Windows 2000";
elseif(eregi("Windows NT 5.0", $HTTP_USER_AGENT)) $os = "Windows 2000";
elseif(eregi("Windows NT 5.1", $HTTP_USER_AGENT)) $os = "Windows XP";
elseif(eregi("Windows NT 4", $HTTP_USER_AGENT)) $os = "Windows NT";
elseif(eregi("Win NT", $HTTP_USER_AGENT)) $os = "Windows NT";
elseif(eregi("Windows NT", $HTTP_USER_AGENT)) $os = "Windows NT";
elseif(eregi("Mac", $HTTP_USER_AGENT)) $os = "Macintosh";
elseif(eregi("linux", $HTTP_USER_AGENT)) $os = "Linux";
elseif(eregi("X11", $HTTP_USER_AGENT)) $os = "Linux";
elseif(eregi("Windows ME", $HTTP_USER_AGENT)) $os = "Windows ME";
elseif(eregi("Win9x 4.90", $HTTP_USER_AGENT)) $os = "Windows ME";
elseif(eregi("SunOS", $HTTP_USER_AGENT)) $os = "Sun OS";
elseif(eregi("Win 3.1", $HTTP_USER_AGENT)) $os = "Windows 3.1";
elseif(eregi("FreeBSD", $HTTP_USER_AGENT)) $os = "FreeBSD";
elseif(eregi("WebTV", $HTTP_USER_AGENT)) $os = "WebTV";
else $os = "Sconosciuto";
//ip
$ip = $REMOTE_ADDR;
?>
====================================
Questo invece in send.php:
====================================
     // Codice per l'invio dell'email
  $messaggio = $messaggio."Altre info: \n $ref \n $lingua \n $os \n $browser
\n $ip \n \n ---------------------------------------- \n";
  $risultato = mail($destinatario,$oggetto,$messaggio,$header);
  if ($risultato)
  { echo ("Mail inviata");
  }
  else echo ("Mail non inviata");
====================================
Vorrei capire come mai le stringhe contenute in $ref,os,lingua,browser e ip
non mi contengono nulla o come mai non mi giungono in mailbox.
Sapreste dirmi come mai?
Vi ringrazio e vi auguro una buona giornata!
Bd

 $ora = date("G:i:s");
tutta quell'elaborazione con le cascate di if ha un motivo?
potresti sostituire con il comando condizionale switch che rende anche 
tutto piů leggibile. Qui trovi tutto quello che serve
http://it3.php.net/manual/en/control-structures.switch.php
hai provato cosě?
//referer
$ref=_SERVER['HTTP_REFERER'];
//Lang
$lan=_SERVER['HTTP_ACCEPT_LANGUAGE'];
//Browser
$bro=_SERVER['HTTP_USER_AGENT'];
//OS
// dovrebbe uscire assieme al Browser in user agent
//IP
$ip=_SERVER['REMOTE_ADDR'];
se guardi in 
http://it.php.net/manual/en/reserved.variables.php#reserved.variables.server
trovi anche altre info in particolare su USER_AGENT
Ciao Gianfranzo
-- 
ICQ#: 21258924
Nick Gianfranzo
Home page 
http://www.gianfranzo.it
Gianfranzo č contro la guerra

 hai provato così?
Ho provato ma il risultato è identico. L'output che ne deriva è sempre
questo
----------------------------------------
Data invio messaggio:
Ora invio messaggio:
Altre info:
Secondo te perché?
Grazie!
Bd

 > $ora = date("G:i:s");
Mettendo queste prime due righe nella pagina send.php e non in index.php
l'output delle date e ora viene.
Continua a non essere visualizzato invece l'output delle var $_Server. E'
mica possibile che sia "colpa" del server hosting sul quale stanno le mie
pagine? Che non so, l'amministratore abbia disabilitato tali variabili? Solo
una supposizione da ignorante, intendiamoci... ;)
Grazie e buona serata!
Bd

 alle sue direttive! :)
Oh, grazie, "direttive" fa molto informatico... ;)
#include <spirito_libero> LOL
1. Sostituite tutte le chiamate alle variabili globali con le nuove
variabili super globali:
$_SERVER['REMOTE_HOST']
$_SERVER['HTTP_ACCEPT_LANGUAGE']
$_SERVER['HTTP_USER_AGENT']
2. Corrette le righe di codice che riguardavano l'identificazione della
lingua accettata dal browser:
if (eregi("it",$_SERVER['HTTP_ACCEPT_LANGUAGE'])) $lingua = "Italiano";
Le lingue accettate dal browser possono anche essere piu' di una ed in
questo caso ti arriveranno due mail, perche' il codice trova due occorrenze.
3. Aggiunta la stringa che identifica Opera 7.11 (e porca vacca io uso
quello e non c'era!):
elseif(eregi("Opera/7.11", $_SERVER['HTTP_USER_AGENT'])) $browser =
"Opera7.11";
4. Aggiunte le stringhe della data e dell'ora all'interno della funzione
mail() in send.php
E questo e' quanto. Aggiusta e divertiti stasera.
--
Spirito Libero
La verita' non sta in un solo sogno, ma in molti sogni.
(Le Mille e una Notte)
---
La posta in uscita e' certificata Virus Free.
Checked by AVG anti-virus system (
http://www.grisoft.com
).
Version: 6.0.507 / Virus Database: 304 - Release Date: 04/08/2003

 occorrenze.
Ops mi sono confucio... cioe' arriveranno piu' mail, tante quante sono le
lingue del browser. A me ne sono arrivate due, una per it e una per eng,
perche' sono quelle che riconosce Opera.


 E questo e' quanto. Aggiusta e divertiti stasera.
Mi son divertito! Ma ho "pianto" quando dopo altri tanti tentativi,
non ha funzionato ancora! :( L'output è sempre quello, una riga vuota.
:-O   <---- Bd perplesso.
Ora Bd ti fa vedere il suo codice interamente, così che magari capisci al
volo dove sta l'errore. Credo di aver seguito fedelmente i tuoi consigli...
;-)
Buona notte e a domani a questo punto!
Bd
P.S. Grazie
<?
$data = date("d-m-Y");
$ora = date("G:i:s");
//referer
$ref= $_SERVER['HTTP_REFERER'];
//Lang
$lingua= $_SERVER['HTTP_ACCEPT_LANGUAGE'];
//Browser
$browser= $_SERVER['HTTP_USER_AGENT'];
//IP
$ip= $_SERVER['REMOTE_HOST'];
$destinatario = "mioAddress";
$oggetto = "oggettoMail";
$header = "From: mestesso";
if (strpos($email,"@") === FALSE)
{
    echo "Indirizzo E-Mail specificato non valido!<br>Torna indietro e
immettine uno valido.";
}
else
{ // Controllo se cè un punto all'interno dell'indirizzo
 if (strpos($email,".") === FALSE)
 {
     echo "Indirizzo E-Mail specificato non valido!<br>Torna indietro e
immettine uno valido.";
 }
 else
 {
     // Codice per l'invio dell'email
  $messaggio = $messaggio."\n Messaggio inviato da: \n \t $name \n\n";
  $messaggio = $messaggio."Data invio messaggio: $data \n";
  $messaggio = $messaggio."Ora invio messaggio: $ora \n";
  $messaggio = $messaggio."Altre info: \n $ref \n $lingua \n $browser \n $ip
\n \n ---------------------------------------- \n";
  $messaggio = $messaggio."Note: \n \t   $mex \n
\n ---------------------------------------- \n\n ";
  $risultato = mail($destinatario,$oggetto,$messaggio,$header);
  if ($risultato)
  { echo ("Mail inviata");
  }
  else echo ("Mail non inviata");
 }
}
?>

 }
Non hai settato le variabili $mex e $name che all'esecuzione ti
restituiscono un errore. Ciao e ridivertiti.


 restituiscono un errore. Ciao e ridivertiti.
$mex fa riferimento ad index.php ad una textarea precisamente,
come $name a quello che hai visto prima.
Entrambe inizializzate, funzionano correttamente.
Tutto ciò che non funziona è proprio solo in quella riga:
$messaggio = $messaggio."Altre info: \n $ref \n $lingua \n $browser \n $ip
\n \n";
:)
Grazie ancora SL! ;)
Buona domenica... spero che almeno te non stia cocendo in città come il
sottoscritto :-( !
Bd


Ciao,
Le variabili dovrebbero essere concatenate ad una stringa e quindi fuori da "..."
La riga dovrebbe essere corretta in
$messaggio = $messaggio."Altre info:\n".$ref."\n$lingua\n".$browser."\n".$ip."\n\n";
Comunque credo che dovresti avere dei messaggi di info o di errore di PHP.
Prova ad modificare questi 4 parametri in PHP.INI
      error_reporting=E_ALL       #riporta tutti gli errori
      display_errors=Off              #non li visualizza
      log_errors=On                    #li registra su log
      error_log=phperrorlog.txt    #il log si chiama
chiudi e riavvia il WebServer
rifai la prova con il tuo script
Nella cartella che contiene lo script ti troverai un file di nome phperrorlog.txt
Contiene gli eventuali errori e/o info varie.
Ti sara' molto comodo
Se poi vuoi fare ulteriori debug interattivi senza alterare l'output sul WebBrowser,
nel tuo programma inserisci questa riga (dopo aver riempito $messaggio)
     user_error ( "mia var ".strlen($messaggio)."->".$messaggio."<-");
Ti inserisce una riga nel log. (che hai impostato sopra)
Provala e capirai subito quant'e' comoda.....
Ciao
Roberto

 Comunque credo che dovresti avere dei messaggi di info o di errore di PHP.
Nessun messaggio di info o errore di PHP. Eppure i 4 parametri da te
suggeriti sono come mi hai detto tu di metterli. Caspita...
Ti ringrazio molto, spero di riuscire con voi ad arrivare a capo di questo
"mistero" :)



Hai provato a visualizzare il contenuto della var $messaggio con
     user_error("mia var ".strlen($messaggio)."->".$messaggio."<-");
subito dopo che l'hai impostata?
(il risultato lo trovi nel log)
Puo' essere un punto di partenza....
Ciao
Roberto