HTML表单提交调用一个PHP,但不重定向
这个问题在这里已经有了答案:
您可以让您的提交脚本检查失败并重定向到index.html以获得更多成功。
请记住,在使用echo输出任何其他数据之前,您必须设置标题。
header('refresh: 3; URL=index.html');
不要使用mysql,请使用mysql i或PDO。
了解SQL注入。
所以你的sumbit.php可能看起来像这样:
<?php
include 'config.php'; // store your configuration in a seperate file so
// you only need to update it once when your environment changes
$errors = false;
$output = '';
$nl = '<br>'.PHP_EOL;
$redirect_url = 'index.html';
$con = new mysqli(DBHOST,DBUSER,DBPASS,DBNAME);
if ($con->connect_errno){
$errors = true;
$output .= "ERROR Can't connect to DB".$nl;
};
if (!$errors){
//should validate/clean $_POST before using in query
$name = $con->escape_string($_POST['name']);
$city = $con->escape_string($_POST['city']);
$email = $con->escape_string($_POST['email']);
$mobile = $con->escape_string($_POST['mobile']);
$sub = $con->escape_string($_POST['sub']);
$slogan = $con->escape_string($_POST['slogan']);
$sql="INSERT INTO members
(sName, sCity, sMobile, sEmail, sSub, sSlogan)
VALUES ('$name', '$city', '$mobile', '$email',
'$sub','$slogan')";
if (!$con->query($sql)){ //forgot a parenthesis here earlier
$output .= 'ERROR: DB said: ('.$con->errno.') '.$con->error.$nl;
$output .= 'Query was:'.$sql.$nl;
$errors = true;
}else{
$output .= "1 record added".$nl;
}
}
if (!$errors){
//if there are no errors redirect to index.html;
header('refresh: 2; URL='.$redirect_url);
$output .= '...Redirecting...'.$nl;
}else{
//show the errors and allow display a link to go back/try again
$output .= '<a href="'.$redirect_url.'">Try again</a>'.$nl;
}
echo $output;
config.php将包含
define('DBHOST','localhost');
define('DBUSER','myuser');
define('DBPASS','secretpass');
define('DBNAME','mydb');
编辑/附加:
如果你想做一些验证,在客户端做一些有用的事情会很有帮助,这样当你已经知道某些输入不符合要求时,你的用户就不必提交并被拒绝了。
但是你也需要在服务器端进行验证(坏的用户可以通过在浏览器中编辑html来绕过任何客户端验证)
为了帮助你的用户,你可以使用一些可用的新html5输入类型,可选的还有一些额外的javascript:
例如<input type="email" name="email">
您的index.html可以保持为静态页面。 它只是提供输入表单,可能会加载一些JavaScript资源进行验证。
你的验证应该发生在submit.php。 如果你将在你的应用程序中有更多的表单,你可能会考虑让你的服务器端验证函数在一个单独的validations.php中,你可以在submit.php中包含它
它可能包含以下功能:
function validate_name($input){
// fairly naive rule:
// upper and lower case latin characters and space
// at least three character long
// you may want to look at allowing other characters such as é ö etc.
$input = trim($input); //get rid of spaces at either end
if (preg_match('/^[a-zA-Z ]{3,}$/',$input) == 1){
return $input;
}else{
return false;
}
}
在你的submit.php中,你可以拥有
...
include_once 'validations.php';
...
if (!empty($_POST['name'])){
if (!$name = $con->escape_string(validate_name($_POST['name'])){
$errors = true;
$output .= 'ERROR: Invalid Name: '.$_POST['name'].$nl;
}
}else{
$errors = true;
$output .= 'ERROR: No name specified'.$nl;
}
if (!empty($_POST['city']){
...
...
要获取已输入的数据以便在发生故障时填充,可以通过GET参数将数据发送回原始数据。
在submit.php中,您可以添加类似...
if (!$errors){
//if there are no errors redirect to index.html;
header('refresh: 2; URL='.$redirect_url);
$output .= '...Redirecting...'.$nl;
}else{
//show the errors and allow display a link to go back/try again
//add parameters to show the data already entered
$redirect_url .= '?'.
http_build_query(
array('name'=>$name,
'city'=>$city,
'mobile'=>$mobile,
...
));
$output .= '<a href="'.$redirect_url.'">Try again</a>'.$nl;
}
echo $output;
并且在index.php中,您必须将它们读入并在输入字段中设置值(如果它们存在)。
<?php
//we'll use urldecode() so that any special characters will be interpreted correctly
if (!empty($_GET['name'])){
$name = urldecode($_GET['name']);
}else{
$name = '';
}
if (!empty($_GET['city'])){
$city = urldecode($_GET['city']);
}else{
$city = '';
}
....
?>
<input type="text" name="name" value="<?php echo $name; ?>"/>
<input type="text" name="city" value="<?php echo $city; ?>"/>
当你提交一个表单时,浏览器将跳转在form标签的target属性中指定的页面,如果是submit.php。
处理POST数据后,您的提交页面应呈现一些重定向到index.html选项的内容:
如果你不想重新加载页面,你应该使用AJAX发送数据到服务器:
首先你应该尝试第一个,这很容易。
的index.html
<form method="post" action="submit.php">
//Html Codes
</form>
submit.php
<?php
$con = mysql_connect("localhost","myuser","mypassword");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("mydb", $con);
$sql="INSERT INTO members (sName, sCity, sMobile, sEmail, sSub, sSlogan)
VALUES ('$_POST[name]', '$_POST[city]', '$_POST[mobile]', '$_POST[email]', '$_POST[sub]', '$_POST[slogan]')";
if (!mysql_query($sql,$con))
{
die('Error: ' . mysql_error());
}
else
{
header("location:index.html?Message=Success")
}
?>
链接地址: http://www.djcxy.com/p/34707.html