我正在尝试从表单操作中的PHP脚本运行一个函数。
<?php
require_once ( 'username.php' );
echo '
<form name="form1" method="post" action="username()">
<p>
<label>
<input type="text" name="textfield" id="textfield">
</label>
</p>
<p>
<label>
<input type="submit" name="button" id="button" value="Submit">
</label>
</p>
</form>';
?>
我回显了表单,但是我想要从username.php调用的函数“username”来执行。我怎么能以与上面相似的方式做到这一点?
答案 0 :(得分:20)
<?php
require_once ( 'username.php' );
if (isset($_POST['textfield'])) {
echo username();
return;
}
echo '
<form name="form1" method="post" action="">
<p>
<label>
<input type="text" name="textfield" id="textfield">
</label>
</p>
<p>
<label>
<input type="submit" name="button" id="button" value="Submit">
</label>
</p>
</form>';
?>
您需要在表单发送到的页面中运行该功能。
答案 1 :(得分:13)
在PHP中,函数不会在字符串内部进行求值,因为变量有不同的规则。
<?php
function name() {
return 'Mark';
}
echo 'My name is: name()'; // Output: My name is name()
echo 'My name is: '. name(); // Output: My name is Mark
HTML中标记的action参数不应引用要运行的PHP函数。操作应该引用Web服务器上的一个页面,该页面将处理表单输入并将新HTML返回给用户。这可以与输出表单的PHP脚本位于同一位置,或者某些人更喜欢创建单独的PHP文件来处理操作。
基本过程是相同的两种方式:
一个简单的例子是:
<?php
// $_POST is a magic PHP variable that will always contain
// any form data that was posted to this page.
// We check here to see if the textfield called 'name' had
// some data entered into it, if so we process it, if not we
// output the form.
if (isset($_POST['name'])) {
print_name($_POST['name']);
}
else {
print_form();
}
// In this function we print the name the user provided.
function print_name($name) {
// $name should be validated and checked here depending on use.
// In this case we just HTML escape it so nothing nasty should
// be able to get through:
echo 'Your name is: '. htmlentities($name);
}
// This function is called when no name was sent to us over HTTP.
function print_form() {
echo '
<form name="form1" method="post" action="">
<p><label><input type="text" name="name" id="textfield"></label></p>
<p><label><input type="submit" name="button" id="button" value="Submit"></label></p>
</form>
';
}
?>
对于将来的信息,我建议您阅读PHP教程:http://php.net/tut.php
甚至有关于处理表格的部分。
答案 2 :(得分:8)
我不确定我理解你想要实现的目标,因为我们没有username()
应该返回的内容,但你可能想尝试类似的东西。我还建议你不要回显整个页面,而是使用类似的东西,它更容易阅读和维护:
<?php
require_once ( 'username.php' );
if (isset($_POST)) {
$textfield = $_POST['textfield']; // this will get you what was in the
// textfield if the form was submitted
}
?>
<form name="form1" method="post" action="<?php echo($_SERVER['PHP_SELF']) ?">
<p>Your username is: <?php echo(username()) ?></p>
<p>
<label>
<input type="text" name="textfield" id="textfield">
</label>
</p>
<p>
<label>
<input type="submit" name="button" id="button" value="Submit">
</label>
</p>
</form>
这会将结果发布在同一页面中。因此,首次显示页面时,只显示空表单,如果按下提交,文本字段将位于$textfield
变量中,您可以根据需要再次显示它。
我不知道username()
函数是否应该返回您应该在哪里发送结果的URL,但这是您在表单的action
属性中想要的内容。我已将结果放在示例段落中,以便您了解如何显示结果。请参阅“您的用户名是...”部分。
//编辑:
如果要在不离开页面的情况下发送值,则需要使用AJAX。在StackOverflow或Google上搜索jQuery。
您可能希望让您的函数返回用户名而不是回显它。但是,如果您绝对想要从函数中回显它,只需在HTML表单中将其称为<?php username() ?>
。
我认为您需要在进一步了解之前了解页面的客户端 - 服务器进程的流程。假设上面的示例代码名为form.php。
答案 3 :(得分:4)
我认为它应该是这样的..
<?php
require_once ( 'username.php' );
echo '
<form name="form1" method="post" action="<?php username() ?>">
<p>
<label>
<input type="text" name="textfield" id="textfield">
</label>
</p>
<p>
<label>
<input type="submit" name="button" id="button" value="Submit">
</label>
</p>
</form>';
?>
答案 4 :(得分:3)
这样的事情更好......将数据发布到自己的页面,并可能检查用户输入。
<?php
require_once ( 'username.php' );
if(isset($_POST)) {
echo "form post"; // ex $_POST['textfield']
}
echo '
<form name="form1" method="post" action="' . $_SERVER['PHP_SELF'] . '">
<p>
<label>
<input type="text" name="textfield" id="textfield">
</label>
</p>
<p>
<label>
<input type="submit" name="button" id="button" value="Submit">
</label>
</p>
</form>';
?>
答案 5 :(得分:1)
它真的是对action属性的函数调用吗?或者它应该在onSUbmit属性上,因为按照惯例,action属性需要一个页面/ URL。
我认为你应该使用AJAX,
有很多PHP AJAX框架可供选择
http://www.phplivex.com/example/submitting-html-forms-with-ajax
http://www.xajax-project.org/en/docs-tutorials/learn-xajax-in-10-minutes/
ETC。
或经典方式
http://www.w3schools.com/php/php_ajax_php.asp
我希望这些链接能够提供帮助
答案 6 :(得分:0)
您可以将username()函数放在另一个页面中,然后将表单发送到该页面......