html - PHP Issue with isset function
Get the solution ↓↓↓I'm making a contact form for my website that uses php to send the inputted information to my email.
My issue is that the isset php function returns false. I'm not sure why this is.
Here is my php code (the outputted result is "not sent")
<?php
if (isset($_POST['submit'])){
$name = $_POST['name'];
$subject = $_POST['subject'];
$mailFrom = $_POST['mail'];
$message = $_POST['message'];
$mailTo = "[email protected]";
$headers = "From: " .$mailFrom;
$txt = "You have received an email from " .$name.".\n\n".$message;
if (mail($mailTo, $subject, $txt, $headers)){
echo "<h1>sent successfully</h1>";
} else {
echo "<h1>something went wrong</h1>";
}
} else {
echo "not sent";
}
?>
Here is my form code
<form action="contactform.php" method="post" enctype="text/plain">
<label for="name">Name</label>
<input type="text" name="name" placeholder="Full name.." maxlength="20" required>
<label for="mail">Email</label>
<input type="text" name="mail" placeholder="Your email.."
pattern="[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z{2,}$" required>
<label for="subject">Subject</label>
<input type="text" name="subject" maxlength="25" placeholder="Subject..">
<label for="message">Message</label>
<input type="text" name="message" placeholder="Message.." style="height:170px"
maxlength="150" required>
<input type="submit" value="submit" name="submit">
</form>
Answer
Solution:
There is nothing wrong with function. It is not even a PHP-related issue.
It is all about form submission encoding. There are 3 valid encoding types for forms:
You're using the third one, which has documented like:
Payloads using the
text/plain
format are intended to be human readable. They are not reliably interpretable by computer, as the format is ambiguous (for example, there is no way to distinguish a literal newline in a value from the newline at the end of the value).
You're not getting anyPOST
variables since PHP doesn't populate$_POST
when usingenctype="text/plain"
.
In the docs of superglobal:
An associative array of variables passed to the current script via the HTTP POST method when using
application/x-www-form-urlencoded
ormultipart/form-data
as the HTTP Content-Type in the request.
Being said that, you can still read raw data from the request body.
$data = file_get_contents('php://input');
But you'll get the whole data as a string (plain text).
And last but not least, be careful,php://input
is not available withenctype="multipart/form-data"
.
Answer
Solution:
Don't useisset($_POST['submit'])
that's referencing a submit button in case there's more than one submit button on the form as the button is not always pressed. This has caused me issues in the past.
Pressing enter on any field will submit the form with the first submit button available.
Use one of the fields. In your case you can useif (isset($_POST['name'])){
Share solution ↓
Additional Information:
Link To Answer People are also looking for solutions of the problem: closed without sending a request; it was probably just an unused speculative preconnection
Didn't find the answer?
Our community is visited by hundreds of web development professionals every day. Ask your question and get a quick answer for free.
Similar questions
Find the answer in similar questions on our website.
Write quick answer
Do you know the answer to this question? Write a quick response to it. With your help, we will make our community stronger.