我正在研究一种我想根据表单上的输入价值来更改表单操作的表单。这需要使用php。
来完成这是我到目前为止尝试的:
<?php
$action = "";
$input = (isset($_POST["hp"]));
if($input == "") {
$action = "action1";
} else {
$action = "action2";
}
?>
<form name="contactForm" id="contactForm" method="post" action="<?php echo $action; ?>">
<!-- form stuff here -->
<input id="hp" name="hp" type="text" class="hp"/>
<input type="submit" name="submit" id="submit" value="Submit Query" class="button" />
</form>
这是不起作用的,因为(isset($_POST["hp"]))
的hp
字段没有从一开始的值,因此它总是转到Action1。
我也尝试了:
<?php
if(isset($_POST['submit'])){
$input = ($_POST['hp']);
$action = "";
if($input == "") {
$action = "action1";
} else {
$action = "action2";
}
}
?>
<form name="contactForm" id="contactForm" method="post" action="<?php echo $action; ?>">
由于perch(正在构建的CMS(为您带来了$action
尚未定义的错误。
我尝试时:
<?php
$action = "";
if(isset($_POST['submit'])){
$input = ($_POST['hp']);
if($input == "") {
$action = "action1";
} else {
$action = "action2";
}
}
?>
它在提交时根本没有做任何事情,因为它将操作设置为"。
有什么建议?
以简短的方式写入
$action = isset($_POST['hp'])?'action2':'action1';
仅此而已。
不同的可能性:
相同的动作和重定向
最简单的方法可能是将表单发送到同一PHP文件,在此文件中,通过邮政获取此输入的内容,然后重定向到正确的文件。
防止默认提交并通过JavaScript添加提交事件
第二个选项可能是通过JavaScript上提交的事件添加一个事件,防止默认措施防止提交,然后检查输入值,设置操作并提交表格:
<form name="contactForm" id="contactForm" method="post" action="">
...
</form>
<script>
document.querySelector('#contactForm').addEventListener('submit', function(e) {
//Prevent default submit
e.preventDefault();
//Check input value
if (...) {
this.action = "page1.php";
} else if (...) {
this.action = "page1.php";
}
//perform submit form.
this.submit();
});
</script>
使用数据绑定库
这可能是这样做的最佳形式,但是理解最复杂的形式是基于使用数据绑定库(例如vue.js,nockoutjs或ractivejs(在模型对象中设置的,取决于输入值的操作字符串。
然后,在html表单标签中,在操作中设置了使用所选库的绑定语法的模型数据值:
//Vue.js syntax
<form name="contactForm" id="contactForm" method="post" :action="action">
//Ractive.js syntax
<form name="contactForm" id="contactForm" method="post" action="{{action}}">
我建议什么?
如果您使用PHP新颖,并且不知道JavaScript,那么第一个选项可能是最适合您的,如果您知道JavaScript并且知道如何使用事件,但从未使用过绑定的库,可能第二种选择更适合您。
如果您使用某些数据绑定库(或实现数据绑定的框架(,则第三个选项可能是最适合您的。
如果第二版和第三版不起作用,则必须缺少类似的输入:
<input type="submit" name="submit">
您可以将该按钮添加到表单中,也可以更改代码以使用if isset($_POST['hp'])
<?php
$action = "";
if(isset($_POST['hp'])){
$input = ($_POST['hp']);
if($input == "") {
$action = "action1";
} else {
$action = "action2";
}
}
?>
上面的答案都不适合我,所以这是我最终与之相处的。
用例:
- 我有一个带有两个字段的"搜索"表格。当用户单击"搜索"时,这些值应添加到URL中,以便先前的搜索可能被书签。然后应执行搜索。
- 首先加载页面或不使用搜索条件时应显示可能的结果。
代码描述:
- 在文件的顶部,检查用户是否提交了表格。如果是这样:
- 从您想要的字段中获取值并将其保存到本地变量。
- 导航到同一PHP文件,这次传递了您对 的变量
- 如果用户未提交表格:
- 检查URL参数
- 如果存在URL参数,请将其保存到本地变量,并使用这些本地变量运行搜索
代码段:
if(isset($_POST['submit'])){
if(!empty($_POST['projectNameSearch'])){
$projectNameSearch = mysqli_real_escape_string($conn, $_POST['projectNameSearch']);
}
if(!empty($_POST['projectDescriptionSearch'])){
$projectDescriptionSearch = mysqli_real_escape_string($conn, $_POST['projectDescriptionSearch']);
}
if($projectNameSearch != '' || $projectDescriptionSearch != ''){
header("Location: projects.php?projectnamesearch=$projectNameSearch&projectdescriptionsearch=$projectDescriptionSearch");
}
} else {
if(isset($_GET['projectnamesearch'])){
$projectNameSearch = mysqli_real_escape_string($conn, $_GET['projectnamesearch']);
}
if(isset($_GET['projectdescriptionsearch'])){
$projectDescriptionSearch = mysqli_real_escape_string($conn, $_GET['projectdescriptionsearch']);
}
}