首页 > 解决方案 > HTML 表单发送 GET 而不是 POST(XAMPP、Apache、localhost)

问题描述

我已经查找了其他问题的可能解决方案,但它们似乎对我不起作用。根据 Firefox 中的网络控制台,当我将方法设置为 POST 时,我的联系表单会发送 GET。

我检查了我的 HTML 代码是否有错误,但找不到任何错误;没有未封闭的表格、div 等。我也检查了我的 php 的语法。我也尝试将提交按钮设置为,<button type="submit" formmethod="post" formaction="form-to-email.php" name="submit" class="button">Und los</button>'但它也无济于事。

编辑:这是我在此页面的完整 HTML 代码:

  <!DOCTYPE html>
<html lang="" dir="ltr">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
  <meta http-equiv="x-ua-compatible" content="ie=edge">
  <meta name="description" content="placeholder">
  <meta name="keywords" content="placeholder">
  <meta name="author" content="placeholder">

  <title>MADesign.</title>
  <link rel="author" href="robots.txt" />
  <link rel="author" href="humans.txt" />
  <!-- CSS -->
  <link rel="stylesheet" href="css/maincss.css">
</head>

<body>
  <div id="holder">
    <!-- page header -->
    <div class="bg-image-small">
      <div id="main_menu">
        <header id="page_header">
          <img src="images/mad-logo-300px.png" alt="mad logo" id="mad-logo">
        </header>
        <!-- END page header -->
        <!-- main navigation -->
        <nav id="main-nav">
          <ul>
            <li><a href="index.html">home</a></li>
            <li><a href="index.html#link1">link1</a></li>
            <li><a href="index.html#link2">link2</a></li>
            <li><a href="galerie.html">link3</a></li>
            <li><a href="kontakt.html">kontakt</a></li>
            <li><a href="impressum.html">impressum</a></li>
          </ul>
        </nav><!-- END main navigation -->
      </div><!-- END main menu -->
    </div><!-- END background image -->

    <!-- main content -->
    <main>
      <!-- contact form -->
      <form id="my-form" name="myForm" action="/form-to-email.php" method="post">
        <h2>Let's get in touch.</h2>
        <p>Schick mir eine Email an <a href="mailto:abc@placeholder.de">abc@placeholder.de</a> oder nutze mein Kontaktformular.</p>

        <div class="gender">
          <input type="radio" name="titles" value="male" id="mr"
            <?php if($titles == "male") echo "checked" ?>>
          <label for="titles">Herr</label>
          <input type="radio" name="titles" value="female" id="mrs"
            <?php if($titles == "female") echo "checked" ?>>
          <label for="titles">Frau</label>
          <input type="radio" name="titles" value="nonbinary" id="mx"
            <?php if($titles == "nonbinary") echo "checked" ?>>
          <label for="titles">Hallo</label>
          <input type="radio" name="titles" value="person" id="person"
            <?php if($titles == "person") echo "checked" ?>>
          <label for="titles">Person</label>
          <div class="errormsg">
            <?php echo $errors['titles']; ?>
          </div>
        </div>
        <div class="form-block">
          <label for="usrname">Name:</label><br>
          <input type="text" name="usrname" id="usrname" class="styleinput" size="20" maxlength="30" value="<?php echo htmlspecialchars($usrname) ?>">
          <div class="errormsg">
            <?php echo $errors['usrname']; ?>
          </div>
        </div>
        <div class="form-block">
          <label for="email">Email:</label><br>
          <input type="text" name="email" id="email" class="styleinput" size="20" maxlength="30" value="<?php echo htmlspecialchars($email) ?>">
          <div class="errormsg">
            <?php echo $errors['email']; ?>
          </div>
        </div>

        <div class="user-input form-block">
          <label for="user-input">Nachricht:</label><br>
          <textarea class="styleinput" id="message-me" name="usrmsg" rows="4" cols="50" value="<?php echo htmlspecialchars($usrmsg) ?>"></textarea>
          <div class="errormsg">
            <?php echo $errors['usrmsg']; ?>
          </div>
        </div>
        <button type="submit" formmethod="post" formaction="/form-to-email.php" name="submit" class="button">Und los</button>
        <input type="reset" name="reset" class="button" value="Nochmal neu..." onclick="emptyMsg()">
        <div id="message"></div>
      </form>
      <!-- END contact form -->
    </main>
    <!-- END main content -->
    <!-- footer -->
    <footer>
      <p>&copy2019 placeholder</p>
    </footer><!-- END footer-->
  </div><!-- END holder -->

  <!-- JavaScript and jQuery -->
  <script src="https://code.jquery.com/jquery-3.4.0.min.js" integrity="sha256-BJeo0qm959uMBGb65z40ejJYGSgR7REI4+CW1fNKwOg=" crossorigin="anonymous"></script>
  <script src="js/mainjs.js"></script>
 </body>
