• 0

Help making a Q&A Form


Question

I'm looking for someone that knows how to setup a basic HTML layout that will use a php file or not in which there will be 10 Questions. The boxes for text will be of enough to put in a few sentences as needed to place answers in and once these answers are all filled in click Submit and it sends the questions along side the results to an email of my choice.

I've set up a few feedback forms from templates I've found online but editing them so far has drove me nuts as the form doesn't seem to be sending. If you know how to do this please PM me...you can just put in temp questions and a temp email I'll edit them later.

I only need a total of 10 Question slots

This is basically going to be used on a site that has full up to date php versions etc etc..so don't worry about that.

Thanks

Here is the code if someone can see what is wrong.

This is the html file named - Tier2Application.html



<form name="htmlform" method="post" action="html_form_send.php">
<table width="450px">

<tbody><tr>
<td valign="top">
<label for="age">What is your age? </label>
</td>
<td valign="top">
<input type="text" name="age" maxlength="50" size="30">
</td>
</tr>

<tr>
<td valign="top" "="">
<label for="Time_Zone">What Time Zone/Country do you live in? </label>
</td>
<td valign="top">
<input type="text" name="Time_Zone" maxlength="50" size="30">
</td>
</tr>
<tr>
<td valign="top">
<label for="Extra_abilities">What other servers do you currently have extra abilities with ie: VIP, Donator, Admin etc etc? </label>
</td>
<td valign="top">
<textarea type="text" name="Extra_abilities" maxlength="1000" cols="25" rows="6"><textarea>
</td>

</tr>
<tr>
<td valign="top">
<label for="position">Tell us why you think you should hold this position.</label>
</td>
<td valign="top">
<textarea type="text" name="position" maxlength="1000" cols="30" rows="6"><textarea>
</td>
</tr>
<tr>
<td valign="top">
<label for="dedicate">How much time do you dedicate to our Servers in a week?</label>
</td>
<td valign="top">
<input name="dedicate" maxlength="70" size="30">
</td>
<tr>
<td valign="top">
<label for="improve">Tell us how you could help us to improve our community and servers.</label>
</td>
<td valign="top">
<textarea type="text" name="improve" maxlength="1000" cols="30" rows="6"><textarea>
</td>
</tr>
<tr>
<td valign="top">
<label for="Opinion">What do you think of the servers at this time?</label>
</td>
<td valign="top">
<textarea type="text" name="Opinion" maxlength="1000" cols="30" rows="6"><textarea>
</td>
</tr>
<tr>
<td valign="top">
<label for="Duration">How long have you been a part of this function?</label>
</td>
<td valign="top">
<textarea type="text" name="Duration" maxlength="1000" cols="30" rows="6"><textarea>
</td>
</tr>
<tr>
<td valign="top">
<label for="Rep_Thread">Do you have a site? If so please provide URL.</label>
</td>
<td valign="top">
<textarea type="text" name="Rep_Thread" maxlength="1000" cols="30" rows="6"><textarea>
</td>
</tr>
<tr>
<td valign="top">
<label for="populate">What suggestions would you give to enhance the servers to help populate them more?</label>
</td>
<td valign="top">
<textarea type="text" name="populate" maxlength="1000" cols="30" rows="6"><textarea>
</td>
</tr>

</tr>
<tr>
<td colspan="2" style="text-align:center">
<input type="submit" value="Submit"> ( <a href="http://www.none.com">none</a> )
</td>
</tr>
</table>
</form>
[/CODE]

here is the php file named html_form_send.php

[CODE]
<?php
if(isset($_POST['email'])) {

// CHANGE THE TWO LINES BELOW
$webmaster_email = "[email protected]";

$email_subject = "Tier2 Application";


function died($error) {
// your error code can go here
echo "We are very sorry, but there were error(s) found with the form you submitted. ";
echo "These errors appear below.

";
echo $error."

";
echo "Please go back and fix these errors.

";
die();
}

// validation expected data exists
if(!isset($_POST['age']) ||
!isset($_POST['Time_Zone']) ||
!isset($_POST['Extra_abilities']) ||
!isset($_POST['position']) ||
!isset($_POST['dedicate']) ||
!isset($_POST['improve']) ||
!isset($_POST['Opinion']) ||
!isset($_POST['Duration']) ||
!isset($_POST['Rep_Thread']) ||
!isset($_POST['populate'])) {
died('We are sorry, but there appears to be a problem with the form you submitted.');
}

$age = $_POST['age']; // required
$Time_Zone = $_POST['Time_Zone']; // required
$Extra_abilities = $_POST['Extra_abilities']; // required
$position = $_POST['position']; // required
$dedicate = $_POST['dedicate']; // required
$improve = $_POST['improve']; // required
$Opinion = $_POST['Opinion']; // required
$Duration = $_POST['Duration']; // required
$Rep_Thread = $_POST['Rep_Thread']; // required
$populate = $_POST['populate']; // required

$error_message = "";
$email_exp = '/^[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/';[/size][/font]
[font="Verdana"][size="2"] }
if(strlen($error_message) > 0) {
died($error_message);
}
$email_message = "Form details below.\n\n";

