[PhP] Semplice contact form

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Scrivi risposta
Avatar utente
alecive
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1886
Iscrizione: venerdì 12 dicembre 2008, 14:09
Desktop: gnome-shell o unity
Distribuzione: Ubuntu 12.04
Località: Sestri Levante
Contatti:

[PhP] Semplice contact form

Messaggio da alecive »

Ciao a tutti,

sto per la prima volta barcamenandomi nella creazione di siti. Per ora (più o meno) tutto bene, però sto riscontrando un po' di problemi nel momento in cui devo creare la contact form del mio sito.

Il codice HTML è questo:

Codice: Seleziona tutto

<form method="post" action="index.php">
    <div style="display:block;" align="left">
        <div style="display:block-inline; float:left; width: 48%;">
            <label style="display:block;">Name</label>
            <input name="name" placeholder="Type Here" required>
            <label style="display:block;">Email</label>
            <input name="email" type="email" placeholder="Type Here">
            <label style="display:block;">Subject</label>
            <input name="subject" placeholder="Type Here"></input>
            <label style="display:block;">Message</label>
            <textarea name="message" placeholder="Type Here"></textarea>
            <label style="display:block;">*What is 2+2? (Anti-spam)</label>
            <input name="human" placeholder="Type Here">
            <input class="button" id="submit" name="submit" type="submit" value="SEND">
</form>
Mentre il mio index.php è questo:

Codice: Seleziona tutto

<?php
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
$from = 'From:miosito.com';
$to = 'miamail@miamail.com';
$subject = $_POST['subject'];
$human = $_POST['human'];

$body = "From: $name\nE-Mail: $email\nSubject: $subject\nMessage:\n$message";

function IsInjected($str) {
    $injections = array('(\n+)','(\r+)','(\t+)','(%0A+)','(%0D+)','(%08+)','(%09+)');
    $inject = join('|', $injections);
    $inject = "/$inject/i";
    if(preg_match($inject,$str)) {
      return true;
    }
    else {
      return false;
    }
}

if(IsInjected($email)) {
    echo "Bad email value! It seems you're an injecter bot";
    exit;
}
else {
	if ($_POST['submit']) {
	  if ($name != '' && $email != '') {
	    if ($human == '4') {				 
	      if (mail ($to, $subject, $body, $from)) { 
		   		echo '<p>Your message has been sent. Thank you!</p>';
				}
				else { 
		   		echo '<p>Something went wrong, go back and try again.</p>'; 
				} 
			}
			else if ($_POST['submit'] && $human != '4') {
		 		echo 'You answered the anti-spam question incorrectly!';
			}
	  }
	  else {
	    echo '<p>You need to fill in all required fields.</p>';
	  }
	}
}
?>
Ora, a parte tutte le cretinate che ci ho messo dentro di sicuro (e che voi vedrete facilissimamente), la mia domanda era: come diavolo faccio a fare in modo che quegli "echo" vengano scritti nella stessa pagina in cui c'è il form senza essere rediretti ad una nuova pagina?
E' tutta la mattina che cerco su internet, ma vuoi la mia scarsa conoscenza dell'argomento, vuoi la fumosità delle risposte che leggo, l'unica cosa sicura è che ci sto diventando matto!!!

