2018-11-23 09:00:14 qq_43604731 阅读数 34

PHP 可以通过POST、GET方法获取到表单提交的数据
获取到的POST、GET是数组形式的值,需要通过键值来详细获取相应的值

比如: index.php 页面
下面是POST方法

<?php //获取表单提交的数据 $contents = $_POST['contents'];

echo $contents;
?>

//获取表单提交的数据
$contents = $_GET[‘contents’];

echo $contents;
?>

POST相对于GET方法,更好一些,可以提交大量数据,以及更安全些。

2011-10-17 13:39:17 iteye_13306 阅读数 171

在通过ajax向php程序中传递数据时,会发现使用$_POST根本无法获取数据.但是在firebug中可以看到post中其实是有json数据的.

 在使用 print_r(file_get_contents("php://input")) 之后,却可以得到json数据

 

那什么是php://input呢?

对php://input的介绍,PHP官方手册文档有一段话对它进行了很明确地概述。 

   “php://input allows you to read raw POST data. It is a less memory intensive alternative to $HTTP_RAW_POST_DATA and does not need any special php.ini directives. php://input is not available with enctype=”multipart/form-data”. 

  翻译过来,是这样: 

   “php://input可以读取没有处理过的POST数据。相较于$HTTP_RAW_POST_DATA而言,它给内存带来的压力较小,并且不需要 特殊的php.ini设置。php://input不能用于enctype=multipart/form-data”。

  1,Content-Type 取值为application/x-www-form-urlencoded时,php会将http请求body相应数据会填入到数组$_POST,填入 到$_POST数组中的数据是进行urldecode()解析的结果。(其实,除了该Content-Type,还有multipart/form- data表示数据是表单数据,稍后我们介绍) 

   2,php://input数据,只要Content-Type不为multipart/form-data(该条件限制稍后会介绍)。那么php: //input数据与http entity body部分数据是一致的。该部分相一致的数据的长度由Content-Length指定。 

   3,仅当Content-Type为application/x-www-form-urlencoded且提交方法是POST方法时,$_POST数 据与php://input数据才是”一致”(打上引号,表示它们格式不一致,内容一致)的。其它情况,它们都不一致。 

  4,php://input读取不到$_GET数据。是因为$_GET数据作为query_path写在http请求头部(header)的PATH字段,而不是写在http请求的body部分。 

 

  相信大家对 php://input已经有一定深度地了解了。那么$http_raw_post_data是什么呢?$http_raw_post_data是PHP 内置的一个全局变量。它用于,PHP在无法识别的Content-Type的情况下,将POST过来的数据原样地填入变 量$http_raw_post_data。它同样无法读取Content-Type为multipart/form-data的POST数据。需要设置 php.ini中的always_populate_raw_post_data值为On,PHP才会总把POST数据填入变 量$http_raw_post_data。 

  学习笔记1,Coentent-Type仅在取值为application/x-www-data-urlencoded和multipart/form-data两种情况下,PHP才会将http请求数据包中相应的数据填入全局变量$_POST 

  2,PHP不能识别的Content-Type类型的时候,会将http请求包中相应的数据填入变量$HTTP_RAW_POST_DATA 

  3, 只有Coentent-Type不为multipart/form-data的时候,PHP不会将http请求数据包中的相应数据填入php://input,否则其它情况都会。填入的长度,由Coentent-Length指定。 

  4,只有Content-Type为application/x-www-data-urlencoded时,php://input数据才跟$_POST数据相一致。 

  5,php://input数据总是跟$HTTP_RAW_POST_DATA相同,但是php://input比$HTTP_RAW_POST_DATA更凑效,且不需要特殊设置php.ini 

  6,PHP会将PATH字段的query_path部分,填入全局变量$_GET。通常情况下,GET方法提交的http请求,body为空。

2018-12-05 13:50:51 s_y_w123 阅读数 1069

PHP获取表单数据

表单简述:

一、表单的工作过程:

  1. 表单首先必须展示给用户,用户输入信息后提交表单。
  2. 每个表单都会指定一个网页,用户提交表单后,这个网页会被加载并负责处理表单信息。

通常处理表单和创建表单是由同一个文件来完成的。

PHP代码通过简单的检查用户请求中是否包含表单信息来决定是生成表单还是处理数据。

二、表单的基础组件:

  • 提交类型,使用关键字method定义。
  • 一个或多个输入元素,使用input标记定义。
  • 提交的目的地址,使用关键字action定义。

三、简单的表单示例:

源代码:

<html>
    <head>
        <title>Building a Form</title>
    </head>
    <body>
        <form action="<?php echo(htmlentities($_SERVER['PHP_SELF'])); ?>" method="GET">
            <label>
                Search:<input type="text" name="search">
            </label>
            <input type="submit" value="Go!">
        </form>
    </body>
</html>

运行截图:

表单