function clean_string($string) {
$bad = array("content-type","bcc:","to:","cc:","href");
return str_replace($bad,"",$string);
}

$email_message .= "First Name: ".clean_string($first_name)."\n";
$email_message .= "Last Name: ".clean_string($Time_Zone)."\n";
$email_message .= "Email: ".clean_string($email_from)."\n";
$email_message .= "position: ".clean_string($position)."\n";
$email_message .= "dedicate: ".clean_string($dedicate)."\n";
$email_message .= "improve: ".clean_string($improve)."\n";
$email_message .= "Opinion: ".clean_string($Opinion)."\n";
$email_message .= "Duration: ".clean_string($Duration)."\n";
$email_message .= "Rep_Thread: ".clean_string($Rep_Thread)."\n";
$email_message .= "populate: ".clean_string($populate)."\n";

// create email headers
$headers = 'From: '.$email_from."\r\n".
'Reply-To: '.$email_from."\r\n" .
'X-Mailer: PHP/' . phpversion();
@mail($email_to, $email_subject, $email_message, $headers);
?>

<!-- place your own success html below -->

Thank you for the application. We will be in touch with you very soon.

<?php
die();
?>
[/CODE]

Be sure to remove this from the code above at the bottom cause for some stupid reason it keeps adding it to the code

/size /font font=verdana size=2 ALL THIS WITHOUT THE BRACKETS...damn stuff!!</textarea></td></tr></tbody></table></form>

Link to comment
https://www.neowin.net/forum/topic/1079759-help-making-a-qa-form/
Share on other sites

12 answers to this question

Recommended Posts

  • 0

I'm looking through it, but could you say exactly what problems you're having with it? is the email just not sending, or are you getting an error or what?

EDIT: try changing "@mail(blahblahblah);" to just "mail(blahblahblah);" (remove the @ sign). that way you'll see any errors that happen :)

Edited by Matthew_Thepc
  • 0

  • look through all the $_POST['something'] and make sure that everything there is spelt exactly the same as the "name" property in your HTML form
  • take away the "@" from before mail so you'll know if there are any errors
  • move the } after the $email_exp line to right before the first ?> (the one after the mail line, not the one after the die())
  • I'd suggest changing all the $variable = something; to lowercase so you don't get mixed up (ex. change like 26 from $Rep_Thread = $_POST['Rep_Thread']; to $rep_thread = $_POST['Rep_Thread']; and then changing all instances of $Rep_Thread to $rep_thread (easily done through find & replace). This isn't necessary, but it's nice to have all of your code either capitalized or non-capitalized.

If none of this works, make SURE you've taken away the @ from before mail( and then check again to see if there are any errors

  • 0
  • look through all the $_POST['something'] and make sure that everything there is spelt exactly the same as the "name" property in your HTML form
  • take away the "@" from before mail so you'll know if there are any errors
  • move the } after the $email_exp line to right before the first ?> (the one after the mail line, not the one after the die())
  • I'd suggest changing all the $variable = something; to lowercase so you don't get mixed up (ex. change like 26 from $Rep_Thread = $_POST['Rep_Thread']; to $rep_thread = $_POST['Rep_Thread']; and then changing all instances of $Rep_Thread to $rep_thread (easily done through find & replace). This isn't necessary, but it's nice to have all of your code either capitalized or non-capitalized.

If none of this works, make SURE you've taken away the @ from before mail( and then check again to see if there are any errors

Ok I've gone thru and did each of these... did find some errors in wording for what I used on the names of each instance but also went and changed the caps or removed them and double checked all the spelling I don't see any issues. I removed the @ but nothing showed of an error and just processed it with the "Thanks" message at the top of the next screen like nothing happened but no email sent.

Suggestions?

  • 0

Where are $email_from and $email_to coming from? I don't see them being filled up anywhere.

Also the if($_POST['email']) on the top: There's no input named email in your form, so it'll never evaluate to true.

The @mail call is outside that if though, so it'll try sending regardless. (Well you fixed this one if you moved the } as said above)

Also the mail function returns false if there are errors with the message to send. You can check for that :)

  • 0