Grazie in anticipo per qualunque risposta utile alla causa :)
La follia è come la gravità. Basta una piccola spinta.                              AwOken Iconset - Rilasciata la  2.4!! (c'è anche il ppa [lucid-maverick-natty-oneiric-precise]!)
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: [PhP] Semplice contact form

Messaggio da Zoff »

Solo con PHP non puoi. Al massimo puoi ricaricare la stessa pagina.

Per prendere dei valori da server senza ricaricare la pagina devi usare ajax.
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Avatar utente
DaNieL85
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 300
Iscrizione: sabato 2 febbraio 2008, 12:18

Re: [PhP] Semplice contact form

Messaggio da DaNieL85 »

Se ho capito bene vuoi la validazione del form nella stessa pagina.
Una roba del tipo (molto terra-terra eh):

Codice: Seleziona tutto

<?php
$mail_sent = false;
if(isset($_POST['submit']))
{
    $name = $_POST['name'];
    $email = $_POST['email'];
    $message = $_POST['message'];
    $from = 'From:miosito.com';
    $to = 'miamail@miamail.com';
    $subject = $_POST['subject'];
    $human = $_POST['human'];
    
    $body = "From: $name\nE-Mail: $email\nSubject: $subject\nMessage:\n$message";
    
    function IsInjected($str) {
        $injections = array('(\n+)','(\r+)','(\t+)','(%0A+)','(%0D+)','(%08+)','(%09+)');
        $inject = join('|', $injections);
        $inject = "/$inject/i";
        if(preg_match($inject,$str)) {
          return true;
        }
        else {
          return false;
        }
    }
    
    if(IsInjected($email)) {
        echo "Bad email value! It seems you're an injecter bot";
        exit;
    }
    else {
       if ($_POST['submit']) {
         if ($name != '' && $email != '') {
           if ($human == '4') {             
             if (mail ($to, $subject, $body, $from)) { 
                   echo '<p>Your message has been sent. Thank you!</p>';
                   $mail_sent = true;
                }
                else { 
                   echo '<p>Something went wrong, go back and try again.</p>'; 
                } 
             }
             else if ($_POST['submit'] && $human != '4') {
                 echo 'You answered the anti-spam question incorrectly!';
             }
         }
         else {
           echo '<p>You need to fill in all required fields.</p>';
         }
       }
    }
}
else
{
    $name = '';
    $email = '';
    $message = '';
    $subject = '';
}



if($mail_sent === false)
{
?>
<form method="post" action="index.php">
    <div style="display:block;" align="left">
        <div style="display:block-inline; float:left; width: 48%;">
            <label style="display:block;">Name</label>
            <input name="name" placeholder="Type Here" required value="<?php echo $name; ?>" />
            <label style="display:block;">Email</label>
            <input name="email" type="email" placeholder="Type Here" value="<?php echo $email; ?>" />
            <label style="display:block;">Subject</label>
            <input name="subject" placeholder="Type Here" value="<?php echo $subject; ?>" />
            <label style="display:block;">Message</label>
            <textarea name="message" placeholder="Type Here"><?php echo $message; ?></textarea>
            <label style="display:block;">*What is 2+2? (Anti-spam)</label>
            <input name="human" placeholder="Type Here">
            <input class="button" id="submit" name="submit" type="submit" value="SEND">
        </div>
    </div>
</form>
<?php
}
?>
In un'unica pagina php dovrebbe fare al caso tuo.. logicamente la action del form deve puntare alla stessa pagina dove il form è presente
You HAVE to assume your visitor is a maniac serial killer, out to destroy your application. And you have to prevent it.
Avatar utente
alecive
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1886
Iscrizione: venerdì 12 dicembre 2008, 14:09
Desktop: gnome-shell o unity
Distribuzione: Ubuntu 12.04
Località: Sestri Levante
Contatti:

Re: [PhP] Semplice contact form

Messaggio da alecive »

Perdona l'ignoranza, ma quindi io questa cosa devo metterla direttamente nell'html giusto?
Anzi ad esser precisi, di quel codice non capisco due cose:
  • dove devo metterlo? Il mio problema è che ho fatto il mio sito in modalità single page, quindi è tutto in un'unica pagina html. Di conseguenza basta che quello che hai postato lo metto nella <div></div> relativa alla contact form?
  • Se ho capito bene, praticamente quel codice fa in modo che se la mail non è stata inviata, allora posta la contact form, altrimenti posta il messaggio di ringraziamento. Giusto?
Relativo al punto 1, vuoi mica che ti passi l'html? In realtà lo sto caricando su altervista giusto per fare delle prove, quindi faccio prima a postarti il link: alecive.altervista.org (ogni parere relativo al sito stesso è straben accetto :) ).
La follia è come la gravità. Basta una piccola spinta.                              AwOken Iconset - Rilasciata la  2.4!! (c'è anche il ppa [lucid-maverick-natty-oneiric-precise]!)
Avatar utente
pietroalbini
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 501
Iscrizione: lunedì 2 gennaio 2012, 12:37
Desktop: Unity
Distribuzione: Ubuntu 14.04 64bit
Località: Rimini
Contatti:

Re: [PhP] Semplice contact form

Messaggio da pietroalbini »

alecive ha scritto:
  • dove devo metterlo? Il mio problema è che ho fatto il mio sito in modalità single page, quindi è tutto in un'unica pagina html. Di conseguenza basta che quello che hai postato lo metto nella <div></div> relativa alla contact form?
Il codice va messo nel tag prima del <form>.
alecive ha scritto:
  • Se ho capito bene, praticamente quel codice fa in modo che se la mail non è stata inviata, allora posta la contact form, altrimenti posta il messaggio di ringraziamento. Giusto?
Esatto

Comunque il file deve essere .php, non .html.
Pietro Albini
Launchpad: pietroalbini - Irc: pietroalbini su irc.freenode.net - Wiki: pietroalbini
Ubuntu-it Member - Ubuntu Member - Gruppo Sistemisti - Amministratore di Chiedi - Gruppo Web - Social Media
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: [PhP] Semplice contact form

Messaggio da Zoff »

Dipende dalla impostazioni del server, ma in genere è vero.
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Avatar utente
pietroalbini
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 501
Iscrizione: lunedì 2 gennaio 2012, 12:37
Desktop: Unity
Distribuzione: Ubuntu 14.04 64bit
Località: Rimini
Contatti:

Re: [PhP] Semplice contact form

Messaggio da pietroalbini »

Su altervista è così
Pietro Albini
Launchpad: pietroalbini - Irc: pietroalbini su irc.freenode.net - Wiki: pietroalbini
Ubuntu-it Member - Ubuntu Member - Gruppo Sistemisti - Amministratore di Chiedi - Gruppo Web - Social Media
Avatar utente
Zoff
Moderatore Globale
Moderatore Globale
Messaggi: 33338
Iscrizione: mercoledì 10 ottobre 2007, 22:36

Re: [PhP] Semplice contact form

Messaggio da Zoff »

Se metti questo nel .htaccess no:

Codice: Seleziona tutto

AddType application/x-httpd-php .html
O anche questo per avere php 5.3

Codice: Seleziona tutto

AddType av-php53 .html
Prima di aprire una discussione leggi le Guide, poi vedi se c'è un HowTo nel Wiki e fai una ricerca nel Forum!
Applica semplicemente il [Risolto]! Prova: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=548821
Vuoi qualcosa di piu' dal forum? Prova i miei script: http://forum.ubuntu-it.org/viewtopic.php?f=70&t=597066
Avatar utente
alecive
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1886
Iscrizione: venerdì 12 dicembre 2008, 14:09
Desktop: gnome-shell o unity
Distribuzione: Ubuntu 12.04
Località: Sestri Levante
Contatti:

Re: [PhP] Semplice contact form

Messaggio da alecive »

Il mio problema è che avevo visto questo tutorial -> http://www.tangledindesign.com/blog/how ... 3-and-php/

Che portava alla creazione di questo form -> http://www.tangledindesign.com/blog/demos/contact-form/

Se lo provate, potete vedere che c'è il messaggio di thankyou che appare senza modificare il layout della pagina, mentre se lo fate sul mi osito venite reindirizzati ad una nuova pagina in cui scrive il messaggio. E non capisco come sia possibile che lui ci sia riuscito ed io (che ho seguito il tutorial alla lettera) no! :(

Comunque ora appena ho tempo mi imparo un po' di ajax :)
La follia è come la gravità. Basta una piccola spinta.                              AwOken Iconset - Rilasciata la  2.4!! (c'è anche il ppa [lucid-maverick-natty-oneiric-precise]!)
AlexDiste
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 2299
Iscrizione: martedì 18 agosto 2009, 9:25

Re: [PhP] Semplice contact form

Messaggio da AlexDiste »

Ajax è semplicemente javascript con supporto al metodo (o funzione) xmlhttprequest che specifica di mandare ad una determinata pagina web delle variabili e la modalità. Poiu scegliere get ossia i dati sono passati in chiaro tramite barra indirizzi

esempio pagina.php?variabile1=valore1&variabile2=valore2&variabileN=valoreN

o tramite post in cui la stessa stringa di variabile e valori concatenate da & vengono codificate e poi spedite alla pagina
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 8 ospiti