- Home
- Categorie
- Coding e Sistemistica
- PHP
- Form contatti in Php
-
Ciao a tutti,
sei stato molto chiaro Portapipe. Mi sai indicare che differenza c'è tra recuperare le variabili tra $_POST e $_REQUEST?
Ho seguito i tuoi consigli, inizialmente su xoom andava, ora non mi arriva più ne con $_POST ne $_REQUEST. Se lo stesso formmail lo carico su altervista funziona cia con $_POST che con $_REQUEST.Grazie
-
la risposta è semplice:
POST fa parte delle REQUEST, così come GET e i COOKIE stessi.
Quindi con REQUEST richiami indistintamente la variabile che ha quel nome.
Quindi se salvi un nome in un POST lo puoi recuperare con POST e REQUEST, così come l'id di un prodotto nella URL lo puoi recuperare con GET e REQUEST.
Se però hai un POST con una variabile di nome "frase" e un COOKIE di nome "frase" REQUEST da problemi (non ricordo se ti prende il primo che trova, tutti e due o da errore) però si cerca di specificare sempre il metodo di recupero.
REQUEST è sconsigliato, soprattutto se lo impari come metodo standard.
Usa per ogni cosa il suo corrispettivo e non avrai mai confusione!Per il problema di xoom non saprei.
Magari hai sbagliato i parametri del form, oppure hai scritto male i nomi delle variabili POST... controlla sempre ogni parola, ti basta una virgola per vedere un sito ultraipermegacomplesso, costosissimo e totalmente funzionante convertirsi ad una semplice pagina bianca.
All'inizio ti pigliano dei colpi assurdi ma prendendo padronanza sempre più con il linguaggio capisci subito dove può essere l'errore e come risolverlo (non è sempre così ma almeno sei consapevole che c'è una virgola di troppo da scovare).
-
Molto chairo. Ti posto il mio file php, riesci a darmi qualche consiglio...
<?
$nome=$_POST[nome];
$testo=$_POST[testo];
$email=$_POST[mail];
$dest="xxxx";
mail($dest,$nome,$testo,$email);
print ("E-Mail inviata con successo.")
?>Alcuni mi dicono che non va bene, ma allora perchè su altervista funziona? Cosa c'è di sbagliato?
Grazie
-
la versione corretta è la seguente:
[PHP]
<?php
$dest=$_POST['email_destinatario'];
$oggetto=$_POST['oggetto_email'];
$email=$_POST['mail'];
if (mail($dest,$oggetto,$email))
print ("E-Mail inviata con successo.");
else
print ("Errore nell'invio");
?>
[/PHP]
-
Alcuni server non leggono correttamente il <? per l'apertura di php.
Per sicurezza è sempre meglio mettere <?php , così sei sicuro che almeno quello non ti da errore.
Per quanto riguarda il recupero delle variabili, emulman ha scritto bene.
Quando vuoi recuperare variabili, il nome va inserito tra apici singoli.
[PHP]<?
$nome=$_POST['nome'];
$testo=$_POST['testo'];
$email=$_POST['mail'];
$dest="xxxx";
mail($dest,$nome,$testo,$email);
print ("E-Mail inviata con successo.");
?>[/PHP]
In questo caso invia il messaggio a video anche se l'email non è stata inviata, ma basta che fai un controllo appena la metti online e sei tranquillo, anche se è sempre meglio far fare dei controlli ad ogni funzione cruciale.
Fammi sapere!
-
Ho messo: <?php e recupero le variabili tra singoli apici. Con Altervista funziona correttamente come prima. Con Xoom non funziona, ho provato anche su altra mail, nello spam, ma niente. La cosa stranissima è che prima funzionava.
Vi è mai capitato qualcosa del genere?
Grazie per disponibilità
-
Che ti posso dire... può essere un aggiornamento del software o cose del genere ma dubito che uno script base così crei problemi.
Prova a postare tutto il codice.
-
Html:
<form action="./mail.php" method="POST">
<table border="0">
<tr>
<td>Nome</td>
<td><input type="text" name="Nome" size="30"></td>
</tr>
<tr>
<td>Età</td>
<td><input type="text" name="Anni" size="5"></td>
</tr>
<tr>
<td>Città</td>
<td><input type="text" name="City" size="30"></td>
</tr>
<tr>
<td>Indirizzo</td>
<td><input type="text" name="Address" size="30"></td>
</tr>
<tr>
<td valign="top">Note</td>
<td><textarea rows="6" name="Note" cols="50"></textarea></td>
</tr>
<tr>
<td colspan="2" valign="bottom" align="center" height="30">
<input type="submit" value="Invia">
<input type="reset" value="Cancella"></td>
</tr>
</table>
</form>php:
<?php
$to = "[email protected]";
$subject = "Modulo proveniente dal sito";
$body = "Contenuto del modulo:\n\n";
$body .= "Nome: " . trim(stripslashes($_POST['Nome'])) . "\n";
$body .= "Età: " . trim(stripslashes($_POST['Anni'])) . "\n";
$body .= "Città: " . trim(stripslashes($_POST['City'])) . "\n";
$body .= "Indirizzo: " . trim(stripslashes($_POST['Indirizzo'])) . "\n";
$body .= "Note: " . trim(stripslashes($_POST['Note'])) . "\n";
$headers = "From: Modulo utenti[email protected]";
if(@mail($to, $subject, $body, $headers)) { // SE L'INOLTRO È ANDATO A BUON FINE...
echo "La mail è stata inoltrata con successo.";
} else {// ALTRIMENTI...
echo "Si sono verificati dei problemi nell'invio della mail.";
}
?>Se uso questo mi restitusce l'errore... c'è modo di avere dettagli sull'errore?
-
Per fare qualsiasi tipo di test, basta che crei due file semplicissimi.
Nell'html crei un form con un campo che avrà come name, per esempio, "nome", il method POST e alla fine del form un pulsante submit. Nella pagina php una semplice riga che stampa a video il nome immesso nel form con:
<?php echo $_POST['nome']; ?>
Se così funziona vuol dire che sbagli qualcosa sul codice.Ma poi dici che c'è un errore... cosa dice? Qual'è? Gli errori sono la traccia da seguire. Difatti se nel codice ci sono delle chiocciole @ davanti alle funzioni. La @ serve per non stampare a video gli errori, quindi per capire che succede vanno tolte.
-
Test fatti:
- Html con solo il campo nome: funzionante.
- Se tolgo la @ continua a darmi la stringa che metto nell'echo.
- Se non metto la stringa echo mi da pagina bianca, ma email non arriva.
- Se il formail (caricato su xoom) lo faccio puntare al php su xoom non va.
- Se il formail (caricato su xoom) lo faccio puntare al php caricato su altervista la mail mi arriva, (file php identici).
Ci possono essere problemi se il file php lo faccio girare su altervista e lascio tutto il resto su xoom?
Anche se vorrei risolvere sto problema fastidioso.
-
Ma poi dici che c'è un errore... cosa dice? Qual'è?
Potresti fare così ma non riesco a capire:- Html con solo il campo nome: funzionante.
Mica è quello che ti ho detto di fare io. Rileggi bene e poi dimmi... rispondi a tutto però!
- Html con solo il campo nome: funzionante.
-
Come errore mi appare quello che metto io nella stringa echo, niente di più (nel caso sopra: Si sono verificati dei problemi nell'invio della mail.)
Se tolgo la stringa echo per l'errore mi restituisce pagina bianca.
-
Come errore mi appare quello che metto io nella stringa echo, niente di più (nel caso sopra: Si sono verificati dei problemi nell'invio della mail.)
Se tolgo la stringa echo per l'errore mi restituisce pagina bianca.Guarda che echo equivale a "Scrivimi la stringa a video" quindi se scrive quello che hai scritto è corretto.
La funzione mail la si vede dopo che abbiamo stabilito che funziona tutto.Se l'errore che dici tu è quello che scrive quello che invii dal form a video allora php funziona correttamente.
-
Vuoi dire che: php funziona quindi il problema è di xoom?
Ci possono essere problemi se il file php lo faccio girare su altervista e lascio tutto il resto su xoom?
Aspettando che che xoom mi dia una risposta più decente...
-
Ciao a tutti...ciao portapipe come va?
avrei bisogno di rendere obbligatori i campi $ragionesociale, $email e $ info
Si potrebbe avere la soluzione integrata in questo codice?:)
Innanzitutto grazie
<?php
$ragionesociale=$_POST['txtRagioneSociale'];
$email=$_POST['txtEmail'];
$info=$_POST['txtInfo'];
$tutticampi='Ragione Sociale: '.$ragionesociale.' , Email: '.$email.' , Info: '.$info;
mail("nomedella@mail","Richiesta Di Informazioni", $tutticampi);
echo 'E-mail inviata con successo!!';
?>
-
potresti scrivere così
[PHP]
<?php
$ragionesociale=$_POST['txtRagioneSociale'];
$email=$_POST['txtEmail'];
$info=$_POST['txtInfo'];
if ($ragionesociale) {
if ($info) {
if ($email) {
//questo funziona solo con PHP >= 5.2
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
$tutticampi='Ragione Sociale: '.$ragionesociale.' , Email: '.$email.' , Info: '.$info;
mail("nomedella@mail","Richiesta Di Informazioni", $tutticampi);
echo 'E-mail inviata con successo!!';
} else
echo "email non corretta!";
} else
"non hai inserito la email!";
} else
"non hai inserito le info!";
} else
"non hai inserito la ragione sociale!";
?>
[/PHP]
-
Grazie mille Emulman....adesso provo subito:)
-
Ho provato ma non funziona...
evidentemente non ho una versione di php 5.2 :bho:
Infatti quando provo , mi esce solo una schermata bianca senza nessuna esecuzione, nemmeno una stringa di errore...nulla
Come potrei fare per le versioni precedenti?grazie in anticipo
-
Allora, ci sono molti modi per validare un form.
I migliori sono quelli scritti in javascript e i super belli in jQuery (seguendo le indicazioni riesci a creare cose molto belle con poca conoscenza).
Il sistema invece più semplice a mio avviso è fare un controllo sui campi.
Se il campo è uguale a "" (cioè nessun carattere) allora rimanda alla pagina del form con un messaggio.
Nella pagina form scrivi a video il messaggio mentre nella pagina invia metti il controllo:
[PHP]
//lo inserisci dove vuoi che compaia il messaggio
<?php
if($_GET['msg']){
echo $_GET['msg'];
}
?>
[/PHP]
In questo modo prenderà il messaggio dalla url solo se questo esiste.
Nella pagina di invio invece metti per ogni campo:
[PHP]
<?php
// qui dice: SE il campo txtRagioneSociale è uguale a nessun carattere
if($_POST['txtRagioneSociale']==""){
//allora reindirizzami alla pagina form passando la variabile msg tramite GET con il valore: Riempire tutti i campi obbligatori!
header("location:form.php?msg=Riempire tutti i campi obbligatori!");
}
?>
[/PHP]
Semplice no? Sono dei semplici controlli.
Se il campo è vuoto mi reindirizzi. Non c'è bisogno di specificare altro (SE blabla ALTRIMENTI blabla) perché a noi interessa che non sia vuoto. SE è vuoto allora rimandami alla pagina altrimenti continua con lo script.
Fai così per tutti i campi.
Se vuoi puoi personalizzare tutti i messaggi oppure ne fai uno unico per tutti, in questo caso allora fai un controllo esteso per risparmiare tempo e spazio:
[PHP]
<?php
// qui dice: SE il campo txtRagioneSociale è uguale a nessun carattere OPPURE (composto dalle due barre verticali) email OPPURE info sono uguali a nessun carattere
if($_POST['txtRagioneSociale']=="" || $_POST['txtEmail']=="" || $_POST['txtInfo']==""){
//allora reindirizzami alla pagina form passando la variabile msg tramite GET con il valore: Riempire tutti i campi obbligatori!
header("location:form.php?msg=Riempire tutti i campi obbligatori!");
}
?>
[/PHP]Non è il sistema migliore ma è intuitivo e semplice per chi è alle prime armi!
-
<?php
// qui dice: SE il campo txtRagioneSociale è uguale a nessun carattere OPPURE (composto dalle due barre verticali) email OPPURE info sono uguali a nessun carattere
if($_POST['txtRagioneSociale']=="" || $_POST['txtEmail']=="" || $_POST['txtInfo']==""){
//allora reindirizzami alla pagina form passando la variabile msg tramite GET con il valore: Riempire tutti i campi obbligatori!
header("location:form.php?msg=Riempire tutti i campi obbligatori!");
}
?>Direi che questo può andare bene.
Come viene integrato usando questo script?<?php
$ragionesociale=$_POST['txtRagioneSociale'];
$email=$_POST['txtEmail'];
$info=$_POST['txtInfo'];
$tutticampi='Ragione Sociale: '.$ragionesociale.' , Email: '.$email.' , Info: '.$info;
mail("[email protected]","Richiesta Di Informazioni", $tutticampi);
echo 'E-mail inviata con successo!!';grazie...