php - 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>©2019 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?我是否忽略了语法错误、拼写错误或我的变量是否存在我找不到的错误?感谢任何输入。
解决方案
这有时会发生。我认为我没有足够的经验给你一个完美的解决方案,但这里有一堆你可以实施的尝试:
- 尝试用大写字母写“post”关键字(如“POST”)。
- 有时,即使在您保存和刷新之后,xampp 服务器也不会反映更改。尝试使用 (ctrl+F5) 刷新。这会强制刷新导致 xampp 服务器重新加载所有资源。
- 尝试重新启动 xampp 服务器。
如果有任何帮助,请回复....
推荐阅读
- c# - 尝试捕获未在 Unity 中执行的代码块
- dart - dart中多个单词的前缀匹配搜索
- clojure - Clojure luminus 和多个相同的请求参数
- assembly - 如何在汇编语言8086程序的多次调用中打印不同的随机数
- json - 如何从 JSON 字符串中删除不需要的字符(括号、引号和逗号)?
- c# - 在 .net 框架上使用与号 (&) 和 <、> 解析 XML(无法控制源代码)
- python-3.x - 如何使用 Python 3.8 中的按钮读取 Tkinter 中的条目
- geolocation - 在加利福尼亚使用缩写 Ca 在此处搜索 tech 返回位于乌拉圭 Canelones 的位置 /v1/geocode?q=place+Ca
- svg - 如何用颜色填充 SVG 路径到特定距离?
- html - 如何用下划线设置标题中最后一个单词的样式