我在HTML表单的“action”字段中使用外部php文件,以便在单击Submit按钮时执行php文件中提到的操作。
为此,我在php文件中使用了isset()
函数。
但是,我发现isset
函数总是返回FALSE
,导致执行else语句(如控制台日志中所示)。
如果我删除了isset()
函数(以及if-else
语句),那么代码运行得非常好。
请问我的代码中有问题吗?
另外我在其他帖子中看到我需要使用其他参数以及isset()
,例如,
if(isset($_POST['submit']) && !empty($_POST["xyz"]))
这完全是必需的吗?
P.S。:我还处于页面开发的初始阶段,因此我请求您忽略我的代码的安全问题,我承认它存在。 :)
我的子代码:
我的HTML表单:
<form id="info-form" method="POST" action="form-submit.php">
<label for="Name">What is your Name? </label>
<input required type="text" name="name" placeholder="Enter your full name here." />
<label for="Email">What is your email ID? </label>
<input required type="email" name="email" placeholder="your.name@email.com" />
<label for="mobile">What is your 10-Digit Mobile Number? </label>
<input required type="text" name="mobile" maxlength="10" />
<button name="submit-form" type="submit" class="btn btn-lg btn-success"><i class="fa fa-paper-plane" aria-hidden="true"></i>
Submit
</button>
<button type="reset" class="btn btn-lg btn-warning"><i class="fa fa-undo" aria-hidden="true"></i>
Reset
</button>
</form>
我的form-submit.php文件:
<?php
if(isset($_POST['submit-form']))
{
require("database-connect.php");
$name = $_POST['name'];
$email = $_POST['email'];
$mobile = $_POST['mobile'];
$sql = "INSERT INTO tbl_details ".
"(name,email_id,mobile_number) ".
"VALUES ".
"('$name','$email','$mobile')";
mysql_select_db('db_info');
$return = mysql_query( $sql, $connect );
if(! $return )
{
die('Could not enter data: ' . mysql_error());
}
echo "Entered data successfully\n";
mysql_close($connect);
}
else
{
echo "Not Set\n";
}
?>
答案 0 :(得分:5)
您真的不应该检查是否存在提交按钮值。如您所见,对前端进行一些轻微的外观修改,比如用什么样的按钮来提交表单,不应该对后端产生任何影响。提交按钮及其值与处理表单无关。
您真正要在服务器上检查的是请求是否是POST请求,或者是否设置了您要使用的值,或者两者都是:
if ($_SERVER['REQUEST_METHOD'] == 'POST') …
if (isset($_POST['name'], $_POST['email'], $_POST['mobile'])) …
最合理的是:
if ($_SERVER['REQUEST_METHOD'] != 'POST') {
header('HTTP/1.0 405 Method Not Allowed');
exit;
}
或:
if ($_SERVER['REQUEST_METHOD'] != 'POST') {
header('Location: myform.html');
exit;
}
在断言您正在处理正确的HTTP方法后,请处理您的数据:
$data = filter_input_array(INPUT_POST, [
'name' => FILTER_DEFAULT,
'email' => FILTER_VALIDATE_EMAIL,
'mobile' => FILTER_DEFAULT
]);
如您所见,您根本不需要直接与$_POST
互动。请参阅http://php.net/filter_input_array。
答案 1 :(得分:1)
像这样更改你的按钮标签。我希望它会帮助你!
<input name="submit-form" value="Submit" type="submit" class="btn btn-lg btn-success">
谢谢!
答案 2 :(得分:0)
您应该使用input
- 元素而不是按钮。
<button name="submit-form" type="submit" class="btn btn-lg btn-success">
<i class="fa fa-paper-plane" aria-hidden="true"></i>Submit
</button>
应该用这样的输入代替:
<input name="submit-form" value="ButtonText" type="submit" class="btn btn-lg btn-success" />
输入的值是它向用户显示的文本。
此外,在您的问题中,您提到isset('submit')
和isset($_POST['submit'])
,而其他人是正确的,这不是HTML代码中的现有名称,您的PHP代码确实包含正确的isset($_POST['submit-form'])
。
它会让一些“快速”的读者感到有些困惑......
至于额外!empty($_POST["xyz"]))
,为了您的目的(检查表单是否为回发),这是不必要的。