关注一下图中的地址栏

  • 像这样的表单文件,我们一般都是存放在web服务器上,一个可以东web方式访问的路径中,例如文档的根目录下。
  • 严格来说,表单是完全使用HTML定义的,但是我们中间插入了一些PHP代码,引用了环境变量数组$_SERVERPHP_SELF元素,它提供了一种引用当前PHP文件的文件名的快捷方式。
  • 可以理解为我们指定用同一个文件来处理提交后的表单数据。

$_SERVER['PHP_SELF']:相对于网站根目录的路径及 PHP 程序名称。 我们可以很方便的获取到当前页面的地址。

但是由于直接使用$_SERVER['PHP_SELF']会有很大的安全隐患,例如可以在URL后面加上攻击代码(具体的大家可以去了解一下),所以我们在前面加上了htmlentities()

从而让 URL地址 中可能的恶意代码转换为用于显示的 html 代码而无法执行。

我们使用的表单的提交方式methodGET,当然也有POST的提交方式,但是使用GET方式,用户输入的信息都会显示在URL地址中,所以用户可以将他们的查询加入书签,而不需要在这个页面上重新输入数据。(后面我会在运行的截图中显示URL地址情况)

获取表单数据

我们简单地做一个 ——在表单提交后显示查询的字符串

  • 我们想做到这一点,首先就得拿到表单域中通过GET方式提交的值。
  • 格式:$_GET[field](请注意,表单域的名称会自动成为 $_GET 数组中的键。)
  • 与之类似,$_POST[field]用来访问通过POST提交的值。

我们接着上面的那个表单例子来写,我们指定了文本输入框的名字name="search",所以使用$_GET["search"]

修改后的代码,处理表单的输入(表单名称:accessForm1.php):

