【问题标题】:Submit button returns to index page instead of sending data提交按钮返回索引页面而不是发送数据
【发布时间】:2013-07-16 20:09:39
【问题描述】:

这是网站的链接 - http://zigzagadvertising.com.ph/aleemguiapal/page/2/

我对我在 wordpress 中的表单有疑问。每当我单击提交按钮时,它都会返回索引页面,而不是将数据发送到电子邮件地址

这是我放置在 Header.php 之上的 PHP 代码。这段代码放在标签之前

<?php 
$error=false;
$sent=false;
if(isset($_POST['submit'])) {
if(empty($_POST['firstname']) || empty($_POST['email']) || empty($_POST['message'])) {
$error = true;
} else {

 $to = "clestcruz@gmail.com";

 $name = trim($_POST['firstname']);
 $email = trim($_POST['email']);
 $comments = trim($_POST['message']);

 $subject = "Contact Form";

 $messages = "Name: $firstname \r\n Email: $email \r\n Comments: $message";
 $headers = "From:" . $name;
 $mailsent = mail($to, $subject, $messages, $headers);

 if($mailsent){
     $sent= true;
}
}
}
?>

这是我的自定义页面(联系页面)

<!--CONTACT-->
<div  class="container">
<div  class="eleven columns contact">
     <div id="contact-container" class="eleven columns alpha omega contact">
         <h2>contact us</h2>
         <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras non lacus vel nulla molestie cursus quis a urna. Donec sodales venenatis consequat. Sed tristique elit nec diam rhoncus adipiscing</p>
     </div>

     <div id="note-container" class="eleven columns alpha omega note">
         <p>All fields marked with an asterisk(<span class="asterisk">*</span>) are required</p>
     </div>

     <div class="contactform">
     <form id="register-form" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">


     <?php if($error == true) { ?>
     <p class="error"> There are some misisng fields.</p>
     <?php } if($sent == true) { ?>
     <p class="sent">Thank you for sending your message</p><?php } ?>


         <div class="four columns alpha contact-form">

         <label>prefix</label>
         <input type="text"  />
         <label><span class="asterisk">*</span>first name</label>
         <input type="text" name="firstname"/>
         <label><span class="asterisk"></span>middle name</label>
         <input type="text" name="middlename"/>
         <label><span class="asterisk"></span>last name</label>
         <input type="text" name="lastname"/>
         <label><span class="asterisk">*</span>email address</label>
         <input type="text" name="email"/>

        </div>

        <div class="four columns contact-form">

         <label>phone</label>
         <input type="text" />
         <label>street</label>
         <input type="text" />
         <label><span class="asterisk"></span>zip</label>
         <input type="text" name="zip" />
         <label><span class="asterisk"></span>city</label>
         <input type="text" name="city" />


        </div>

        <div class="clearfix"></div>

        <div class="eleven columns contact-form alpha omega">

        <label><span class="asterisk"></span>subject</label>
        <input type="text" name="subject"/>
        <label><span class="asterisk">*</span>message</label>
        <textarea name="message"></textarea>


        <input class="contact-button" type="submit" name="submit" value="submit" />
        <input class="contact-button" type="reset" value="reset" />

        </div>

     </form>
     </div>

<div class="four columns">
</div>

</div>



 <?php get_sidebar(); ?>
</div>   


<?php get_footer(); ?>



</body>
</html>

我尝试制作一个联系页面并将其上传到一个免费的托管站点,它似乎工作正常。我什至得到了表格中的数据或值。不确定我的表单无法正常工作的原因是否是因为 wordpress 本身。

【问题讨论】:

  • 什么是$_SERVER['PHP_SELF']
  • 将操作更改为“”。我相信会做到的。
  • 嗯,你是什么意思?如果我不知道答案,我很抱歉,因为我刚刚学习了一个教程,还不熟悉 PHP。
  • @user602525 硬编码是什么意思?

标签: php html wordpress forms


【解决方案1】:

如果您只想让表单提交到当前页面,请将您的方法设置为空字符串:

<form action="" method="POST">

就个人而言,我会将您的header.php 中的逻辑分离到一个单独的文件中,以便更清晰地组织代码。在单独的文件中,您可以使用

header('location: http://whatever.com/contact');

在处理完表单数据后进行重定向。

【讨论】:

  • 实际上数据应该发送到特定的电子邮件地址。
  • 当你说分离逻辑时。你的意思是像这样链接它
  • 我的意思是,header.php 文件实际上只应该处理每个页面的标题。但是,并非每次页面加载都需要处理表单数据。所以,虽然它起作用了,但它有点妨碍了事情的发展。更不用说您是否有其他表格并将其放入您的header.php,现在更多的代码并不总是被使用,而是坐在那里。我从 MVC 的角度来看这个,你将做事与显示事物分开。
  • 是的,我明白你的意思。目前正在解决这个问题,然后将分离后端代码。分离逻辑很容易。我目前正在开发一个 wordpress 主题
  • 使用 WP 有点困难,因为 WP 没有考虑到 MVC,但它也不是特别难。大多数情况下,它只涉及深谋远虑。我的看法是,我很懒惰。我想让我的生活尽可能轻松。所以,我尽量减少我必须做的思考。一年后,如果您查看您的代码,它会立即变得有意义,还是您必须重新学习它?如果您认为必须重新学习,您可能需要考虑重构一些东西以使其更轻松。
【解决方案2】:

$_SERVER['PHP_SELF'] 指当前执行脚本的文件名。在这种情况下,当前执行的脚本是您的自定义页面(联系页面)。如果这与您提到的 header.php 文件不同,则该表单未提交到您想要的位置。

如果您希望数据提交到哪里,我建议只将 header.php 明确指定为表单目标,然后在表单提交成功后重定向到您想要去的地方。

【讨论】:

  • 你好亚当,这里的目的是将数据传递到电子邮件地址。我在我的问题中添加了指向该网站的链接
  • 表单的“action”属性被设置为 $_SERVER['PHP_SELF'],这是一个 PHP 变量,将其设置为当前执行脚本的文件名。对于您提供的网站,它实际上转换为
    。如果您希望它指向另一个文件,您应该指定它。例如
    .
  • 我猜它在 wordpress 中有所不同,嗯。让我看看我能不能解决这个问题。 PHP 对我来说是新事物。
猜你喜欢
  • 1970-01-01
  • 2020-10-05
  • 1970-01-01
  • 2016-05-14
  • 1970-01-01
  • 2019-06-23
  • 1970-01-01
  • 2017-11-03
  • 1970-01-01
相关资源
最近更新 更多