通常,当我处理表单时,在“action”参数中,我通常必须引用完整的 PHP 脚本,如下所示:
<form method="post" action="foo.php"></form>
有没有办法告诉表单使用函数或方法而不必提及整个脚本?
不是我知道的,但我很确定你可以做这样的事情......
action="foo.php?fromForm=yes"
然后在你的php代码中,你可以有这个......
if($_GET['fromForm'] == "yes") {
//put your function here, or call it here
}
else {
//rest of code goes here
}
想象你的表格看起来像:
<form name="form1" method="post" action="">
<p>
<label></label>
<input type="text" name="textfield" id="textfield" />
</p>
<p>
<label></label>
<input type="submit" name="button" id="button" value="Submit" />
</p>
</form>
那么你可以把它放在 php 的顶部:
if (isset($_POST['textfield'])) {
foo();
}
替换foo();
为您要执行的函数的名称。
这只是检查是否有任何表单数据发布到带有name="textfield"
.
不,您指定的不是脚本,而是URL。HTML/浏览器不知道服务器端的功能或方法,只知道 URL。
您可以使用该onsubmit
属性来调用 javascript 方法:
<form method="post" onsubmit="doSomething()"></form>
您还可以在将表单传递给脚本之前使用它来验证表单,例如:
<form method="post" action="foo.php" onsubmit="canSubmit()"></form>
注意:我假设您询问是否可以在服务器端访问 PHP 代码中的方法或函数,而不是在客户端调用 JavaScript 函数!
客户端不能随意调用服务端的方法。资源的 URL 或路径用于标识服务器上的资源。
如果您想在同一个脚本中执行不同的功能,您可以使用 if/else 阻止并使用查询参数来区分您的 URL。
HTML:
<form method="post" action="foo.php?method=saveData"></form>
PHP:
<? /* foo.php */
if($_REQUEST['method'] == "saveData") {
// do stuff
} else if($_REQUEST['method'] == "doSomethingElse") {
// do other stuff
}
?>
这是一个非常基本的例子。对于更复杂的需求,许多框架可以执行这种级别的分支,开箱即用,并且更加复杂。
如果你的 PHP 脚本是这样写的:
<?php
switch ($_GET ['f']) {
case 'do_one':
// do something
break;
case 'do_two':
// or use a callback
do_two_callback ();
break;
default:
// ...
}
?>
...你总是可以做到这一点
<form method="post" action="foo.php?f=do_one"></form>