[PHP] Form iscrizione senza DB con comandi deprecated

sator1950

Nuovo Utente
1 Ago 2016
3
0
1
44
Ciao a tutti,

sono nuovo del forum e mi complimento per gli strumenti e consigli che date.
Ho un form di iscrizione con controllo di validità dei campi sul mio sito, che non funziona più in quanto contiene diverse istruzioni deprecated (ereg, eregi, split).
Essendo un file preso da internet che personalizzai a suo tempo ma non essendo un programmatore PHP, ho grosse difficoltà nell'adeguare le istruzione PCRE sostitutive delle attuali.
Il sito funziona con un form in html i cui campi vengono validati da un file php e alla fine invia mail a colui che si iscrive.
Al momento sono riuscito a sostituire tutte le istruzioni ma il form non manda la mail fornendo questo errore:

mail(): SMTP server response: 503 5.5.2 Need rcpt command

alla riga corrispondente del codice rilevo quanto segue:

function mail_it($content, $titolo, $email, $contenitore) {
mail($contenitore, $titolo, $content, "From: $email\r\nReply-To: $email\r\nX-Mailer: DT_formmail");
}

$contenitore è definito da questo corpo di codice di cui ho modificato il comando deprecated scambiandolo con preg_split:

$contenitore_finale = preg_split('/,/',$contenitore);
for ($i=0;$i<count($contenitore_finale);$i++) {
$contenitore_to_test = trim($contenitore_finale[$i]);}

Qualcuno saprebbe consigliarmi come potrei risolvere modificando l'attuale file o in alternativa mi potrebbe segnalare un form sostitutivo da implementare solo con i campi inseriti nel form html?
Grazie mille.
 
Ciao,

Quell'errore sta a significare che il server non effettua il relay (il rinvio della mail).
Molto probabilmente per via delle impostazioni di sicurezza, in quanto la funzione php mail() non effettua nessun tipo di autenticazione verso il server SMTP di posta.

Per il momento mi vengono in mente due soluzioni:

La prima è molto pericolosa in quanto prevede di configurare il server SMTP ad accettare connessioni anonime.

La seconda invece prevede l'utilizzo della libreria PHPMailer configurandola opportunamente funziona sicuro.

La puoi trovare qui https://www.mrw.it/php/inviare-email-classe-phpmailer_7047.html


fammi sapere
 
Ultima modifica:
si certo anche io avrei consigliato quella guida ma il problema che anche quella fornisce il link che non funziona
 
Proverò ma penso possa esserci qualche errore nel formato della mail a cui inviare. Infatti la variabile $contenitore è quello che definisce la mail dell'inbox a cui far pervenire i dati di iscrizione.
Quella porzione di codice l'ho adeguata allo standard PCRE ma potrei aver sbagliato qualcosa.
Nello specifico:

PHP:
$contenitore_finale = preg_split('/,/',$contenitore);
for ($i=0;$i<count($contenitore_finale);$i++) {
$contenitore_to_test = trim($contenitore_finale[$i]);
  if (!eregi("^[_\\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\\.)+[a-z]{2,3}$", $contenitore_to_test)) {
  print_error("<b>Occorre un indirizzo email valido per continuare ($contenitore_to_test) </b>");
  }
}

secondo voi preg_split è sintatticamente corretto?
Inizialmente era (con Split ed Eregi):

PHP:
$contenitore_finale = split(',',$contenitore);
for ($i=0;$i<count($contenitore_finale);$i++) {
  $contenitore_to_test = trim($contenitore_finale[$i]);
  if (!eregi("^[_\\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\\.)+[a-z]{2,3}$", $contenitore_to_test)) {
  print_error("<b>Occorre un indirizzo email valido per continuare ($contenitore_to_test) </b>");
  }
}

Grazie
 
Ultima modifica di un moderatore:
Prova con questa funzione per controllare la mail

PHP:
function mailok($mail)
{
    // elimino spazi, ritorni a capo e tutto quello che non serve all'estremità della stringa
    $mail = trim($mail);

    // se mi restituisce una stringa vuota la mail non è corretta
    if(!$mail){
        returnfalse;
    }

    // c'è solo una @? si ok! no ko!
    $num_at = count(explode('@', $mail ))-1;
    if($num_at !=1){
        returnfalse;
    }

    // altri caratteri pericolosi?? no grazie
    if(strpos($mail,';')|| strpos($mail,',')|| strpos($mail,' ')){
        returnfalse;
    }

    // controllo se il formato è quello classico di una mail
    if(!preg_match('/^[\w\.\-]+@\w+[\w\.\-]*?\.\w{1,4}$/', $mail)){
        returnfalse;
    }

    returntrue;
}

Chiedo scusa per i commenti ma non ho tempo di modificarli ma quando li ho scritti non ero serio!
 
ciao
più semplicemente
PHP:
function mailok($mail){
    $mail=filter_var($mail, FILTER_SANITIZE_EMAIL);//sanifica
    if(!filter_var(email, FILTER_VALIDATE_EMAIL)){//controlla
        return false:
    }else{
        return true;
    }
}
dimenticavo la funzione ereg è deprecata
 
Grazie Borgo, questa porzione di codice è già adeguata alla variabile del mio file?
Quale funzione dovrebbe sostituire nel codice che ti ho riportato?
Secondo te è possibile che il preg_split lo abbia convertito bene?
Non mi convince la porzione '/,/', prima con lo splti era ','.

PHP:
$contenitore_finale = preg_split('/,/',$contenitore);
for ($i=0;$i<count($contenitore_finale);$i++) {
$contenitore_to_test = trim($contenitore_finale[$i]);
 if (!eregi("^[_\\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\\.)+[a-z]{2,3}$", $contenitore_to_test)) {
 print_error("<b>Occorre un indirizzo email valido per continuare ($contenitore_to_test) </b>");
 }
 
ciao
non so se hai risolto (sono stato un po' impegnato) comunque se non ho capito male $contenitore_to_test dovrebbe contenere un indirizzo email
PHP:
<?php
function mailok($mail){
    $mail=filter_var($mail, FILTER_SANITIZE_EMAIL);//sanifica
    if(!filter_var(email, FILTER_VALIDATE_EMAIL)){//controlla
        return false:
    }else{
        return true;
    }
}
//....
$contenitore_finale = preg_split('/,/',$contenitore);
for ($i=0;$i<count($contenitore_finale);$i++) {
    $contenitore_to_test = trim($contenitore_finale[$i]);
    if (!mailok($contenitore_to_test)) {
        print_error("<b>Occorre un indirizzo email valido per continuare ($contenitore_to_test) </b>");
        //e qui immagino un ritorno a qualcosa
     }
    //....
}
//....
?>
 

Discussioni simili