- Home
- Categorie
- Coding e Sistemistica
- PHP
- Strano problema con semplice form
-
Inizializza le variabili, se è possibile che queste abbiano contenuto vuoto.
Una cosa del genere:
[php]$nome = (isset($_POST['nome'])) ? trim($_POST['nome']) : '';[/php]
ecc..Se ti capita di doverli usare per query in database, aggiungi anche:
[php]if (!get_magic_quotes_gpc()) {
$nome = addslashes($nome);
//ecc...
}[/php]Infine, anche se esegui i controlli con javascript, farei anche un check lato PHP. Se per qualsiasi ragione riescono a bypassare il check javascript (disabilitato?), non puoi inviare la mail ad indirizzo NULL. Così come, anche se non inseriscono un campo vuoto, non basta quel controllo javascript per capire se quella inserita ha le connotazioni di un email.
Trovi qui i vari controlli che potresti utilizzare (codice pagina registrati.php):
giorgiotave.it/forum/scripting-e-risorse-utili/83033-tutorial-area-privata.htmlBuona fortuna!
-
Ciao gigi grazie per la risposta. Allora i form che uso sono due in uno ho provato questo metodo:
$nome=""; $cognome=""; $email=""; $cell=""; $eta="";
ecc,ecc... E poi
if(isset($_POST['nome'])){ $nome = $_POST['nome']; } if(isset($_POST['cognome'])){ $cognome = $_POST['cognome']; } if(isset($_POST['email'])){ $nome = $_POST['email']; } if(isset($_POST['cell'])){ $cell = $_POST['cell']; } if(isset($_POST['eta'])){ $eta = $_POST['eta']; }
Terminando poi con l'invio di tutto.
Sull altro form ho provato il metodo che mi hai gentilmente suggerito tu...tutti e due funzionano ma stranamente in tutti e due mi riportano l'errore sulla stessa riga
[20-Apr-2015 15:34:16 Europe/London] PHP Notice: Undefined variable: messaggio in /home/user/public_html/noindex/miosito/action.php on line 140La riga in questione è una semplice teext area per le note aggiuntive facoltative
Note: $note\n ";
Non si trova nella parte dove riceve la variabile dal post, si trova nella parte dove compone il messaggio con tutte le variabili...
Sai da cosa potrebbe dipendere?
-
Inoltre dal provider mi han detto che per evitare gli errrori che dopo un po disabilitano il servizio mail (), non dovrei usare mail php ma usare smtp.....:?
-
L'errore ti dice cosa non va, è lo stesso del precedente: hai richiamato una variabile non definita. Devi crearla comunque se la utilizzi, o fare un check.
Occhio, scrivere:
$nome="";
if(isset($_POST['nome'])){ $nome = $_POST['nome']; }è come scrivere semplicemente:
$nome = (isset($_POST['nome'])) ? trim($_POST['nome']) : '';Qui definisci una variabile a seconda della condizione iniziale (isset($_POST['nome'])), dopo il ? hai l'assegnazione della variabile, se vera (esiste) gli dai il valore inviato, se no (dopo i : l'assegnazione se è falsa, cioè se non esiste il $_POST relativo) gli da valore "".
L'uso di mail() sembra dare problemi di sicurezza, per questo potrebbero bloccarlo.
Puoi provare una delle classi già in rete per riformulare il tuo invio di mail.
Dai un occhiata qui:
-
Grazie, ma per l'smtp dovrò studiare un po' , ora non saprei proprio come utilizzarle queste classi
Per l'errore invece me lo da sia con il tuo metodo sia con l'altro.
Questa è la riga che causa il problema ed in cui ho usato la funzione da te suggerrita$note = (isset($_POST['note'])) ? trim($_POST['note']) : '';
Sulle altre variabili con il tuo metodo non da più errori, ma su questa textarea continua a dare errore...solo in questa.
-
Vedi questa è l'ultima riga che compone il messaggio. Se la lascio così
Note: $note";
Mi da errore solo sulla riga 140
Se lo scrivo cosìNote: $note ";
Mi da errore sia sulla riga 140 che 141
-
Questo è il codice della action
[PHP]<?php$nome = (isset($_POST['nome'])) ? trim($_POST['nome']) : '';
$cognome = (isset($_POST['cognome'])) ? trim($_POST['cognome']) : '';
$email = (isset($_POST['email'])) ? trim($_POST['email']) : '';
$cell = (isset($_POST['cell'])) ? trim($_POST['cell']) : '';
$eta = (isset($_POST['eta'])) ? trim($_POST['eta']) : '';
$genitore = (isset($_POST['genitore'])) ? trim($_POST['genitore']) : '';
$regione = (isset($_POST['regione'])) ? trim($_POST['regione']) : '';
$citta = (isset($_POST['citta'])) ? trim($_POST['citta']) : '';
$cap = (isset($_POST['cap'])) ? trim($_POST['cap']) : '';
$provincia = (isset($_POST['provincia'])) ? trim($_POST['provincia']) : '';
$sesso = (isset($_POST['sesso'])) ? trim($_POST['sesso']) : '';
$occupazione = (isset($_POST['occupazione'])) ? trim($_POST['occupazione']) : '';
$note = (isset($_POST['note'])) ? trim($_POST['note']) : '';
$to = "miamail.com";
$messaggio.="$nome ha inviato i suoi dati dal sito.
I suoi dati sono:\n
Nome: $nome\n
Cognome: $cognome\n
Email: $email\n
Cellulare: $cell\n
Eta: $eta Genitore: $genitore\n
Regione: $regione Citta: $citta\n
Cap: $cap Provincia: $provincia\n
Sesso: $sesso\n
Occupazione attuale: $occupazione\n
Note: $note
";
if (mail($to,"$cognome $nome",$messaggio,"From: $email\n")) {
echo "Dati inviati correttamente, grazie $nome!";
} else {
echo "Si è verificato un problema. Non preoccuparti, inviaci Nome Cognome Cellulare ed Età a: miamail.com Grazie.";
}?>[/PHP]
-
Se fai un echo di $note che ti dice?
Se elimini il richiamo nel $messaggio ?
-
Se lo elimno dal messaggio da errore alla linea precedente......
-
Il fatto è che da errore dove lascio la chiusura del messaggio ";
Se metto la chiusura in una riga da sola da errore in quella riga
-
Ora ho tolto il punto da
[PHP]$messaggio.="$nome ha inviato
[/PHP]
e non mi da più l'errore...per ora.
Poteva essere quello il problema o andava lasciato?
-
oh madonnina....ora il form funziona, non da errore sul file di log, ma lascia il campo email vuoto e lo sostituisce con il nome.....
-
No ok sistemato il problema.
Ora mi rimane solo il dubbio di quel punto che ho tolto, andava lasciato?
-
Non l'avevo notato, effettivamente era un problema. Nel senso che il punto serve per aggiungere ad una variabile già dichiarata del contenuto. Tu la variabile messaggio non l'avevi dichiarata prima, quindi andava in errore. Giusto toglierlo.
Esempio di utilizzo:
$descrizione = "Orologio ";
$descrizione .= "in oro ";
$descrizione .= "20 carati";echo $descrizione; // Output: Orologio in oro 20 carati
Occhio: se hai aggiornamenti a distanza di tempo così breve, puoi utilizzare la funzione "modifica" dell'ultimo post già inviato per evitare di allungare la discussione e i post presenti con messaggi mono-riga.
Credo hai risolto. Se hai intenzione di lavorare molto con PHP, ripassa le basi (ogni tanto toccherebbe anche a me che ho queste sviste), perché trick come quello del punto sono molto utili (così come considerare che esistono anche altri tipi di concatenazioni).
Buona fortuna!
-
Ahahahahahha sì in effetti ho scritto un po' "alla whatsapp" giustissima osservazione!
Ah bene a sapersi l'utilizzo del punto nelle variabili.
Sì in effetti dovrei studiacchiare un po' le basi.....
Grazie mille gigi per le dritte ed il tempo.
Ciao alla prossima grazie!