<body>
    <!-- 访问文本框中用户输入的数据 -->
    <?php
    //htmlentities: HTML实体
        $search = htmlentities($_GET['search']);
        $self = htmlentities($_SERVER['PHP_SELF']);
        if($search == ''){
            echo('
                <form action="'.$self.'" method="GET">
                    <label>
                        Search:<input type="text" name="search">
                    </label>
                    <input type="submit" value="Go!">
                </form>');
        }
        else{
            echo "The search string is: <strong>$search</strong>";
        }
    ?>
</body>

我们在输入框中输入:我是获取的数据
提交后的表单
此时再看地址栏,表单名成为了键,搜索的值也跑到了地址栏中,所以GET方式不适合传输私密数据。

我们在提交表单后,if语句判断时,判断到我们的$search变量被赋值了,所以就没有输出HTML表单,而是输出了查询的字符串。

在更早的PHP版本中(4.2.0之前),配置项rgister_globals被广泛使用,有兴趣的可以去了解一下。

2018-04-26 21:45:53 ZWHSOUL 阅读数 469
1$_SERVER['PHP_SELF']表示:当前执行脚本的文件名例如,在地址为
 http://example.com/test.php/foo.bar 的脚本中使用
 $_SERVER['PHP_SELF'] 将得到 /test.php/foo.bar。
2、PHP $_POST
PHP $_POST 被广泛应用于收集表单数据,在HTML form标签的指定该属性:
"method="post"。以下实例显示了一个输入字段(input)及提交按钮(submit)
的表单(form)。当用户通过点击 "Submit" 按钮提交表单数据时, 表单数据将发
送至<form>标签中action 属性中指定的脚本文件。 在这个实例中,我们指定当前
文件来处理表单数据。如果你希望其他的PHP文件来处理该数据,你可以修改该指
定的脚本文件名。然后,我们可以使用超级全局变量 $_POST 来收集表单中的
input 字段数据:
<!DOCTYPE html>
<html>
<body>
<h1>My first PHP page</h1>

<form action="<?php $_SERVER['PHP_SELF']; ?>" method="post">
名字: <input type="text" name="fname">
年龄: <input type="text" name="age">
<input type="submit" value="提交">
</form>

<?php 
$name = $_REQUEST['fname'];
echo $name;
echo "<br/>";
$age = $_REQUEST['age'];   
echo $age;
?>        

</body> 

</html>
2019-03-13 09:30:19 lgj199505 阅读数 75

最近工作上遇到问题,甲方数据存在sqlservel数据库中,我们需要用php去连接他们的数据库获取数据。我自己写的封装方法,使用时只需实例化对象,即可使用类文件中的方法。

SQLSRV函数

sqlsrv_begin_transaction — Begins a database transaction 注释:开始数据库事务

 

sqlsrv_cancel — Cancels a statement 注释:取消一个声明

 

sqlsrv_client_info — Returns information about the client and specified connection 注释:返回有关客户端和指定连接的信息

 

sqlsrv_close — Closes an open connection and releases resourses associated with the connection 注释:关闭打开的连接并释放与该连接关联的资源

 

sqlsrv_commit — Commits a transaction that was begun with sqlsrv_begin_transaction 注释:提交以sqlsrv_begin_transaction开始的事务

 

sqlsrv_configure — Changes the driver error handling and logging configurations 注释:更改驱动程序错误处理和日志配置

 

sqlsrv_connect — Opens a connection to a Microsoft SQL Server database 注释:打开到Microsoft SQL Server数据库的连接

 

sqlsrv_errors — Returns error and warning information about the last SQLSRV operation performed 注释:返回关于上次执行的SQLSRV操作的错误和警告信息

 

sqlsrv_execute — Executes a statement prepared with sqlsrv_prepare 注释:执行使用sqlsrv_prepare准备的语句

 

sqlsrv_fetch_array — Returns a row as an array 注释:以数组形式返回一行

 

sqlsrv_fetch_object — Retrieves the next row of data in a result set as an object 注释:检索结果集中作为对象的下一行数据

 

sqlsrv_fetch — Makes the next row in a result set available for reading 注释:使结果集中的下一行可供读取

 

sqlsrv_field_metadata — Retrieves metadata for the fields of a statement prepared by sqlsrv_prepare or sqlsrv_query 注释: 检索sqlsrv_prepare或sqlsrv_query准备的语句的字段的元数据

 

sqlsrv_free_stmt — Frees all resources for the specified statement 注释:释放指定语句的所有资源

 

sqlsrv_get_config — Returns the value of the specified configuration setting 注释:返回指定配置设置的值

 

sqlsrv_get_field — Gets field data from the currently selected row 注释:从当前选定的行获取字段数据

 

sqlsrv_has_rows — Indicates whether the specified statement has rows 注释:指示指定语句是否具有行

 

sqlsrv_next_result — Makes the next result of the specified statement active 注释:使指定语句的下一个结果活动

 

sqlsrv_num_fields — Retrieves the number of fields (columns) on a statement 注释:检索语句上的字段(列)的数量

 

sqlsrv_num_rows — Retrieves the number of rows in a result set 注释:检索结果集中的行数

 

sqlsrv_prepare — Prepares a query for execution 注释:为执行准备查询

 

sqlsrv_query — Prepares and executes a query 注释:准备并执行查询

 

sqlsrv_rollback — Rolls back a transaction that was begun with sqlsrv_begin_transaction 注释:回滚以sqlsrv_begin_transaction开始的事务

 

sqlsrv_rows_affected — Returns the number of rows modified by the last INSERT, UPDATE, or DELETE query executed 注释:返回上次执行的插入、更新或删除查询修改的行数

 

sqlsrv_send_stream_data — Sends data from parameter streams to the server 注释:将数据从参数流发送到服务器

 

sqlsrv_server_info — Returns information about the server 注释:返回关于服务器的信息

date_default_timezone_set('PRC');//设置时区
class Sqlservel{
    public $server = "PC-20180326LOTY"; //服务器名称,在 sql server management studio 的登录界面查看
    public $uid = null; //数据库用户名
    public $pwd = null; //数据库密码
    public $db = "test"; // 数据库名
    public $set = "UTF-8";//字符集
    public $conn = "";//数据库连接结果
    private $safeCheck=true;
    //构造函数
    public function __construct(){
        $connectionInfo = array("UID"=>$this->uid, "PWD"=>$this->pwd, "Database"=>$this->db,"CharacterSet"=>$this->set);//数据库的连接信息
        $this->conn = sqlsrv_connect( $this->server, $connectionInfo);//返回true 或者 false
        if($this->conn==false) {
            echo "数据库连接失败<br />";
            die( print_r( sqlsrv_errors(), true));
        }
    }

    //析构函数
    public function __destruct(){
        $this->close();
    }

    //关闭打开的连接并释放与该连接关联的资源
    public function close(){
        if($this->conn){
            sqlsrv_close($this->conn);
        }
    }

    //准备并执行查询
    public function query($sql,$params=array(),$options=array()){
        if($this->safeCheck){
            $result = sqlsrv_query($this->conn,$sql,$params,$options);
            return $result;
        }
    }

    //以数组形式返回一行
    public function fetchRow($sql){
        $res = strpos($sql,"limit");
        if($res<0){
            $sql.="limit 1";
        }
        $row = $this->query($sql);
        $arr = sqlsrv_fetch_array($row);
        //去除结果集中的关联数组
        foreach($arr as $k=>$v){
            if(is_numeric($k)){
                unset($arr[$k]);
            }
        }
        return $arr;
    }

    //以二维数组形式返回多条数据
    public function fetchRows($sql){
        $row = $this->query($sql);
        while($arr = sqlsrv_fetch_array($row)){
            //去除结果集中的关联数组
            foreach($arr as $k=>$v){
                if(is_numeric($k)){
                    unset($arr[$k]);
                }
            }
            $array[] = $arr;
        }
        return $array;
    }

    //检索结果集中的行数
    public function rowCount($sql){
        $params = array();
        $options =  array( "Scrollable" => SQLSRV_CURSOR_KEYSET );
        $result = $this->query($sql,$params,$options);
        $res = sqlsrv_num_rows($result);
        if ($res === false){
            return "检索行计数时出错";
        }else{
            return $res;
        }
    }
}

 

PHP递归 获取数据

阅读数 238

获取数据类型

阅读数 33

没有更多推荐了,返回首页