PHP发布单页表单-最初隐藏验证等
这是我第一次尝试PHP,我拼凑了一个可以在一个页面上工作的表单。问题是,当您第一次访问页面时,它会显示“请输入您的电子邮件地址,以便我们与您联系”,但我只希望在按下提交按钮后显示错误/成功消息 此外,我希望所有消息在输出时都包装在一个div中 我读过一篇帖子,建议使用如下内容,但当我尝试实现时,按submit时不会显示任何消息:PHP发布单页表单-最初隐藏验证等,php,html,forms,validation,post,Php,Html,Forms,Validation,Post,这是我第一次尝试PHP,我拼凑了一个可以在一个页面上工作的表单。问题是,当您第一次访问页面时,它会显示“请输入您的电子邮件地址,以便我们与您联系”,但我只希望在按下提交按钮后显示错误/成功消息 此外,我希望所有消息在输出时都包装在一个div中 我读过一篇帖子,建议使用如下内容,但当我尝试实现时,按submit时不会显示任何消息: if (isset($_POST['submit'])) { // Process Form } else { // Show Form } 无论
if (isset($_POST['submit']))
{
// Process Form
}
else
{
// Show Form
}
无论如何,以下是我的完整代码:
<?php
$to = "me@gmail.com" ;
$from = $_REQUEST['Email'] ;
$name = $_REQUEST['Name'] ;
$headers = "From: $from";
$subject = "Web Contact Data";
$startmonth = $_REQUEST['StartMonth'];
$startyear = $_REQUEST['StartYear'];
$endmonth = $_REQUEST['EndMonth'];
$endyear = $_REQUEST['EndYear'];
$message = $_REQUEST['Message'];
$fields = array();
$fields{"Name"} = "Name";
$fields{"Email"} = "Email";
$fields{"Phone"} = "Phone";
$selectedProjects = 'None';
if(isset($_POST['projects']) && is_array($_POST['projects']) && count($_POST['projects']) > 0){
$selectedProjects = implode(', ', $_POST['projects']);
}
$selectedSkills = 'None';
if(isset($_POST['skills']) && is_array($_POST['skills']) && count($_POST['skills']) > 0){
$selectedSkills = implode(', ', $_POST['skills']);
}
$selectedNoRush = 'None';
if(isset($_POST['norush']) && is_array($_POST['norush']) && count($_POST['norush']) > 0){
$NoRush= implode(', ', $_POST['norush']);
}
$selectedWhenReady = 'None';
if(isset($_POST['whenready']) && is_array($_POST['whenready']) && count($_POST['whenready']) > 0){
$WhenReady= implode(', ', $_POST['whenready']);
}
$selectedBudget = 'None';
if(isset($_POST['budget']) && is_array($_POST['budget']) && count($_POST['budget']) > 0){
$selectedBudget= implode(', ', $_POST['budget']);
}
$body = "We have received the following information:\n\n"; foreach($fields as $a => $b){$body .= sprintf("%20s: %s\n",$b,$_REQUEST[$a]);}
$body .= "\n" . 'Selected Projects: ' . $selectedProjects . "\n";
$body .= 'Selected Skills: ' . $selectedSkills . "\n\n";
$body .= 'Start Date: ' . $startmonth . " " . $startyear . " " . $NoRush . "\n";
$body .= 'End Date: ' . $endmonth . " " . $endyear . " " . $WhenReady . "\n";
$body .= 'Budget: ' . $selectedBudget . "\n\n";
$body .= 'Message:' . $message . "\n";
$headers2 = "From: me@gmail.com";
$subject2 = "Thank you for contacting us";
$autoreply = "Thank you for contacting us. Somebody will get back to you as soon as possible, usually within 48 hours.";
if($from == '') {print "Please enter your email address so we can contact you.";}
else {
if($name == '') {print "Please enter your name so we know who sent this.";}
else {
if($message == '') {print "Please give a brief description so we can understand how best to help.";}
else {
$send = mail($to, $subject, $body, $headers);
$send2 = mail($from, $subject2, $autoreply, $headers2);
if($send)
{print "Thank you. Your request has been successfully submitted.";}
else
{print "We encountered an error sending your mail, please check your details are correct or email us at hello@lyonempire.co.uk"; }
}}}
?>
谢谢
如果有人想指出括号和代码的更好实践,请随意。我知道我可以做得更好,但不知道怎么做
司仪
更新-以下是html:
<form method="post">
<h3>Your Details</h3>
<div class="formrow">
<input type="text" name="Name" maxlength="99" id="fullname" placeholder="Name" />
<input type="email" name="Email" maxlength="99"placeholder="Email Address" />
<input type="tel" name="Phone" maxlength="25" placeholder="Phone Number" />
</div>
<h3>Project Type</h3>
<div class="formrow">
<fieldset>
<input type="checkbox" id="type1" name="projects[]" value="Web">
<label for="type1">Web</label>
<input type="checkbox" id="type2" name="projects[]" value="Digital Media">
<label for="type2">Digital Media</label>
<input type="checkbox" id="type3" name="projects[]" value="Consultancy">
<label for="type3">Consultancy</label>
</fieldset>
</div>
<h3>A Brief Description</h3>
<div class="formrow">
<textarea name="Message"></textarea>
</div>
<h3>What do you do?</h3>
<div class="formrow">
<fieldset>
<div class="skillrow">
<input type="checkbox" id="skill1" name="skills[]" value="Website Design">
<label for="skill1">Website Design</label>
<input type="checkbox" id="skill2" name="skills[]" value="Social Networking">
<label for="skill2">Social Networking</label>
<input type="checkbox" id="skill3" name="skills[]" value="E-Commerce">
<label for="skill3">E-Commerce</label>
</div>
<div class="skillrow">
<input type="checkbox" id="skill4" name="skills[]" value="Content Management Systems">
<label for="skill4">Content Management Systems</label>
<input type="checkbox" id="skill5" name="skills[]" value="Video">
<label for="skill5">Video</label>
<input type="checkbox" id="skill6" name="skills[]" value="Images">
<label for="skill6">Images</label>
</div>
<div class="skillrow">
<input type="checkbox" id="skill7" name="skills[]" value="Social Media">
<label for="skill7">Social Media</label>
<input type="checkbox" id="skill8" name="skills[]" value="Strategy">
<label for="skill8">Strategy</label>
<input type="checkbox" id="skill9" name="skills[]" value="Best Practice">
<label for="skill9">Best Practice</label>
</div>
<div class="skillrow">
<input type="checkbox" id="skill10" name="skills[]" value="Not Sure">
<label for="skill10">Not Sure</label>
</div>
</fieldset>
</div>
<h3>Ideal Start Date</h3>
<div class="formrow">
<label class="drops">
<select name="StartMonth">
<option value="">---</option>
<option value="January">January</option>
<option value="February">February</option>
<option value="March">March</option>
<option value="April">April</option>
<option value="May">May</option>
<option value="June">June</option>
<option value="July">July</option>
<option value="August">August</option>
<option value="September">September</option>
<option value="October">October</option>
<option value="November">November</option>
<option value="December">December</option>
</select>
</label>
<label class="drops">
<select name="StartYear">
<option value="">---</option>
<option value="2013">2013</option>
<option value="2014">2014</option>
<option value="2015">2015</option>
</select>
</label>
<input type="checkbox" id="norush" name="norush[]" value="No Great Rush">
<label for="norush">No Great Rush</label>
</div>
<h3>Ideal End Date</h3>
<div class="formrow">
<label class="drops">
<select name="EndMonth">
<option value="">---</option>
<option value="January">January</option>
<option value="February">February</option>
<option value="March">March</option>
<option value="April">April</option>
<option value="May">May</option>
<option value="June">June</option>
<option value="July">July</option>
<option value="August">August</option>
<option value="September">September</option>
<option value="October">October</option>
<option value="November">November</option>
<option value="December">December</option>
</select>
</label>
<label class="drops">
<select name="EndYear">
<option value="">---</option>
<option value="2013">2013</option>
<option value="2014">2014</option>
<option value="2015">2015</option>
</select>
</label>
<input type="checkbox" id="whenready1" name="whenready[]" value="When It's Ready">
<label for="whenready1">When it's good and ready</label>
</div>
<h3>Estimated Budget</h3>
<div class="formrow">
<input type="radio" id="budget1" name="budget[]" value="Under 800">
<label for="budget1">Under £800</label>
<input type="radio" id="budget2" name="budget[]"value="800 to 1600">
<label for="budget2">£800 - £1600</label>
<input type="radio" id="budget3" name="budget[]" value="Over 1600">
<label for="budget3">Over £1600</label>
</div>
<h3>Good to Go?</h3>
<div class="goodtogo">
<input type="submit" name="send" value="Submit Details Now!">
</div>
</form>
你的细节
项目类型
网状物
数字媒体
咨询
简述
你是做什么的?
网站设计
社交网络
电子商务
内容管理系统
视频
图像
社会化媒体
策略
最佳做法
不确定
理想开始日期
---
一月
二月
前进
四月
也许
六月
七月
八月
九月
十月
十一月
十二月
---
2013
2014
2015
不急
理想结束日期
---
一月
二月
前进
四月
也许
六月
七月
八月
九月
十月
十一月
十二月
---
2013
2014
2015
当一切都准备好了
估计预算
根据£;800
£800 - £1600
163人以上;1600
可以走了吗?
编辑:
如评论部分所述,这篇文章的第一部分是不正确的,很抱歉给出了错误的答案。我不知道动作属性在HTML5上是可选的,我应该在发布之前做研究。我道歉
这是不正确的: 没有显示任何内容,因为您没有指定表单将在哪个php文件中处理。 将表单标记编辑为(用php文件名替换index.php): 必须与“提交”按钮的名称匹配:
<input type="submit" name="send" value="Submit Details Now!">
应该是:
<input type="submit" name="submit" value="Submit Details Now!">
至于编码标准,这里有一些地方可以看,您的代码需要重写,结构是horrible@jayharris我在问题中确实提到了这一点。它应该是什么样的?这个问题似乎离题了,因为它是关于对大块非隔离代码的调试请求,这些代码可能(也可能不是)包含问题所涉及的代码,但是在从大量代码中破译问题之前,答案需要涉及到很多原因和其他问题。对于初学者,您需要在isset($\u POST['submit'])
语句中包装验证。其次,您从未在html中指定名称submit,而是在html中指定其名称send。。第三行到最后一行-1:给出的理由是错误的。请参考这里的HTML规范。与您假设的不同,action属性是可选的,并且具有默认值。因此,如果您回答,请多加注意并提供参考。Timber,谢谢-就像hakre解释的第一部分是不正确的(您不需要html5中的操作),但是我是第一个阐明提交/发送问题的人,这正是我弄错的地方,所以谢谢你。@Mike:请理解,这样问一个问题对这个网站来说是非常不合适的。正如你所看到的,像Timber232这样想要帮助的用户可能会因为你问了一个这里不能问的问题而得到负面评价,因为从技术上讲,他的答案是错误的。如果您正在寻找Codereview,请选择其他,更适合的场合,比如程序员,他们对代码审查问题持开放态度:-尽管他们可能会开始拒绝对未隔离代码块的调试请求,就像我们现在在这里更有效地做的那样Stackoverflow@hakre好的,抱歉-我真的在问如何隐藏验证/成功评论并将其包装在div中,但是增加了代码审查的内容,因为我在这个网站上有几个其他用户告诉我应该做得更好,但是没有关于如何做的信息。@Mike:相反,请提供一个单独的例子,然后给出你认为你想做的事是可能的原因。这很重要。阅读您的问题的用户必须能够执行代码并再现您的问题。您的工作是首先考虑隔离问题。(这通常也会使您编写更好的代码,即使您还没有解决问题)。
<input type="submit" name="send" value="Submit Details Now!">
<input type="submit" name="submit" value="Submit Details Now!">