Verificare se Javascript è attivo attraverso PHP

IImanuII

Utente Attivo
10 Giu 2012
390
0
16
Ed ed eccomi con l'ennesima richiesta... sto da stamane smanettando su questo codice ma non riesco ad adattarlo alle mie esigenze.

Il codice in questione l'ho prelevato da qui http://blog.kultmedia.com/post/20066018036/verificare-javascript-con-php

Per quanto riguarda l'inserimento del campo hidden nel form e i richiami dei js non ci sono problemi, ma questo sorgono allorquando voglio inserirli nel mio "invio.php" che è il file che da le istruzioni al form.

Dovrei cercare di adattare questo script:

PHP:
if ($_POST['jscheck'] == "yes"){//se la chiamata javascript funziona (è in un div hidden nel form)

//allora il form quando premi il tasto invio, invia la mail e tutti gli altri controlli

}
else { //altrimenti dopo che è stato premuto invio da l'errore e la pagina muore

	header('Location: ops.php');
	
	exit;
	}

Il codice php che ho è questo:

PHP:
<?php 
session_start(); 
if(!isset($_SESSION['p']) || $_SESSION['p'] != $_POST['accesso']){//ricorda i cookie possono essere cancellati dall'utente 
    //la sessione non esiste o è diversa da valore del campo nascosto: ho tentato un accesso diretto a invio.php 
    header('Location: ops.php'); 
    exit; 
}else{ 
    //provengo dal form quindi posso fare le verifiche del numero per upparlo 
    //la cosa è possibile solo se il numero di oggi è minore dell'ammesso 
    //elimino la sessione che non serve più 
    unset($_SESSION['p']); 
    require_once "connessione.php"; 
    $mumero_massimo=10; 
    $dati=mysql_fetch_array(mysql_query("SELECT *FROM inviate"));//non metto il controllo per la prima volta di utilizzo 
	$id=$dati['id']; 
    $data=$dati['data']; 
    $quante=$dati['numero']; 
	$oggi=date("Y-m-d");   
    if($oggi == $data){  
        //aggiorno il numero di email inviate oggi  
        $up=mysql_query("UPDATE inviate SET numero=numero+1 WHERE id=$id");  
    }else{  
        $up=mysql_query("UPDATE inviate SET data= '$oggi', numero=0  WHERE id=$id");  
    }  
    /* *************************** 
    qui dovresti mettere i controlli lato server dei dati inviati 
    qui metti tutto il tuo ambaradan di lettura dei dati e l'invio 
    **************************** */ 
if ($_POST['Submit'] == 'Invia')
{

// Recupero il valore dei campi del form
 
$fromname = $_POST['nomedichiinvia'];
$fromemail = $_POST['maildichiinvia'];
$destinatario = "pocodibuono4ever@yahoo.it"; 
$oggetto = $_POST['oggetto']; 
$messaggio = $_POST['messaggio']; 
$verif_box = $_POST["verif_box"];

// Valorizzo le variabili relative all'allegato 
$allegato = $_FILES['allegato']['tmp_name']; 
$allegato_type = $_FILES['allegato']['type']; 
$allegato_name = $_FILES['allegato']['name']; 

// Creo la variabile headers che mi darà la fake mail recuperando i valori fromname e fromemail.. creo la variabile msg che si andrà a riempire successivamente
$lt= '<';
$gt= '>';
$sp= ' ';
$from= 'From:';
$headers = $from.$fromname.$sp.$lt.$fromemail.$gt;
$msg = ""; 

// Verifico se il file è stato caricato correttamente via HTTP 
// In caso affermativo proseguo nel lavoro... 
if (is_uploaded_file($allegato)) 
{ 
  // Apro e leggo il file allegato 
  $file = fopen($allegato,'rb'); 
  $data = fread($file, filesize($allegato)); 
  fclose($file); 

  // Adatto il file al formato MIME base64 usando base64_encode 
  $data = chunk_split(base64_encode($data)); 

  // Genero il "separatore" 
  // Serve per dividere, appunto, le varie parti del messaggio. 
  // Nel nostro caso separerà la parte testuale dall'allegato 
  $semi_rand = md5(time()); 
  $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x"; 
   
  // Aggiungo le intestazioni necessarie per l'allegato 
  $headers .= "\nMIME-Version: 1.0\n"; 
  $headers .= "Content-Type: multipart/mixed;\n"; 
  $headers .= " boundary=\"{$mime_boundary}\""; 

  // Definisco il tipo di messaggio (MIME/multi-part) 
  $msg .= "This is a multi-part message in MIME format.\n\n"; 

  // Metto il separatore 
  $msg .= "--{$mime_boundary}\n"; 

  // Questa è la parte "testuale" del messaggio 
  $msg .= "Content-Type: text/plain; charset=\"iso-8859-1\"\n"; 
  $msg .= "Content-Transfer-Encoding: 7bit\n\n"; 
  $msg .= $messaggio . "\n\n"; 

  // Metto il separatore 
  $msg .= "--{$mime_boundary}\n"; 

  // Aggiungo l'allegato al messaggio 
  $msg .= "Content-Disposition: attachment;\n"; 
  $msg .= " filename=\"{$allegato_name}\"\n"; 
  $msg .= "Content-Transfer-Encoding: base64\n\n"; 
  $msg .= $data . "\n\n"; 

  // chiudo con il separatore 
  $msg .= "--{$mime_boundary}--\n"; 
} 
else 
{ 
  $msg = $messaggio; 
} 	


// controllo se il codice di verifica è corretto
if(md5($verif_box).'a4xn' == $_COOKIE['tntcon']){
	// se il codice di verifica è corretto invio il messaggio
	mail($destinatario, $oggetto, $msg, $headers);
	// cancello il cookie in modo che non può essere inviato nuovamente aggiornando la pagina
	setcookie('tntcon','');
} else if(isset($message) and $message!=""){
	// se il codice di verifica non è corretto o provano ad accedere direttamente alla pagina php mostro l'errore.
} else {

	echo '<html><center>OooopS!</center><br><a href="javascript:history.go(-1)">Torna indietro</a></html>';
	
	exit;
	}

} 
	
	
}//fine if else : provengo da form.php 
?>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>E-Mail inviata</title>
<style type="text/css">
<!--
body,td,th {
	font-family: Arial, Helvetica, sans-serif;
	font-size: 12px;
}
-->
</style></head>