</html>

这是 PHP(保存在与 kontakt.php 相同的目录中):

<?php

$titles = $usrmsg = $usrname = $email = "";
$errors = array("email"=>"", "usrname"=>"", "usrmsg"=>"", "titles"=>"");

if(isset($_POST["submit"])){

  //check Email
  if(empty($_POST["email"])){
    $errors["email"] = "Bitte Email Adresse angeben.";
  } else {
    $email = $_POST["email"];
    if(!filter_var($email, FILTER_VALIDATE_EMAIL)){
      $errors["email"] = "Die Email Adresse sollte gültig sein.";
    }
  }

 //check name
  if(empty($_POST["usrname"])){
    $errors["usrname"] = "Wie heißt du?";
  } else {
    $usrname = $_POST["usrname"];
    $usrname = filter_var($usrname, FILTER_SANITIZE_STRING);
    if(!preg_match("/^[a-zA-Z\s]+$/", $usrname)){
      $errors["usrname"] = "Sorry! Der Name darf nur Buchstaben und Leerzeichen enthalten.";
    }
  }

  //check message
   if(empty($_POST["usrmsg"])){
     $errors["usrmsg"] = "Hier sollte etwas Text stehen. Muss ja nicht viel sein.";
   } else {
     $usrmsg = $_POST["usrmsg"];
     $usrmsg = filter_var($usrmsg, FILTER_SANITIZE_STRING);
     }

  //check titles
    $titles = $_POST["titles"];
    if ($titles==NULL) {
      $errors["titles"] = "Welche Ansprache darf ich verwenden?";
    }
   }
?>

编辑:这是用于客户端表单验证的 JS(它不是完成的版本,一些验证仍然缺失/可能会更改,但到目前为止它正在正常工作):

  var myForm = document.forms.myForm;
  var message = document.getElementById('message');

  myForm.onsubmit = function() {

    //get IDs for the title
    var mr = document.getElementById('mr');
    var mrs = document.getElementById('mrs');
    var mx = document.getElementById('mx');
    var pers = document.getElementById('person');
    //get ID for the textarea
    var usrInput = document.getElementById('message-me');

    if (myForm.usrname.value == "") {
      message.innerHTML = "Moment! Wie heißt du?"
      return false;
    } else if (usrInput.value == "") {
      message.innerHTML = "Das Nachrichtenfeld sollte nicht leer sein..."
      return false;
    } else if (email.value == "") {
      message.innerHTML = "Wie lautet deine Email Adresse?"
      return false;
    } else if (usrInput.value.length < 10) {
      //check min length of textarea
      message.innerHTML = "Die Nachricht sollte etwas länger sein..."
      return false;
    } else if (!mr.checked &&
      !mrs.checked &&
      !mx.checked &&
      !pers.checked) {
      message.innerHTML = "Welche Ansprache darf ich verwenden?"
      return false;
    } else {
      message.innerHTML = "";
      return true;
    }

我正在使用 XAMPP (Apache) 通过 localhost 进行测试。

如何让表单发送 POST,而不是 GET?我是否忽略了语法错误、拼写错误或我的变量是否存在我找不到的错误?感谢任何输入。

标签: phphtmlxampphttp-post

解决方案


这有时会发生。我认为我没有足够的经验给你一个完美的解决方案,但这里有一堆你可以实施的尝试:

  1. 尝试用大写字母写“post”关键字(如“POST”)。
  2. 有时,即使在您保存和刷新之后,xampp 服务器也不会反映更改。尝试使用 (ctrl+F5) 刷新。这会强制刷新导致 xampp 服务器重新加载所有资源。
  3. 尝试重新启动 xampp 服务器。

如果有任何帮助,请回复....


推荐阅读