Il file php all'interno del form non viene eseguito, se clicco invio invece di venir eseguito il codice php si apre una pagina vuota. Perchè?
Codice HTML:<form method="post" action="contact.php">
...
</form>
Printable View
Il file php all'interno del form non viene eseguito, se clicco invio invece di venir eseguito il codice php si apre una pagina vuota. Perchè?
Codice HTML:<form method="post" action="contact.php">
...
</form>
Perché è il normale comportamento. Quale codice c'è all'interno? Cosa vorresti fare? Cosa dovrebbe fare il codice?
Ciao!
Normalmente si fa così:
Se la pagina con il form non è "contact.php", dovrai inserire il codice php in quest'ultima.Codice PHP:
<?php
if(isset($_POST['inviato'])) //se ho inviato il form
{
echo 'Faccio qualcosa con i dati del form, come'.$_POST['dato1'];
}
?>
<form method="post" action="<?= $_SERVER['PHP_SELF']; ?>">
<input type="text" name="dato1">
<input type="submit" name="inviato">
</form>
Se vuoi inviare una email, potrebbe interessarti l'utilizzo di SendGrid.
Ciao!
No, puoi inserirlo anche in una pagina html con l'action che punta ad una pagina .php contenente lo script php.
L'unica accortezza è che lo script PHP viene interpretato solamente in pagine con estensione .php, salvo modifiche via .htaccess.
Ciao!
Ok, allora il discorso è diverso, avevo capito che avessi inserito il php dentro il form:In tal caso, controlla se arrivano tutti i parametri allo script php (ad esempio puoi farlo facendo var_dump() delle varie variabili provenienti dal form). Ricontrolla anche il restante codice dell'invio email.
Potresti testare la funzionalità di mail() nel tuo account tramite questo semplice script.
Ciao!
Inserisco tutto il codice, magari puoi darmi una mano...
Codice HTML:<div class="card-body">
<?php if ($msg != "") echo "$msg<br><br>"; ?>
<form method="post" action="contact.php" enctype="multipart/form-data">
<div class="form-row mb-3">
<div class="form-group col-12">
<label for="name">Nome:</label>
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text"><i class="fas fa-user"></i></span>
</div>
<input type="text" name="name" class="form-control" id="name" autocomplete="off" required>
<div class="valid-feedback"></div>
<div class="invalid-feedback">
Campo richiesto
</div>
</div>
</div>
<div class="form-group col-12">
<label for="email">Indirizzo e-mail*:</label>
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text"><i class="fas fa-at"></i></span>
</div>
<input type="email" name="email" class="form-control" id="email" autocomplete="off" required>
<div class="valid-feedback"></div>
<div class="invalid-feedback">
Campo richiesto
</div>
</div>
</div>
<div class="form-group col-12">
<label for="subject">Oggetto:</label>
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text"><i class="fas fa-envelope"></i></span>
</div>
<input type="text" name="subject" class="form-control" id="subject">
<div class="valid-feedback"></div>
<div class="invalid-feedback">
Campo richiesto
</div>
</div>
</div>
<div class="form-group col-12">
<label for="content">Messaggio:</label>
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text"><i class="fas fa-comment-alt"></i></span>
</div>
<textarea name="content" class="form-control" id="content" rows="5"></textarea>
<div class="valid-feedback"></div>
<div class="invalid-feedback">
Campo richiesto
</div>
</div>
</div>
<div class="form-check">
<input class="form-check-input" type="checkbox" id="checkbox" required>
<label class="form-check-label" for="checkbox">
Acconsento al trattamento dei mie dati personali. <a class="privacy" href="https://www.privacy.it/normativa/codice-privacy-dlgs-1962003/" target="_blank">Maggiori informazioni</a>
</label>
<div class="valid-feedback"></div>
<div class="invalid-feedback">
Acconsentire al trattamento dei dati personali.
</div>
</div>
</div>
<button type="reset" name="reset" class="btn btn-danger">Pulisci campi</button>
<button type="submit" name="send" class="btn btn-primary">Invia</button>
</form>
</div>
Codice PHP:
<?php
$msg = "";
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
include_once "phpmailer/PHPMailer.php";
include_once "phpmailer/Exception.php";
include_once "phpmailer/SMTP.php";
if (isset($_POST['submit'])) {
$subject = $_POST['subject'];
$email = $_POST['email'];
$message = $_POST['message'];
$name = $_POST['name'];
$mail = new PHPMailer();
//if we want to send via SMTP
$mail->Host = "smtp.tiscali.it";
$mail->isSMTP();
$mail->SMTPAuth = true;
$mail->Username = "xxxx@tiscali.it";
$mail->Password = "xxxxx";
$mail->SMTPSecure = "ssl"; //TLS
$mail->Port = 465; //587
$mail->addAddress('xxxx@tiscali.it');
$mail->setFrom($email);
$mail->Subject = $subject;
$mail->isHTML(true);
$mail->Body = $message;
if ($mail->send())
$msg = "Email inviata con successo!";
else
$msg = "Si è verificato un errore. Riprova più tardi.";
}
?>
Scusami ancora ma perchè se inserisco il tutto, compreso il form, in una pagina php funziona e con l'altro modo no?
Ho provato senza l'SMTP anche con la pagina html ma non funziona.Codice PHP:
<?php
$msg = "";
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
include_once "phpmailer/PHPMailer.php";
include_once "phpmailer/Exception.php";
include_once "phpmailer/SMTP.php";
if (isset($_POST['submit'])) {
$subject = $_POST['subject'];
$email = $_POST['email'];
$message = $_POST['message'];
$mail = new PHPMailer();
//$mail->Host = "";
//$mail->isSMTP();
//$mail->SMTPAuth = true;
//$mail->Username = "";
//$mail->Password = "";
//$mail->SMTPSecure = "ssl";
//$mail->Port = 465;
$mail->addAddress('xxxx@tiscali.it');
$mail->setFrom($email);
$mail->Subject = $subject;
$mail->isHTML(true);
$mail->Body = $message;
if ($mail->send())
$msg = "Your email has been sent, thank you!";
else
$msg = "Please try again!";
}
?>
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Contact Form</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
</head>
<body>
<div class="container" style="margin-top: 100px">
<div class="row justify-content-center">
<div class="col-md-6 col-md-offset-3" align="center">
<br><br>
<?php if ($msg != "") echo "$msg<br><br>"; ?>
<form method="post" action="sendemail.php">
<input class="form-control" name="subject" placeholder="Subject..."><br>
<input class="form-control" name="email" type="email" placeholder="Email..."><br>
<textarea placeholder="Message..." class="form-control" name="message"></textarea><br>
<input class="btn btn-primary" name="submit" type="submit" value="Send Email">
</form>
</div>
</div>
</div>
</body>
</html>
Codice PHP:
<?php
$msg = "";
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
include_once "phpmailer/PHPMailer.php";
include_once "phpmailer/Exception.php";
include_once "phpmailer/SMTP.php";
if (isset($_POST['submit'])) {
$subject = $_POST['subject'];
$email = $_POST['email'];
$message = $_POST['message'];
$name = $_POST['name'];
$mail = new PHPMailer();
$mail->Host = "smtp.tiscali.it";
//$mail->isSMTP();
$mail->SMTPAuth = true;
$mail->Username = "xxxx@tiscali.it";
$mail->Password = "xxxxx";
$mail->SMTPSecure = "ssl";
$mail->Port = 465;
$mail->addAddress('xxxx@tiscali.it');
$mail->setFrom($email);
$mail->Subject = $subject;
$mail->isHTML(true);
$mail->Body = $message;
if ($mail->send())
$msg = "Email inviata con successo!";
else
$msg = "Si è verificato un errore. Riprova più tardi.";
}
?>
Non mi sembra ci siano i commenti in smtp. Utilizza lo stesso codice che funziona assieme al form. Fai anche un po' di debug come ti avevo detto, con var_dump o echo o simili.
Ciao!
Allora ho seguito il tuo consiglio e pare abbia funzionato, l'unico problema è che all'esecuzione della pagina php si apre una pagina vuota contenente l'indirizzo della pagina php eseguita. Come faccio ad evitare ciò? Grazie.
Codice HTML:<div class="card-body">
<h6 class="card-title text-center">
<?php if ($msg != "") echo "$msg"; ?>
</h6>
<form method="post" action="contact.php">
<div class="form-row mb-3">
<div class="form-group col-12">
<label for="name">Nome:</label>
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text"><i class="fas fa-user"></i></span>
</div>
<input type="text" name="name" class="form-control" id="name" autocomplete="off" required>
<div class="valid-feedback"></div>
<div class="invalid-feedback">
Campo richiesto
</div>
</div>
</div>
<div class="form-group col-12">
<label for="email">Indirizzo E-mail:</label>
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text"><i class="fas fa-at"></i></span>
</div>
<input type="email" name="email" class="form-control" id="email" autocomplete="off" required>
<div class="valid-feedback"></div>
<div class="invalid-feedback">
Campo richiesto
</div>
</div>
</div>
<div class="form-group col-12">
<label for="subject">Oggetto:</label>
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text"><i class="fas fa-envelope"></i></span>
</div>
<input type="text" name="subject" class="form-control" id="subject">
<div class="valid-feedback"></div>
<div class="invalid-feedback">
Campo richiesto
</div>
</div>
</div>
<div class="form-group col-12">
<label for="message">Messaggio:</label>
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text"><i class="fas fa-comment-alt"></i></span>
</div>
<textarea name="message" class="form-control" id="message" rows="5"></textarea>
<div class="valid-feedback"></div>
<div class="invalid-feedback">
Campo richiesto
</div>
</div>
</div>
<div class="form-check">
<input class="form-check-input" type="checkbox" id="checkbox" required>
<label class="form-check-label" for="checkbox">
Acconsento al trattamento dei mie dati personali. <a class="privacy" href="https://www.privacy.it/normativa/codice-privacy-dlgs-1962003/" target="_blank">Maggiori informazioni</a>
</label>
<div class="valid-feedback"></div>
<div class="invalid-feedback">
Acconsentire al trattamento dei dati personali.
</div>
</div>
</div>
<button type="reset" name="reset" class="btn btn-danger">Pulisci campi</button>
<button type="submit" name="submit" class="btn btn-primary">Invia</button>
</form>
</div>
Codice PHP:
<?php
$msg = "";
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
include_once "phpmailer/PHPMailer.php";
include_once "phpmailer/Exception.php";
include_once "phpmailer/SMTP.php";
if (isset($_POST['submit'])) {
$subject = $_POST['subject'];
$email = $_POST['email'];
$message = $_POST['message'];
$name = $_POST['name'];
$mail = new PHPMailer();
$mail->addAddress('davidemarca@tiscali.it');
$mail->setFrom($email);
$mail->Subject = $subject;
$mail->isHTML(true);
$mail->Body = $message;
if ($mail->send())
$msg = "<p style='color: green; font-style: italic; font-weight: bold;'>Email inviata con successo!</p>";
else
$msg = "<p style='color: red; font-style: italic; font-weight: bold;'>Si è verificato un errore. Riprova più tardi.</p>";
}
?>
Cosa vorresti venisse visualizzato? È normale che si visualizza una nuova pagina perché l'action del form è impostato in quel modo. Qualsiasi cosa vorresti far visualizzare, deve essere o nella pagina php oppure puoi fare un redirect php ad un'altra pagina.
Ciao!
Per fare questa cosa "alla lettera" dovresti inviare una richiesta tramite javascript. Non è una cosa banale ma se conosci un po' javascript puoi cavartela, con fetch.
Altrimenti, la cosa più semplice è fare come ti avevo indicato nella quarta risposta: la pagina verrà ricaricata ma non apparirà una nuova pagina vuota.
Inoltre tramite PHP potrai scrivere un messaggio di corretto invio dell'email.
Ciao!