<body>
<table width="100%" height="100%">
<tr>
<td align="center" valign="middle">

Email inviata. Grazie.<br />
<br />
<a href="javascript:history.go(-1)">Torna indietro</a>

</td>
</tr>
</table>
</body>
</html>

Ho provato in questo modo ma non funziona:
PHP:
<?php 
session_start(); 

if ($_POST['jscheck'] == "yes"){//se la chiamata javascript funziona (è in un div hidden nel form)

if(!isset($_SESSION['p']) || $_SESSION['p'] != $_POST['accesso']){//ricorda i cookie possono essere cancellati dall'utente 
    //la sessione non esiste o è diversa da valore del campo nascosto: ho tentato un accesso diretto a invio.php 
    header('Location: ops.php'); 
    exit; 
}else{ 
    //provengo dal form quindi posso fare le verifiche del numero per upparlo 
    //la cosa è possibile solo se il numero di oggi è minore dell'ammesso 
    //elimino la sessione che non serve più 
    unset($_SESSION['p']); 
    require_once "connessione.php"; 
    $mumero_massimo=10; 
    $dati=mysql_fetch_array(mysql_query("SELECT *FROM inviate"));//non metto il controllo per la prima volta di utilizzo 
	$id=$dati['id']; 
    $data=$dati['data']; 
    $quante=$dati['numero']; 
	$oggi=date("Y-m-d");   
    if($oggi == $data){  
        //aggiorno il numero di email inviate oggi  
        $up=mysql_query("UPDATE inviate SET numero=numero+1 WHERE id=$id");  
    }else{  
        $up=mysql_query("UPDATE inviate SET data= '$oggi', numero=0  WHERE id=$id");  
    }  
    /* *************************** 
    qui dovresti mettere i controlli lato server dei dati inviati 
    qui metti tutto il tuo ambaradan di lettura dei dati e l'invio 
    **************************** */ 
if ($_POST['Submit'] == 'Invia')
{

// Recupero il valore dei campi del form
 
$fromname = $_POST['nomedichiinvia'];
$fromemail = $_POST['maildichiinvia'];
$destinatario = "pocodibuono4ever@yahoo.it"; 
$oggetto = $_POST['oggetto']; 
$messaggio = $_POST['messaggio']; 
$verif_box = $_POST["verif_box"];

// Valorizzo le variabili relative all'allegato 
$allegato = $_FILES['allegato']['tmp_name']; 
$allegato_type = $_FILES['allegato']['type']; 
$allegato_name = $_FILES['allegato']['name']; 

// Creo la variabile headers che mi darà la fake mail recuperando i valori fromname e fromemail.. creo la variabile msg che si andrà a riempire successivamente
$lt= '<';
$gt= '>';
$sp= ' ';
$from= 'From:';
$headers = $from.$fromname.$sp.$lt.$fromemail.$gt;
$msg = ""; 

// Verifico se il file è stato caricato correttamente via HTTP 
// In caso affermativo proseguo nel lavoro... 
if (is_uploaded_file($allegato)) 
{ 
  // Apro e leggo il file allegato 
  $file = fopen($allegato,'rb'); 
  $data = fread($file, filesize($allegato)); 
  fclose($file); 

  // Adatto il file al formato MIME base64 usando base64_encode 
  $data = chunk_split(base64_encode($data)); 

  // Genero il "separatore" 
  // Serve per dividere, appunto, le varie parti del messaggio. 
  // Nel nostro caso separerà la parte testuale dall'allegato 
  $semi_rand = md5(time()); 
  $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x"; 
   
  // Aggiungo le intestazioni necessarie per l'allegato 
  $headers .= "\nMIME-Version: 1.0\n"; 
  $headers .= "Content-Type: multipart/mixed;\n"; 
  $headers .= " boundary=\"{$mime_boundary}\""; 

  // Definisco il tipo di messaggio (MIME/multi-part) 
  $msg .= "This is a multi-part message in MIME format.\n\n"; 

  // Metto il separatore 
  $msg .= "--{$mime_boundary}\n"; 

  // Questa è la parte "testuale" del messaggio 
  $msg .= "Content-Type: text/plain; charset=\"iso-8859-1\"\n"; 
  $msg .= "Content-Transfer-Encoding: 7bit\n\n"; 
  $msg .= $messaggio . "\n\n"; 

  // Metto il separatore 
  $msg .= "--{$mime_boundary}\n"; 

  // Aggiungo l'allegato al messaggio 
  $msg .= "Content-Disposition: attachment;\n"; 
  $msg .= " filename=\"{$allegato_name}\"\n"; 
  $msg .= "Content-Transfer-Encoding: base64\n\n"; 
  $msg .= $data . "\n\n"; 

  // chiudo con il separatore 
  $msg .= "--{$mime_boundary}--\n"; 
} 
else 
{ 
  $msg = $messaggio; 
} 	


// controllo se il codice di verifica è corretto
if(md5($verif_box).'a4xn' == $_COOKIE['tntcon']){
	// se il codice di verifica è corretto invio il messaggio
	mail($destinatario, $oggetto, $msg, $headers);
	// cancello il cookie in modo che non può essere inviato nuovamente aggiornando la pagina
	setcookie('tntcon','');
} else if(isset($message) and $message!=""){
	// se il codice di verifica non è corretto o provano ad accedere direttamente alla pagina php mostro l'errore.
} else {

	echo '<html><center>OooopS!</center><br><a href="javascript:history.go(-1)">Torna indietro</a></html>';
	
	exit;
	}

} 
	
	
}//fine if else : provengo da form.php 
}
else { //altrimenti dopo che è stato premuto invio da l'errore e la pagina muore

	header('Location: ops.php');
	
	exit;
	}
