HTML表单提交调用一个PHP,但不重定向

这个问题在这里已经有了答案:

  • 如何在PHP中进行重定向? 27个答案

  • 您可以让您的提交脚本检查失败并重定向到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选项的内容:

  • 头文件http://php.net/manual/en/function.header.php
  • HTML“meta”标签https://en.wikipedia.org/wiki/Meta_refresh
  • 如果你不想重新加载页面,你应该使用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

    上一篇: html form submit calls a php but does not redirect

    下一篇: Redirect all link in site to redirect page