我想知道如何在用户提交消息时在同一页面上添加错误或成功消息,并且所有字段都正确无误。
PS:我正在使用localhost并且对PHP知之甚少,所以请像我一样解释5.谢谢
<?php
$errorMSG = "";
// NAME
if (empty($_POST["name"])) {
$errorMSG = "Por favor preencha o seu nome ";
} else {
$name = $_POST["name"];
}
// EMAIL
if (empty($_POST["email"])) {
$errorMSG .= "Por favor preencha com o seu email ";
} else {
$email = $_POST["email"];
}
// MSG SUBJECT
if (empty($_POST["msg_subject"])) {
$errorMSG .= "Por favor escreva um assunto da mensagem";
} else {
$msg_subject = $_POST["msg_subject"];
}
// MESSAGE
if (empty($_POST["message"])) {
$errorMSG .= "Por favor escreva uma mensagem ";
} else {
$message = $_POST["message"];
}
//email here
$EmailTo = "email@hotmail.com";
$Subject = "New Message Received";
//email body text
$Body = "";
$Body .= "Nome: ";
$Body .= $name;
$Body .= "\n";
$Body .= "Email: ";
$Body .= $email;
$Body .= "\n";
$Body .= "Assunto: ";
$Body .= $msg_subject;
$Body .= "\n";
$Body .= "Mensagem: ";
$Body .= $message;
$Body .= "\n";
// send email
$success = mail($EmailTo, $Subject, $Body, "De:".$email);
//success message
if ($success && $errorMSG == ""){
echo "sucesso";
}else{
if($errorMSG == ""){
echo "Algo correu mal :(";
} else {
echo $errorMSG;
}
}
?>
<!DOCTYPE html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Title</title>
<!-- css -->
<link href="css/contactform.css" rel="stylesheet" />
<link href="css/bootstrap.min.css" rel="stylesheet" />
<link href="css/style.css" rel="stylesheet" />
</head>
<body>
<!-- Start Contact Form -->
<form role="form" id="contactForm" class="contact-form" data-toggle="validator" class="shake">
<div class="form-group">
<div class="controls">
<input type="text" id="name" class="form-control" placeholder="Nome" required data-error="Por favor escreva o seu nome">
<div class="help-block with-errors"></div>
</div>
</div>
<div class="form-group">
<div class="controls">
<input type="email" class="email form-control" id="email" placeholder="Email" required data-error="Por favor escreva o seu email">
<div class="help-block with-errors"></div>
</div>
</div>
<div class="form-group">
<div class="controls">
<input type="text" id="msg_subject" class="form-control" placeholder="Assunto" required data-error="Por favor escreva o assunto da mensagem">
<div class="help-block with-errors"></div>
</div>
</div>
<div class="form-group">
<div class="controls">
<textarea id="message" rows="7" placeholder="Mensagem" class="form-control" required data-error="Escreva a sua mensagem"></textarea>
<div class="help-block with-errors"></div>
</div>
</div>
<button type="submit" id="submit" class="btn btn-effect"><i class="fa fa-check"></i>Enviar</button>
<div id="msgSubmit" class="h3 text-center hidden"></div>
<div class="clearfix"></div>
</form>
另外,我配置了sendmail&#34; sendmail.ini&#34;和&#34; php.ini&#34;文件,以测试我的本地服务器上的电子邮件接收,但不断收到此错误:Warning: mail(): "sendmail_from" not set in php.ini or custom "From:" header missing in
什么&#39; custom "From:"?
答案 0 :(得分:0)
您需要以这种方式向表单添加操作,方法并正确提交..尝试此
<!DOCTYPE HTML>
<html>
<head>
<style>
.error {color: #FF0000;}
</style>
</head>
<body>
<?php
// define variables and set to empty values
$nameErr = $emailErr = "";
$name = $email = "";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (empty($_POST["name"])) {
$nameErr = "Name is required";
} else {
$name = test_input($_POST["name"]);
// check if name only contains letters and whitespace
if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
$nameErr = "Only letters and white space allowed";
}
}
if (empty($_POST["email"])) {
$emailErr = "Email is required";
} else {
$email = test_input($_POST["email"]);
// check if e-mail address is well-formed
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$emailErr = "Invalid email format";
}
}
}
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>
<p><span class="error">* required field.</span></p>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
Name: <input type="text" name="name" value="<?php echo $name;?>">
<span class="error">* <?php echo $nameErr;?></span>
<br><br>
E-mail: <input type="text" name="email" value="<?php echo $email;?>">
<span class="error">* <?php echo $emailErr;?></span>
<br><br>
<input type="submit" name="submit" value="Submit">
</form>
<?php
echo "<h2>Your Input:</h2>";
echo $name;
echo "<br>";
echo $email;
echo "<br>";
?>
</body>
</html>
答案 1 :(得分:0)
在我进一步解释之前,我必须指出你没有在表单中定义或指定action属性。你的PHP代码以书面形式无法正常工作,首先你必须添加动作和方法属性来形成这样的元素
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method="post">
//input element here
</form>
action属性指向脚本的位置(在你的情况下为PHP文件),它将处理用户提交的表单数据,但在你的情况下,你希望php本身处理表单数据,$ _SERVER [“ PHP_SELF“]包含当前的php文件位置。出于安全原因,php超全局“$ _SERVER”包含在“htmlspecialchars”函数中,它可以逃避空间字符。其次,因为您将表单提交到相同的PHP脚本,您必须检查表单是否已提交,而不是当用户使用$ _SERVER [“REQUEST_METHOD”]访问php页面时。如果REQUEST_METHOD是POST,则表单已提交,例如:
if ($_SERVER["REQUEST_METHOD"] == "POST") {
//put your validation code here
}
为了更清楚,这就是你的PHP代码假设的样子:
<?php
//global variables here
$errorMSG = "";
$name = "";
$email = "";
$msg_subject = "";
$message = "";
$EmailTo = "";
$Subject = "";
$Body = "";
//check if user submitted a form
if ($_SERVER["REQUEST_METHOD"] == "POST") {
// NAME
if (empty($_POST["name"])) {
$errorMSG = "Por favor preencha o seu nome ";
}
else {
$name = $_POST["name"];
}
// EMAIL
if (empty($_POST["email"])) {
$errorMSG .= "Por favor preencha com o seu email ";
}
else {
$email = $_POST["email"];
}
// MSG SUBJECT
if (empty($_POST["msg_subject"])) {
$errorMSG .= "Por favor escreva um assunto da mensagem";
}
else {
$msg_subject = $_POST["msg_subject"];
}
// MESSAGE
if (empty($_POST["message"])) {
$errorMSG .= "Por favor escreva uma mensagem ";
}
else {
$message = $_POST["message"];
}
//email here
$EmailTo = "email@hotmail.com";
$Subject = "New Message Received";
//email body text
$Body = "";
$Body .= "Nome: ";
$Body .= $name;
$Body .= "\n";
$Body .= "Email: ";
$Body .= $email;
$Body .= "\n";
$Body .= "Assunto: ";
$Body .= $msg_subject;
$Body .= "\n";
$Body .= "Mensagem: ";
$Body .= $message;
$Body .= "\n";
// send email
$success = mail($EmailTo, $Subject, $Body, "De:".$email);
//success message
if ($success && $errorMSG == ""){
echo "sucesso";
}
else{
if($errorMSG == ""){
echo "Algo correu mal :(";
}
else {
echo $errorMSG;
}
}
}
?>
我注意到你的所有input元素都没有name属性,这是你的php脚本用来访问用户提交的表单数据的名称,这是正确的方法:
<input type="text" name="username" placeholder="Enter your name"/>
另外你需要注意的是,php代码在html和JavaScript有机会之前执行。
不要将它用于生产php代码,有关如何正确执行此操作的更多信息,请访问此网站https // www.w3schools.com / php /