?>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>E-Mail inviata</title>
<style type="text/css">
<!--
body,td,th {
	font-family: Arial, Helvetica, sans-serif;
	font-size: 12px;
}
-->
</style></head>

<body>
<table width="100%" height="100%">
<tr>
<td align="center" valign="middle">

Email inviata. Grazie.<br />
<br />
<a href="javascript:history.go(-1)">Torna indietro</a>

</td>
</tr>
</table>
</body>
</html>

Come posso adattarlo?
 
Come ho detto per il form non ho avuto problemi e comunica con l'invio.php dopo vado dal pc e lo posto

Ecco il form

PHP:
<?php 
session_start();//attento deve essere la prima istruzione anche prima di require o include 
//ti aggiungo questa parte più sicura dei cookie per imperdire l'accesso a invia.php 
$_SESSION['p'] = sha1(uniqid(mt_rand()));//genero e codifico un numero casuale 
//come vedrai ti aggiungo un campo hidden per trasmettere e confrontare il numero generato 
/* 
qui la parte per la verifica del numero di email inviate 
è inutile mostrare il pulsante di submit se l'email non può essere inviata, o meglio 
NON mostrare l'intero form, dai un avviso e riinvii alla pg che vuoi 
*/ 
$numero_massimo=10;//che puoi modificare 
require_once "connessione.php"; 
$dati=mysql_fetch_array(mysql_query("SELECT *FROM inviate")); 
$id=$dati['id']; 
$data=$dati['data']; 
$quante=$dati['numero']; 
$oggi=date("Y-m-d");//!!!verifica che sia nello stesso formato di quello che hai nel db 
//verifico quante email sono state inviate oggi 
if($oggi == $data && $quante >= $numero_massimo){ 
    //oggi ho raggiunto il numero massimo di email quindi non posso inviare 
    //avviso e ritorno in automatico alla pag che mi pare 
    echo "<center><br><h1>Oggi $oggi sono state già inviate $quante email, non è possibile inviarne altre!<br>Reindirizzamento in corso...</center></h1>"; 
    //quindi dopo 4 sec riinvio (uso il tag meta e non header refresh per non aggiungere altre istruzioni) 
    echo "<meta http-equiv='Refresh' content='4; URL=ops.php'>"; 
    exit; 
}else{ 
//non ho raggiunto il numero massimo quindi posso inviare 
?> 
<html>  
<head>  
<title></title> 
<META HTTP-EQUIV="Imagetoolbar" Content="no"> 
<link rel="stylesheet" type="text/css" href="stile.css"> 
<script language="javascript">

//funzione per disabilitare il tasto destro del mouse
var message=""; 

function clickIE() {

if (document.all) {
(message); 
return false
}

} 

function clickNS(e) {

if (document.layers||(document.getElementById&&!document.all)) {
if (e.which==2||e.which==3) {(message); return false}}} 
if (document.layers) {document.captureEvents(Event.MOUSEDOWN); document.onmousedown=clickNS} 
else {
document.onmouseup=clickNS; document.oncontextmenu=clickIE
} 

document.oncontextmenu=new Function("return false")

// funzione per accettare solo numeri nel box del campo verifica

function reloadCaptcha() 
{
	document.getElementById("image").src=document.getElementById("image").src;
}

function keyCheck(eventObj, obj)
{
var keyCode

// Check For Browser Type
if (document.all){
keyCode=eventObj.keyCode
}
else{
keyCode=eventObj.which
}

var str=obj.value

if(keyCode==46){
if (str.indexOf(".")>0){
return false
}
}

if((keyCode<48 || keyCode >58) && (keyCode != 46)){ // Allow only integers and decimal points
return false
}

return true
}

//funzione di validazione delle due mail, messaggio, nome e oggetto
function validate()
{
var str=true;
document.getElementById("msgnome").innerHTML="";
document.getElementById("msgemailinvia").innerHTML="";
document.getElementById("oggetto").innerHTML="";



if(document.modulo.nomedichiinvia.value=='')
{
document.getElementById("msgnome").innerHTML="&nbsp;<img src=\"./sign_warning.png\" align=\"absmiddle\">&nbsp;Inserire il nome.";
str=false;
}

var validate_char= /^[\w\-\.\+]+\@[a-zA-Z0-9\.\-]+\.[a-zA-z0-9]{2,4}$/;
if(!document.modulo.maildichiinvia.value.match(validate_char))
{
document.getElementById("msgemailinvia").innerHTML="&nbsp;<img src=\"./sign_warning.png\" align=\"absmiddle\">&nbsp;Inserire un indirizzo email valido.";
str=false;
}

if(document.modulo.oggetto.value=='')
{
document.getElementById("oggetto").innerHTML="&nbsp;<img src=\"./sign_warning.png\" align=\"absmiddle\">&nbsp;Inserire l\'oggetto della mail.";
str=false;
}

if(document.modulo.messaggio.value=='')
{
document.getElementById("messaggio").innerHTML="&nbsp;<img src=\"./sign_warning.png\" align=\"absmiddle\">&nbsp;Inserire il messaggio.";
str=false;
}

return str;

}
</script>

<script type="text/javascript" src="./js/jquery.min.js"></script>
<script type="text/javascript" src="./js/jscheck.js"></script>

</head>  
<body oncontextmenu="return false;" ondragstart="return false;" onselectstart="return false;"> 
<p>   
<form name="modulo" action="invio.php" method="post" enctype="multipart/form-data" onSubmit="return validate()" > 
<table border="0" align="center" >   
    <tr> 
      <td width="160"><div align="left"><b>Nome di chi invia&nbsp;:</b>&nbsp;&nbsp;&nbsp;<br></div></td> 
      <td width="100"><input size="44" type="text" name="nomedichiinvia" ></td> 
    </tr>  
    <tr> 
      <td width="160"><br></td> 
      <td width="100"><div></div><div id="msgnome" style="color:#FF0000"></div></td> 
    </tr>   
    <tr> 
      <td width="160"><div align="left"><b>Email di chi invia&nbsp;:</b>&nbsp;&nbsp;&nbsp;<br></div></td> 
      <td width="100"><input size="44" type="text" name="maildichiinvia" ></td> 
    </tr>  
    <tr> 
      <td width="160"><br></td> 
      <td width="100"><div id="msgemailinvia" style="color:#FF0000"></div></td> 
    </tr>      
    <tr> 
      <td width="160"><div align="left"><b>Oggetto&nbsp;:</b>&nbsp;&nbsp;&nbsp;<br></div></td> 
      <td width="100"><input size="44" type="text" name="oggetto" ></td> 
    </tr>  
    <tr> 
      <td width="160"><br></td> 
      <td width="100"><div id="oggetto" style="color:#FF0000"></div></td> 
    </tr>        
    <tr> 
      <td width="160"><div align="left"><b>Messaggio&nbsp;:</b>&nbsp;&nbsp;&nbsp;<br></div></td> 
      <td width="100"><textarea cols="20" rows="4" name="messaggio" style="width:293px;overflow:hidden;height:130px; max-width:300px;max-height:130px"></textarea></td> 
    </tr>  
    <tr> 
      <td width="160"><br></td> 
      <td width="100"><div id="messaggio" style="color:#FF0000"></div></td> 
    </tr>         
    <tr> 
      <td width="160"><div align="left"><b>Allega file&nbsp;:</b>&nbsp;&nbsp;&nbsp;<br></div></td> 
      <td width="100"><input type="file" name="allegato" size="32" class="file_1"/></td> 
    </tr> 
    <tr> 
      <td width="160"><br></td> 
      <td width="100"></td> 
    </tr>       
    <tr> 
        <td width="160"><div align="left"><b>Codice di verifica&nbsp;:</b>&nbsp;&nbsp;&nbsp;<br></div></td> 
          <td width="30"><input type="text" name="verif_box" id="verif_box" size="25" onKeyPress="return keyCheck(event, this)" />       
            <a onclick="javascript:reloadCaptcha()" style="cursor: pointer;"><img src="refresh.png" valign="middle" ></a>  
            <iframe align="left" valign="top" id="image" style="border:0;height:40px;width:60px" scrolling="no" src="verificationimage.php?<?php echo rand(0,9999);?>" ></iframe> 
        </td> 
    </tr>  
    <tr> 
      <td width="160"><br></td> 
      <td width="100"></div></td> 
    </tr>     
    <tr> 
      <!-- *********ecco qui il campo hidden ******--> 
      <td width="160"><input name="accesso" type="hidden" value="<?php echo $_SESSION['p'];?>"></td> 
	  
					<!-- campo hidden controllo javascript -->
	  			<input type="hidden" name="jscheck" id="jscheck" value="" />
      <td width="100"><center><input type="submit" name="Submit" value="Invia"><input type="reset" value="Reset"></center></td> 
    </tr> 
  </table> 
</td> 
</tr> 
</table> 
</form> 
</body>  
</html> 
<?php 
}//fine dell if else invio permesso o non permesso 
?>