Where are $email_from and $email_to coming from? I don't see them being filled up anywhere.

Also the if($_POST['email']) on the top: There's no input named email in your form, so it'll never evaluate to true.

The @mail call is outside that if though, so it'll try sending regardless. (Well you fixed this one if you moved the } as said above)

Also the mail function returns false if there are errors with the message to send. You can check for that :)

Yeah I did the change of moving the } and the mail function isnt' returning any errors when sent...it just processes saying "Thanks for sending blah blah" but no email received.

  • 0

Ok.... I would like to think of myself as being really good with this kind of stuff.

My suggestion would be make it simple...

strip everything you don't need.

That way you will find the problem/error faster and then just fix in the longer version.

I believe the issue is that the function is never call... i.e. it will ever evaluate to true if(isset($_POST['email'])) {

like someone else pointed out.

Reason: There is no form element called email being sent, unless i missed it but i did a find on this page.

Also email is a reserved word!!! this has bitten me so many times its not funny.... now when it comes to email/e-mail I always prefix or suffix it.

so change email to something like QandA_email... your probably find it start working.

Remember this

form elements are identified by their name not there ID.... well i could stand corrected... but it is the name in some of my stuff...

I usually include both.

so

<input id="QandA_email" type="text" name="QandA_email" class="default_email" value="" placeholder="Email Address" />

remember to change if(isset($_POST['email'])) { to if(isset($_POST['QandA_email'])) {

also i always do this for debugging.

$QandA_email = $_POST['QandA_email']

echo $QandA_email;

if(QandA_email) {

}

PS!!! my PHP is super rusty... so i might be off.... I'm into C# now

hope this helps

after re-reading it

// create email headers

$headers = 'From: '.$email_from."\r\n".

'Reply-To: '.$email_from."\r\n" .

'X-Mailer: PHP/' . phpversion();

@mail($email_to, $email_subject, $email_message, $headers);

?>

i think your problem is most likely here.

as someone already pointed out .$email_from is never set

$email_from = $_POST['QandA_email']

or

$email_from = $_POST['email_from '] as long as you don't use plain email or e-mail

remember the form must correspond to this

as someone said ... sozs been re-reading the code..

$email_to

this is not set either so

$email_to = "[email protected]";

so final conclusion:

  • Add form element name it "email_to"
  • add this before the if, $email_to = $_POST['email_to']
  • then evaluate if($email_to).....

the above gets tricky but for the stakes of keeping it simple.

you may have to check this as i would write this in c# as if ($email_to != "").

tricky?... is it an e-mail... validation needed here.. also in PHP does no empty string evaluate to false...?

  • 0

I fixed it.. I went with this more simple layout for php


<?PHP
$to = "[email protected]";
$subject = "Form App";
$headers = "From: Form App";
$forward = 0;
$location = "";

$date = date ("l, F jS, Y");
$time = date ("h:i A");

$msg = "Below is the result of a form. It was submitted on $date at $time.\n\n";

if ($_SERVER['REQUEST_METHOD'] == "POST") {
foreach ($_POST as $key => $value) {
$msg .= ucfirst ($key) ." : ". $value . "\n";
}
}
else {
foreach ($_GET as $key => $value) {
$msg .= ucfirst ($key) ." : ". $value . "\n";
}
}

mail($to, $subject, $msg, $headers);
if ($forward == 1) {
header ("Location:$location");
}
else {
echo "Thank you for submitting the form. We will get back to you as soon as possible.";
}

?>
[/CODE]

Thanks to all that helped!

  • 0

Great stuff... that you got it stored...

Again don't know too much about PHP..

But to me...this is retarded being used here...

if ($_SERVER['REQUEST_METHOD'] == "POST") {

foreach ($_POST as $key => $value) {

$msg .= ucfirst ($key) ." : ". $value . "\n";

}

}

else {

foreach ($_GET as $key => $value) {

$msg .= ucfirst ($key) ." : ". $value . "\n";

}

}

1.You are using code that should be placed in a area where it can be reused.

2.You are added extra complexity which isn't needed.

3.You are adding addition overhead.

4.You only go to this code on a Form post. (there's no point to the - " foreach ($_GET as $key => $value) { " here)

5.You know the values and they could be type smart - how would you validate anything?!!!

I would of done this.

<?PHP

//comment (lol don't know what a comment syntax is in PHP anymore)

//we are comming from POST, check we have an e-mail to send to.

$to = $_POST['email_to']

//if no to email

if($to == "")

{

$msg = "e-mail not supplied"

echo $msg

return //Fail

} //assign all the form values //ect... add as needed

$age = $_POST['age']

$timezone = $_POST['timezone']

$comment= $_POST['comment']

//setup Mail stuff

$subject = "Form App";

$headers = "From: Form App";

$forward = 0;

$location = "";

// this PHP I don't know.... but i guess date and time...

// this should be commented out as its never used.

$date = date ("l, F jS, Y");

$time = date ("h:i A");

//this is never used... i presume this is meant to be in the last else

// i would swop out the messages tho

$msg = "Below is the result of a form. It was submitted on $date at $time.\n\n";

//like

$msg = "Thank you for submitting the form. We will get back to you as soon as possible.";

//i would also comment out the if and remove code you are not using.

//ie do you use the forward stuff...

// if not remove the if and just have it run

//mail($to, $subject, $msg, $headers);

//echo msg;

mail($to, $subject, $msg, $headers);

if ($forward == 1) { header ("Location:$location"); }

else {

echo "Thank you for submitting the form. We will get back to you as soon as possible.";

echo msg;

}

?>

hope this helps...

This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Posts

    • First time clicking on a Sayan Sen article after he started making clickbait, vague headlines recently. Didn't read, just came here to say the headline doesn't look like very cheap, vague clickbait this time. Are you okay?
    • Good review, and yeah the benchmark breakdown is pretty clear but also a little messy in a good way. It’s kinda interesting to see where the RX 9070 GRE slides in between the 7800 XT and the 9070 XT , especially when it comes to AI tasks and Blender style workloads. The side by side with Nvidia’s RTX 5070 and 4070 makes it feel obvious just how competitive the mid range GPU scene has gotten lately, and that’s great for creators and gamers too since you can pick based on your priorities rather than only chasing one single thing.
    • That's it. I finally uninstalled Firefox because they often keep pushing buggy updates, only to test them later and make users suffer. No longer is it my alternative browser to Edge. What a waste of energy. Firefox is bad for the environment, just like Chrome (wasting RAM/energy).
    • Microsoft Weekly: new Surface, Windows 11 26H2, and more by Taras Buria This week's news recap is here, with Microsoft announcing Windows 11 version 26H2, launching new Surface devices powered by Snapdragon X2 processors, GTA VI preorder date and cover art, fresh Windows 11 preview builds, a quirky phone-sized e-reader with a physical dial, and more. Quick links: Windows 10 and 11 Windows Insider Program Updates are available Reviews are in Gaming news Great deals to check Windows 11 and Windows 10 Here, we talk about everything happening around Microsoft's latest operating system in the Stable channel and preview builds: new features, removed features, controversies, bugs, interesting findings, and more. And, of course, you may find a word or two about older versions. Windows 11 version 26H2 is now official. Alongside Windows 11's new preview builds released this week, Microsoft confirmed version 26H2, which is coming later this year as an enablement package based on the same platform as versions 24H2 and 25H2. A newly published blog post details what IT admins should do to prepare for the upcoming launch. Next, we have new Windows 11 bugs. Users report that this month's security updates for Windows 11 cause all sorts of issues, including BitLocker bugs, OneDrive issues, black screens of death, and third-party integration in Office apps. Microsoft has not confirmed those yet, but it acknowledged other issues with its operating system. What Microsoft has confirmed is a bug where Recycle Bin delete prompts display internal file names instead of actual ones, and a year-old Windows JScript compatibility bug caused by security-focused engine changes. Moving to more positive news, Microsoft and Adobe are working on improving Windows performance in popular creative apps like Photoshop. Thanks to SPGO optimizations, users can expect up to 20% better performance. Finally, we have a few useful articles that can help you recover your PC or make it perform better. For one, we published a guide detailing what to do if your computer cannot boot after a clean Windows 11 install. There are two important steps you can try to get your system back to working in no time. Additionally, there is a more detailed guide on various CPU performance modes that could notably improve performance. Windows Insider Program Here is what Microsoft released for Windows Insiders this week: Builds Canary Channel Builds 28120.2315 and 29613.1000 These two builds include a new built-in audio driver, improvements to audio Settings, and more. Dev Channel Builds 26300.8697 and 26220.8690 Not much is available here. Some File Explorer improvements, Start menu enhancements, bug fixes, and more. However, build 26300.8697 is now officially marked as version 26H2. Updates are available This section covers software, firmware, and other notable updates (released and coming soon) delivering new features, security fixes, improvements, patches, and more from Microsoft and third parties. This week, Microsoft announced its newest Surface devices powered by Qualcomm's latest Snapdragon X2 processors. There is the 12th-gen Surface Pro and the 8th-gen Surface Laptop. Both devices feature little to no visual differences compared to their predecessors from 2024, and most changes hide inside, including a better processor, faster graphics, enhanced NPUs, and more. The Surface Laptop also received a new haptic trackpad. Mozilla is currently working on a major Firefox redesign, and earlier this week, it published a roadmap of upcoming features and highlights of the upcoming "Project Nova" rework. Files, one of the best file managers for Windows 10 and 11, has been updated in the Preview channel with a long-requested feature. Tree View is finally available in version 4.1.4, allowing you to quickly browse deeply nested folders without leaving the main view. In addition, the update improved the Windows Fonts folder, allowing you to preview each font without opening the default viewer. Rufus, another useful Windows 11 utility, also received a notable update. Version 4.15 arrived as beta with important fixes for silent Windows 11 installation. It also includes patches for ARM-based Windows PCs, OneDrive removal improvements, and more. Here are other updates and releases you may find interesting: Microsoft faces shareholder lawsuit over masking AI costs and slowing Azure growth Microsoft now allows you to tweak Visual Studio to new extremes Microsoft brings Planner Agent to all Microsoft 365 Copilot users Microsoft fixes one of Excel Copilot's most frustrating limitations Microsoft will finally let you sign in to Edge with a Google account Here are the latest drivers and firmware updates released this week: NVIDIA 610.62 with support for Empulse and various fixes. Reviews are in Here is the hardware and software we reviewed this week Earlier this week, we reviewed the DuRoBo Krono, a portable, phone-sized e-reader with some interesting physical controls. This device has an Apple Watch-like dial for page turning, frontlight adjustment, and more. Software is simple and no-nonsense, but it also lacks some useful features and customization. Overall, the device proved interesting, but not flawless. On the gaming side Learn about upcoming game releases, Xbox rumors, new hardware, software updates, freebies, deals, discounts, and more. Forza Horizon 6 received two big updates this week. Alongside the Series 2 content update, developers pushed plenty of bug fixes and balancing tweaks. However, they also had to acknowledge the Eliminator CR-farming exploit and shut down the online mode temporarily. Luckily, only a few days later, another fix arrived, which re-enabled Eliminator and patched the exploit. Microsoft announced new games for Game Pass subscribers. Those include EA Sports FC 26, Junkster, Call of Duty: Vanguard, Abyssus, RV There Yet?, and more. Some existing games are leaving the catalog, so be sure to check out the full list here. New games are also available for GeForce NOW subscribers, and they include Embers of the Uncrowned Demo, Aphelion, Megastore Simulator, OPERATOR, Citizen Sleeper, and more. Rockstart Games had plenty of GTA-related news this week. For one, the company gave GTA V players another free update. Those still playing the game on Xbox One and PlayStation 4 are no longer required to pay $40 to upgrade to the latest-gen version. More importantly, Rockstar Games revealed the GTA VI cover art and announced the preorder date. The Epic Games Store is giving away two games: Citizen Sleeper and Roboeat. These two titles are up for grabs until next Thursday, but if they are not up to your taste, you can always check out the latest Weekend PC Game Deal issue, which is usually full of discounts and specials that let you save a lot of money on new games. Great deals to check Every week, we cover many deals on different hardware and software. The following discounts are still available, so check them out. You might find something you want or need. GEEKOM X16 Pro at GEEKOM - $1,119.67 | 17% off Acer 4K Webcam for PC/Mac with All-Metal Unibody Sculpted - $59.99 | 14% off Samsung 990 PRO SSD 2TB - $369.99 | 42% off Nothing Ear Wireless Earbuds Bluetooth - $73.15 | 51% off PowerColor Reaper AMD Radeon RX 9070 16GB - $579.99 | 17% off This link will take you to other issues of the Microsoft Weekly series. You can also support Neowin by registering for a free member account or subscribing for extra member benefits, along with an ad-free tier option.
  • Recent Achievements

    • Week One Done
      Supreme Spray LV earned a badge
      Week One Done
    • One Month Later
      Genuinetonerink- Dubai earned a badge
      One Month Later
    • Week One Done
      Genuinetonerink- Dubai earned a badge
      Week One Done
    • One Year In
      hhgygy earned a badge
      One Year In
    • Week One Done
      AMV earned a badge
      Week One Done
  • Popular Contributors

    1. 1
      +primortal
      508
    2. 2
      +Edouard
      166
    3. 3
      PsYcHoKiLLa
      84
    4. 4
      Steven P.
      74
    5. 5
      Michael Scrip
      72
  • Tell a friend

    Love Neowin? Tell a friend!