- Home
- Categorie
- Coding e Sistemistica
- PHP
- Errore invio form
-
Errore invio form
Buongiorno a tutti, ho creato un form per iscrizione a delle news.
Questo il file php<?php // Recupero i valori inseriti nel form $email = $_POST['email']; $url = $_POST['url']; $delay = "6"; $url = "http://www.sitoprova.it"; // verifico che tutti i campi siano stati compilati if (!$email) { echo 'Tutti i campi del modulo sono obbligatori!'; } // verifico se un indirizzo email è valido elseif (!filter_var($email, FILTER_VALIDATE_EMAIL)) { echo 'Indirizzo email non corretto'; }else{ // compilo un messaggio combinando i dati recuperati dal form $testo = "Email: " . $email . "\n" . "Gradirei iscrivermi alla vostra newsletter. Distinti saluti. " . $msg; // uso la funzione mail di PHP per inviare questi dati al mio indirizzo di posta mail('[email protected]', 'Iscrizione newsletter sitoprova', $testo); // Mostro un messaggio di conferma all'utente print "<body> <table align='center' bordercolor='#ec7632'> <tr> <td> <div align='center'><font face='Roboto+Condensed, Verdana, Arial, Helvetica, sans-serif'> Grazie per esserti iscritto alla nostra newsletter</font><br><br> Ti terremo aggiornato sulle iniziative e gli eventi.<br><br> Per tornare all'Home attendi 6 secondi o <a href='http://www.sitoprova.it'>Clicca qui</a></font></div></td> <meta http-equiv='refresh' content='$delay; url=$url'> </tr> </table> </body>"; } ?>
Se provo ad inviarlo tramite pagina, mi ritorna il seguente errore:
Cosa sbaglio?
Grazie per la vostra pazienza e il vostro aiuto
2 Risposte -
@darkbox Perdonami ma dove è l'errore? mi pare una comunicazione corretta ed è quella che scrivi nell'HTML
D 1 Risposta -
@mirkomassarutto Il form, non invia mail e la pagina rimane bloccata in quella posizione. Inoltre mi appaiono quei simbolini a sinistra della pagina (vedi immagine)
1 Risposta -
@darkbox i "simbolini" sono evidentemente un errore nello script.. controlla i tag..per il resto dovrei vedere meglio cosa fai..
la prima domanda è se i dati li ricevi..
D 1 Risposta -
@mirkomassarutto no non ricevo nessun dato. Per i simbolini ho già controllato ma mi sembra tutto ok, sto diventando matto con questo problema, ma come dicevo sora sono autodidatta e alle prime armi è quindi tutto un pò complicato.
Chiedo: potrebbe essere un problema del server (Register.it) su dove è appoggiato il sito?
1 Risposta -
Ciao @darkbox,
Prova a usare unecho
invece che un print nel mostrare il messaggio di conferma, e metti la stringa tra parentesi.I caratteri in fondo sembrano essere gli ultimi dello script.
In locale lo script a me funziona.
Considera comunque che:
- Gli attributi
align
ebordercolor
usati nel tagtable
e indiv
sono deprecated, dovresti usare CSS per queste cose - Il tag
font
non è supportato in HTML5
D 1 Risposta - Gli attributi
-
@g-lanzi Ho appena provato ad inviare il form attraverso un'altro server (Aruba) e il problema non si presenta, tutto ok. A questo punto penso sia un problema collegato al server dove è appoggiato il web. Proverò a chiedere assistenza a loro.
Grazie
-
Alcune note:
Se a fine script non c'è altro, ovvero sei a fine pagina e non ci sono tag HTML non terminare lo script con
?>
che è il tag di chiusura di PHP e si può omettere se appunto non c'è bisogno di aggungere altro.// verifico che tutti i campi siano stati compilati if (!$email) { echo 'Tutti i campi del modulo sono obbligatori!'; }
Queste validazioni falle in javascript perché miglori la UX dell'utente, se un campo è sbagliato devi aggiungere una nota subito prima che venga inviato il form, facendole in PHP il feedback ce l'hai solo dopo il submit e non prima.
Quel form non è per nulla sicuro, never trust user input, se è tutto li lo script allora sanitizza subito:
$email = \filter_var( $_POST['email'], FILTER_SANITIZE_EMAIL ); $url = \filter_var( $_POST['url'], FILTER_SANITIZE_URL );
Poi
$msg
non è definitaPoi si potrebbe continuare migliorando quello script e renderlo più leggibile per esempio evitando tutti gli
else
che complicano la lettura e introducendo string template eprintf()
, però prima vediamo di farlo funzionare.