Spero possiate darmi una mano :)
 
Ricominciamo daccapo perchè non riesco a capacitarmi del perchè non funzioni il codice. Allora io ho un form per l'invio delle mail strutturato in questo modo:

Form.php (che sarebbe la pagina che contiene il form)

PHP:
<?php 
session_start();//attento deve essere la prima istruzione anche prima di require o include 
//ti aggiungo questa parte più sicura dei cookie per imperdire l'accesso a invia.php 
$_SESSION['p'] = sha1(uniqid(mt_rand()));//genero e codifico un numero casuale 
//come vedrai ti aggiungo un campo hidden per trasmettere e confrontare il numero generato 
/* 
qui la parte per la verifica del numero di email inviate 
è inutile mostrare il pulsante di submit se l'email non può essere inviata, o meglio 
NON mostrare l'intero form, dai un avviso e riinvii alla pg che vuoi 
*/ 
$numero_massimo=10;//che puoi modificare 
require_once "connessione.php"; 
$dati=mysql_fetch_array(mysql_query("SELECT *FROM inviate")); 
$id=$dati['id']; 
$data=$dati['data']; 
$quante=$dati['numero']; 
$oggi=date("Y-m-d");//!!!verifica che sia nello stesso formato di quello che hai nel db 
//verifico quante email sono state inviate oggi 
if($oggi == $data && $quante >= $numero_massimo){ 
    //oggi ho raggiunto il numero massimo di email quindi non posso inviare 
    //avviso e ritorno in automatico alla pag che mi pare 
    echo "<center><br><h1>Oggi $oggi sono state già inviate $quante email, non è possibile inviarne altre!<br>Reindirizzamento in corso...</center></h1>"; 
    //quindi dopo 4 sec riinvio (uso il tag meta e non header refresh per non aggiungere altre istruzioni) 
    echo "<meta http-equiv='Refresh' content='4; URL=ops.php'>"; 
    exit; 
}else{ 
//non ho raggiunto il numero massimo quindi posso inviare 
?> 
<html>  
<head>  
<title></title> 
<META HTTP-EQUIV="Imagetoolbar" Content="no"> 
<link rel="stylesheet" type="text/css" href="stile.css"> 
<script language="javascript">

//funzione per disabilitare il tasto destro del mouse
var message=""; 

function clickIE() {

if (document.all) {
(message); 
return false
}

} 

function clickNS(e) {

if (document.layers||(document.getElementById&&!document.all)) {
if (e.which==2||e.which==3) {(message); return false}}} 
if (document.layers) {document.captureEvents(Event.MOUSEDOWN); document.onmousedown=clickNS} 
else {
document.onmouseup=clickNS; document.oncontextmenu=clickIE
} 

document.oncontextmenu=new Function("return false")

// funzione per accettare solo numeri nel box del campo verifica

function reloadCaptcha() 
{
	document.getElementById("image").src=document.getElementById("image").src;
}

function keyCheck(eventObj, obj)
{
var keyCode

// Check For Browser Type
if (document.all){
keyCode=eventObj.keyCode
}
else{
keyCode=eventObj.which
}

var str=obj.value

if(keyCode==46){
if (str.indexOf(".")>0){
return false
}
}

if((keyCode<48 || keyCode >58) && (keyCode != 46)){ // Allow only integers and decimal points
return false
}

return true
}

//funzione di validazione delle due mail, messaggio, nome e oggetto
function validate()
{
var str=true;
document.getElementById("msgnome").innerHTML="";
document.getElementById("msgemailinvia").innerHTML="";
document.getElementById("oggetto").innerHTML="";



if(document.modulo.nomedichiinvia.value=='')
{
document.getElementById("msgnome").innerHTML="&nbsp;<img src=\"./sign_warning.png\" align=\"absmiddle\">&nbsp;Inserire il nome.";
str=false;
}

var validate_char= /^[\w\-\.\+]+\@[a-zA-Z0-9\.\-]+\.[a-zA-z0-9]{2,4}$/;
if(!document.modulo.maildichiinvia.value.match(validate_char))
{
document.getElementById("msgemailinvia").innerHTML="&nbsp;<img src=\"./sign_warning.png\" align=\"absmiddle\">&nbsp;Inserire un indirizzo email valido.";
str=false;
}

if(document.modulo.oggetto.value=='')
{
document.getElementById("oggetto").innerHTML="&nbsp;<img src=\"./sign_warning.png\" align=\"absmiddle\">&nbsp;Inserire l\'oggetto della mail.";
str=false;
}

if(document.modulo.messaggio.value=='')
{
document.getElementById("messaggio").innerHTML="&nbsp;<img src=\"./sign_warning.png\" align=\"absmiddle\">&nbsp;Inserire il messaggio.";
str=false;
}

return str;

}
</script>
</head>  
<body oncontextmenu="return false;" ondragstart="return false;" onselectstart="return false;"> 
<p>   
<form name="modulo" action="invio.php" method="post" enctype="multipart/form-data" onSubmit="return validate()" > 
<table border="0" align="center" >   
    <tr> 
      <td width="160"><div align="left"><b>Nome di chi invia&nbsp;:</b>&nbsp;&nbsp;&nbsp;<br></div></td> 
      <td width="100"><input size="44" type="text" name="nomedichiinvia" ></td> 
    </tr>  
    <tr> 
      <td width="160"><br></td> 
      <td width="100"><div></div><div id="msgnome" style="color:#FF0000"></div></td> 
    </tr>   
    <tr> 
      <td width="160"><div align="left"><b>Email di chi invia&nbsp;:</b>&nbsp;&nbsp;&nbsp;<br></div></td> 
      <td width="100"><input size="44" type="text" name="maildichiinvia" ></td> 
    </tr>  
    <tr> 
      <td width="160"><br></td> 
      <td width="100"><div id="msgemailinvia" style="color:#FF0000"></div></td> 
    </tr>      
    <tr> 
      <td width="160"><div align="left"><b>Oggetto&nbsp;:</b>&nbsp;&nbsp;&nbsp;<br></div></td> 
      <td width="100"><input size="44" type="text" name="oggetto" ></td> 
    </tr>  
    <tr> 
      <td width="160"><br></td> 
      <td width="100"><div id="oggetto" style="color:#FF0000"></div></td> 
    </tr>        
    <tr> 
      <td width="160"><div align="left"><b>Messaggio&nbsp;:</b>&nbsp;&nbsp;&nbsp;<br></div></td> 
      <td width="100"><textarea cols="20" rows="4" name="messaggio" style="width:293px;overflow:hidden;height:130px; max-width:300px;max-height:130px"></textarea></td> 
    </tr>  
    <tr> 
      <td width="160"><br></td> 
      <td width="100"><div id="messaggio" style="color:#FF0000"></div></td> 
    </tr>         
    <tr> 
      <td width="160"><div align="left"><b>Allega file&nbsp;:</b>&nbsp;&nbsp;&nbsp;<br></div></td> 
      <td width="100"><input type="file" name="allegato" size="32" class="file_1"/></td> 
    </tr> 
    <tr> 
      <td width="160"><br></td> 
      <td width="100"></td> 
    </tr>       
    <tr> 
        <td width="160"><div align="left"><b>Codice di verifica&nbsp;:</b>&nbsp;&nbsp;&nbsp;<br></div></td> 
          <td width="30"><input type="text" name="verif_box" id="verif_box" size="25" onKeyPress="return keyCheck(event, this)" />       
            <a onclick="javascript:reloadCaptcha()" style="cursor: pointer;"><img src="refresh.png" valign="middle" ></a>  
            <iframe align="left" valign="top" id="image" style="border:0;height:40px;width:60px" scrolling="no" src="verificationimage.php?<?php echo rand(0,9999);?>" ></iframe> 
        </td> 
    </tr>  
    <tr> 
      <td width="160"><br></td> 
      <td width="100"></div></td> 
    </tr>     
    <tr> 
      <!-- *********ecco qui il campo hidden ******--> 
      <td width="160"><input name="accesso" type="hidden" value="<?php echo $_SESSION['p'];?>"></td> 
      <td width="100"><center><input type="submit" name="Submit" value="Invia"><input type="reset" value="Reset"></center></td> 
    </tr> 
  </table> 
</td> 
</tr> 
</table> 
</form> 
</body>  
</html> 
<?php 
}//fine dell if else invio permesso o non permesso 
?>

Invio.php (che è la pagina che recupera le istruzioni inviate dal form e spedisce, dopo aver eseguito alcuni controlli)

PHP:
<?php 
session_start(); 
if(!isset($_SESSION['p']) || $_SESSION['p'] != $_POST['accesso']){//ricorda i cookie possono essere cancellati dall'utente 
    //la sessione non esiste o è diversa da valore del campo nascosto: ho tentato un accesso diretto a invio.php 
    header('Location: ops.php'); 
    exit; 
}else{ 
    //provengo dal form quindi posso fare le verifiche del numero per upparlo 
    //la cosa è possibile solo se il numero di oggi è minore dell'ammesso 
    //elimino la sessione che non serve più 
    unset($_SESSION['p']); 
    require_once "connessione.php"; 
    $mumero_massimo=10; 
    $dati=mysql_fetch_array(mysql_query("SELECT *FROM inviate"));//non metto il controllo per la prima volta di utilizzo 
	$id=$dati['id']; 
    $data=$dati['data']; 
    $quante=$dati['numero']; 
	$oggi=date("Y-m-d");   
    if($oggi == $data){  
        //aggiorno il numero di email inviate oggi  
        $up=mysql_query("UPDATE inviate SET numero=numero+1 WHERE id=$id");  
    }else{  
        $up=mysql_query("UPDATE inviate SET data= '$oggi', numero=0  WHERE id=$id");  
    }  
    /* *************************** 
    qui dovresti mettere i controlli lato server dei dati inviati 
    qui metti tutto il tuo ambaradan di lettura dei dati e l'invio 
    **************************** */ 
if ($_POST['Submit'] == 'Invia')
{

// Recupero il valore dei campi del form
 
$fromname = $_POST['nomedichiinvia'];
$fromemail = $_POST['maildichiinvia'];
$destinatario = "pocodibuono4ever@yahoo.it"; 
$oggetto = $_POST['oggetto']; 
$messaggio = $_POST['messaggio']; 
$verif_box = $_POST["verif_box"];

// Valorizzo le variabili relative all'allegato 
$allegato = $_FILES['allegato']['tmp_name']; 
$allegato_type = $_FILES['allegato']['type']; 
$allegato_name = $_FILES['allegato']['name']; 

// Creo la variabile headers 
$lt= '<';
$gt= '>';
$sp= ' ';
$from= 'From:';
$headers = $from.$fromname.$sp.$lt.$fromemail.$gt;
$msg = ""; 

// Verifico se il file è stato caricato correttamente via HTTP 
// In caso affermativo proseguo nel lavoro... 
if (is_uploaded_file($allegato)) 
{ 
  // Apro e leggo il file allegato 
  $file = fopen($allegato,'rb'); 
  $data = fread($file, filesize($allegato)); 
  fclose($file); 

  // Adatto il file al formato MIME base64 usando base64_encode 
  $data = chunk_split(base64_encode($data)); 

  // Genero il "separatore" 
  // Serve per dividere, appunto, le varie parti del messaggio. 
  // Nel nostro caso separerà la parte testuale dall'allegato 
  $semi_rand = md5(time()); 
  $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x"; 
   
  // Aggiungo le intestazioni necessarie per l'allegato 
  $headers .= "\nMIME-Version: 1.0\n"; 
  $headers .= "Content-Type: multipart/mixed;\n"; 
  $headers .= " boundary=\"{$mime_boundary}\""; 

  // Definisco il tipo di messaggio (MIME/multi-part) 
  $msg .= "This is a multi-part message in MIME format.\n\n"; 

  // Metto il separatore 
  $msg .= "--{$mime_boundary}\n"; 

  // Questa è la parte "testuale" del messaggio 
  $msg .= "Content-Type: text/plain; charset=\"iso-8859-1\"\n"; 
  $msg .= "Content-Transfer-Encoding: 7bit\n\n"; 
  $msg .= $messaggio . "\n\n"; 

  // Metto il separatore 
  $msg .= "--{$mime_boundary}\n"; 

  // Aggiungo l'allegato al messaggio 
  $msg .= "Content-Disposition: attachment;\n"; 
  $msg .= " filename=\"{$allegato_name}\"\n"; 
  $msg .= "Content-Transfer-Encoding: base64\n\n"; 
  $msg .= $data . "\n\n"; 

  // chiudo con il separatore 
  $msg .= "--{$mime_boundary}--\n"; 
} 
else 
{ 
  $msg = $messaggio; 
} 	


// controllo se il codice di verifica è corretto
if(md5($verif_box).'a4xn' == $_COOKIE['tntcon']){
	// se il codice di verifica è corretto invio il messaggio
	mail($destinatario, $oggetto, $msg, $headers);
	// cancello il cookie in modo che non può essere inviato nuovamente aggiornando la pagina
	setcookie('tntcon','');
} else if(isset($message) and $message!=""){
	// se il codice di verifica non è corretto o provano ad accedere direttamente alla pagina php mostro l'errore.
} else {

	echo '<html><center>OooopS!</center><br><a href="javascript:history.go(-1)">Torna indietro</a></html>';
	
	exit;
	}

} 
	
	
}//fine if else : provengo da form.php 
?>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>E-Mail inviata</title>
<style type="text/css">
<!--
body,td,th {
	font-family: Arial, Helvetica, sans-serif;
	font-size: 12px;
}
-->
</style></head>

<body>
<table width="100%" height="100%">
<tr>
<td align="center" valign="middle">

Email inviata. Grazie.<br />
<br />
<a href="javascript:history.go(-1)">Torna indietro</a>

</td>
</tr>
</table>
</body>
</html>

Adesso, poiché nel form utilizzo controlli javascript, vorrei far si che se l'utente ha il javascript disabilitato dopo che prova ad inviare il form questo visualizzi una pagina d'errore che non gli consente di inviare la mail.

Ho trovato questo script che non riesco ad adattare al mio form:

http://blog.kultmedia.com/post/20066018036/verificare-javascript-con-php

Praticamente in ogni caso quando invio la mail (o con o senza js abilitato) mi porta sulla pagina d'errore e non mi fa inviare la mail.

Qualcuno sa aiutarmi dandomi anche un codice magari anche diverso da quello che ho trovato.
 
Ultima modifica:
Prova modificando così il file per il controllo Javascript:
Codice:
$(function() {
    $("#jscheck").val("yes");
});
È possibile che il problema sussista perché il valore del campo viene cambiato prima che il campo sia caricato dal browser. Modificando come ti ho suggerito il valore viene assegnato solo dopo che la struttura DOM della pagina è stata caricata, e dunque dovrebbe risolvere il tuo problema.

Inoltre, anche con questo controllo devi comunque effettuare la validazione nel file PHP, perché basta anche un utente poco esperto per cambiare il valore del campo senza avere Javascript abilitato, e inviare quello che gli pare.
 
Inoltre, anche con questo controllo devi comunque effettuare la validazione nel file PHP, perché basta anche un utente poco esperto per cambiare il valore del campo senza avere Javascript abilitato, e inviare quello che gli pare.

Funziona egregiamente :)

Comunque hai ragione provvederò a fare i dovuti controlli lato server.
 

Discussioni simili