GVKun编程网logo

PHP重定向与POST数据(php 重定向)

17

本文的目的是介绍PHP重定向与POST数据的详细情况,特别关注php重定向的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面的了解PHP重定向与POST数据的机会,同时也不会

本文的目的是介绍PHP重定向与POST数据的详细情况,特别关注php 重定向的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面的了解PHP重定向与POST数据的机会,同时也不会遗漏关于CakePHP 2.4重定向()与POST数据?、host文件--ip重定向、jquery – 外部django重定向与POST参数、Linux Shell 数据重定向(输入重定向与输出重定向)的知识。

本文目录一览:

PHP重定向与POST数据(php 重定向)

PHP重定向与POST数据(php 重定向)

我对此主题进行了一些研究,并且有些专家说这是不可能的,因此我想寻求替代解决方案。

我的情况:

A页:[checkout.php]客户填写帐单明细。

网页B:[process.php]生成发票编号并将客户详细信息存储在数据库中。

网页C:[thirdparty.com]第三方付款网关(仅接受过帐数据)。

客户填写其详细信息,然后在A页中设置购物车,然后在B页中过帐。在process.php中,将过帐的数据存储在数据库中并生成发票编号。之后,将客户数据和发票号过帐到thirdparty.com付款网关。问题是在页面B中执行POST。cURL能够将数据发布到页面C,但是问题是页面未重定向到页面C。客户需要在页面C上填写信用卡详细信息。

第三方支付网关确实给了我们API示例,该示例是将发票编号与客户详细信息一起过帐。我们不希望系统生成多余的发票编号。

有什么解决办法吗?我们当前的解决方案是让客户在A页中填写详细信息,然后在B页中创建另一个显示所有客户详细信息的页面,用户可以单击CONFIRM按钮以发布到C页。

我们的目标是让客户只需单击一次即可。

希望我的问题清楚:)

答案1

小编典典

在页面B上生成一个表单,并将所有必需的数据和操作设置为页面C,然后在页面加载时使用JavaScript提交表单。您的数据将被发送到C页,而不会给用户带来任何麻烦。

这是唯一的方法。重定向是一个303HTTP标头,您可以阅读,但我将引用其中的一些内容:

可以在不同的URI下找到对请求的响应,并且应该使用该资源上的GET方法来检索。存在此方法主要是为了允许POST激活的脚本的输出将用户代理重定向到所选资源。新URI不能替代原始请求的资源。303响应一定不能被缓存,但是对第二个(重定向的)请求的响应可能是可缓存的。

实现您正在做的事情的唯一方法是使用一个将用户转到页面C的中间页面。以下是有关如何实现此目标的小片段/简单片段:

<form id="myForm" action="Page_C.php" method="post"><?php    foreach ($_POST as $a => $b) {        echo ''<input type="hidden" name="''.htmlentities($a).''" value="''.htmlentities($b).''">'';    }?></form><script type="text/javascript">    document.getElementById(''myForm'').submit();</script>

您还应该在noscript标记内使用一个简单的“确认”表单,以确保没有Javascript的用户能够使用您的服务。

CakePHP 2.4重定向()与POST数据?

CakePHP 2.4重定向()与POST数据?

我希望通过控制器方法将用户发送到另一个页面.另一页需要POST数据.

通常,使用postLink()访问页面.有没有办法在控制器中使用它,也许使用redirect()?

有点旧,但仍然没有接受答案……
答案是否定的,是的.

>不,没有直接方法,因为您无法使用redirect()函数传递POSTed数据.
您可以使用requestAction(),因为您可以传递数据(see requestAction() here for version cakePHP>=2.0).
在这种情况下,您传递一个url,然后传递一个包含关键数据和发布数据的数组,例如
$this-> requestAction($url,array(‘data’=> $this-> data));或者如果您更喜欢$this-> requestAction($url,array(‘data’=> $)这 – >请求 – >数据));
requestAction()的问题在于,结果是环境的,就好像你在当前控制器中而不是在目标中生成所请求操作的页面一样,导致效果不是非常令人满意(至少对我来说,组件表现不是很好)很好),所以,不,不.
> …但是,您可以使用Session组件执行非常类似的操作.
这就是我通常这样做的方式.流程将是这样的:
在A控制器中查看A =>通过postLink()到Action操作=> =>控制器请求 – >数据到会话变量=> => B控制器中的操作通过redirect()=> =>设置B控制器请求 – >来自会话变量的数据=> => B控制器动作中的过程数据=>查看B.

所以,在你的A控制器中,让我们说在sentToNewPage()动作你会有类似的东西

//Action in A controller
public function sentToNewPage()
{
 $this->Session->write('prevIoUsPageInfo',$this->request->data);
 $url = array('plugin' => 'your_plugin','controller'=>'B','action'=>'processFromPrevIoUsPage');
 $this->redirect($url);
}

在B控制器中:

//Action in B controller
public function beforeFilter()
{//not completelly necessary but handy. You can recover directly the data
 //from session in the action 
 if($this->Session->check('prevIoUsPageInfo'))
   {$this->data = $this->Session->read('prevIoUsPageInfo')};
 parent::beforeFilter();
}
public function processFromPrevIoUsPage()
{
 //do what ever you want to do. Data will be in $this->data or
 // if you like it better in $this->request->data
 $this->processUserData($this->request->data);
  //...
}

host文件--ip重定向

host文件--ip重定向

        地址:位于c:\windows\system32\drivers\etc\中的HOSTS文件

        作用:通过绑定主机名或域名与IP来达到解析的目的,可以用它来屏蔽恶意网站或加快访问。简单点说就是域名或主机名解析,把网址、主机名解析成IP地址,这个解析优先于DNS,作用范围限于本机,也就是说只是你的电脑通过HOSTS知道了某个域名与IP的映射关系,不代表其他电脑也一定明白这个关系。

        例子

            192.16.254.254  localhost   里前面的192.16.254.254就是IP,后面的localhost就是域名或主机名。你也可以后面的域名部分这样修改(可以用网址来替换,不用输http://)。

HOSTS的语法格式是IP在前,主机名或网址在后,IP与主机名间至少有一个空格,一个IP对一个主机名或域名,构成一组对应关系,一组对应 关系占一行;加注释就在前面加上#,如果这一行开头有个#,则这一行全为注释内容,即这一行不起作用。默认情况下HOSTS中有大量的注释内容,说明了 HOSTS的用法,还有例子(只是全是英文)。  

 

      转帖来自新浪博客 http://blog.sina.com.cn/s/blog_446cc66b01018ol3.html


jquery – 外部django重定向与POST参数

jquery – 外部django重定向与POST参数

我试图在Django视图中创建一个重定向到一个外部URL,一些get参数附加到请求。在做了一些环顾四周的尝试后,似乎已经打了一个路障。

所以我的看法看起来像这样

def view(request):
    data = get.data(request)
    if something in data:
        return HttpResponseRedirect('example.com')

这是我能够得到的。我知道你在请求url可以指定一些get参数,如下所示:

...
return HttpResponseRedirect('example.com?name=smith&color=brown')

然而,由于某些数据是敏感的,我不希望它最终在url。因为它是一个外部url,我不能使用接受视图参数的redirect()快捷方式。所以祈祷告诉你,如何完成这样的任务?

编辑

在做了一些更多的环顾之后,并且在IRC中聊了一下,似乎我应该做的是把get参数远离用户,包含支付信息,就是将它们作为post发送。我被告知你应该能够使用一些JS,也可能是jQuery。问题仍然存在,但现在仍然有点复杂。在javascript的帮助下,如何在django中创建帖子重定向?

第二编辑

好像我已经被误解了。 Thanx用于清除重定向协议DR。看来我一直在走错路,试图使用重定向来解决这个问题。

解决方法

我建议采用以下方法。在您的Django视图/模板返回表单到浏览器中,您要作为隐藏表单元素发布的所有参数。一旦表单加载,JavaScript将提交(POST)表单到任何你想要的地方。

视图:

from django.shortcuts import render_to_response

def view(request):
    return render_to_response('test.html',{ 'foo': 123,'bar': 456 })

模板:

<html>
<head>
    <title>test</title>
     <script type="text/javascript">
     function load()
     {
          window.document.test.submit();
          return;
     }
     </script>
</head>
<body onload="load()">
<form name="test" method="post" action="http://www.example.com">
    <input type="hidden" name="foo" value={{ foo }} />
    <input type="hidden" name="bar" value={{ bar }} />
</form>
</body>
</html>

Linux Shell 数据重定向(输入重定向与输出重定向)

Linux Shell 数据重定向(输入重定向与输出重定向)

在了解重定向之前,我们先来看看linux 的文件描述符。

linux文件描述符:可以理解为linux跟踪打开文件,而分配的一个数字,这个数字有点类似c语言操作文件时候的句柄,通过句柄就可以实现文件的读写操作。 用户可以自定义文件描述符范围是:3-num,这个最大数字,跟用户的:ulimit –n 定义数字有关系,不能超过最大值。

linux启动后,会默认打开3个文件描述符,分别是:标准输入standard input 0,正确输出standard output 1,错误输出:error output 2

以后打开文件后。新增文件绑定描述符 可以依次增加。 一条shell命令执行,都会继承父进程的文件描述符。因此,所有运行的shell命令,都会有默认3个文件描述符。

对于任何一条linux 命令执行,它会是这样一个过程:

一个命令执行了:

先有一个输入:输入可以从键盘,也可以从文件得到

命令执行完成:成功了,会把成功结果输出到屏幕:standard output默认是屏幕

命令执行有错误:会把错误也输出到屏幕上面:standard error默认也是指的屏幕

文件输入输出由追踪为一个给定的进程所有打开文件的整数句柄来完成。这些数字值就是文件描述符。最为人们所知的文件米描述符是 stdin, stdout 和 stderr,文件描述符的数字分别是0,1和2。这些数字和各自的设备是保留的。一个命令执行前,先会准备好所有输入输出,默认分别绑定(stdin,stdout,stderr),如果这个时候出现错误,命令将终止,不会执行。命令解析过程,可以参考:Linux Shell 通配符、元字符、转义符使用实例介绍

这些默认的输出,输入都是linux系统内定的,我们在使用过程中,有时候并不希望执行结果输出到屏幕。我想输出到文件或其它设备。这个时候我们就需要进行输出重定向了。

linux shell下常用输入输出操作符是:

1. 标准输入 (stdin) :代码为 0 ,使用 < 或 << ; /dev/stdin -> /proc/self/fd/0 0代表:/dev/stdin
2. 标准输出 (stdout):代码为 1 ,使用 > 或 >> ; /dev/stdout -> /proc/self/fd/1 1代表:/dev/stdout
3. 标准错误输出(stderr):代码为 2 ,使用 2> 或 2>> ; /dev/stderr -> /proc/self/fd/2 2代表:/dev/stderr

 

  • 输出重定向:

格式:

command-line1 [1-n] > file或文件操作符或设备

上面命令意思是:将一条命令执行结果(标准输出,或者错误输出,本来都要打印到屏幕上面的) 重定向其它输出设备(文件,打开文件操作符,或打印机等等)1,2分别是标准输出,错误输出。

实例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#显示当前目录文件 test.sh test1.sh test1.sh实际不存在
[chengmo@centos5 shell]$ ls test.sh test1.sh
ls: test1.sh: 没有这个文件和目录
test.sh
 
#正确输出与错误输出都显示在屏幕了,现在需要把正确输出写入suc.txt
# 1>可以省略,不写,默认所至标准输出
[chengmo@centos5 shell]$ ls test.sh test1.sh 1>suc.txt
ls: test1.sh: 没有这个文件和目录
[chengmo@centos5 shell]$ cat suc.txt
test.sh
 
#把错误输出,不输出到屏幕,输出到err.txt
[chengmo@centos5 shell]$ ls test.sh test1.sh 1>suc.txt 2>err.txt
[chengmo@centos5 shell]$ cat suc.txt err.txt
test.sh
ls: test1.sh: 没有这个文件和目录
#继续追加把输出写入suc.txt err.txt  “>>”追加操作符
[chengmo@centos5 shell]$ ls test.sh test1.sh 1>>suc.txt 2>>err.txt
 
#将错误输出信息关闭掉
[chengmo@centos5 shell]$ ls test.sh test1.sh 2>&-
test.sh
[chengmo@centos5 shell]$ ls test.sh test1.sh 2>/dev/null
test.sh
#&[n] 代表是已经存在的文件描述符,&1 代表输出 &2代表错误输出 &-代表关闭与它绑定的描述符
#/dev/null 这个设备,是linux 中黑洞设备,什么信息只要输出给这个设备,都会给吃掉
 
#关闭所有输出
[chengmo@centos5 shell]$ ls test.sh test1.sh  1>&- 2>&-
#关闭 1 ,2 文件描述符
[chengmo@centos5 shell]$ ls test.sh test1.sh  2>/dev/null 1>/dev/null
#将1,2 输出转发给/dev/null设备
[chengmo@centos5 shell]$ ls test.sh test1.sh >/dev/null 2>&1
#将错误输出2 绑定给 正确输出 1,然后将 正确输出 发送给 /dev/null设备  这种常用
<p>[chengmo@centos5 shell]$ ls test.sh test1.sh &>/dev/null
#& 代表标准输出 ,错误输出 将所有标准输出与错误输出 输入到/dev/null文件
</p>

注意:

1、shell遇到”>”操作符,会判断右边文件是否存在,如果存在就先删除,并且创建新文件。不存在直接创建。 无论左边命令执行是否成功。右边文件都会变为空。

2、“>>”操作符,判断右边文件,如果不存在,先创建。以添加方式打开文件,会分配一个文件描述符[不特别指定,默认为1,2]然后,与左边的标准输出(1)或错误输出(2) 绑定。

3、当命令:执行完,绑定文件的描述符也自动失效。0,1,2又会空闲。

4、一条命令启动,命令的输入,正确输出,错误输出,默认分别绑定0,1,2文件描述符。

5、一条命令在执行前,先会检查输出是否正确,如果输出设备错误,将不会进行命令执行

 

  • 输入重定向

格式:

command-line [n] <file或文件描述符&设备

将然有,命令默认从键盘获得的输入,改成从文件,或者其它打开文件以及设备输入。执行这个命令,将标准输入0,与文件或设备绑定。将由它进行输入。

实例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[chengmo@centos5 shell]# cat > catfile
testing
cat file test
#这里按下 [ctrl]+d 离开
#从标准输入【键盘】获得数据,然后输出给catfile文件
 
[chengmo@centos5 shell]$ cat>catfile <test.sh
#cat 从test.sh 获得输入数据,然后输出给文件catfile
 
[chengmo@centos5 shell]$ cat>catfile <<eof
test a file
test!
eof
 
#<< 这个连续两个小符号, 他代表的是『结束的输入字符』的意思。这样当空行输入eof字符,输入自动结束,不用ctrl+D

 

  • exec绑定重定向

格式:

exec 文件描述符[n] <或> file或文件描述符或设备

在上面讲的输入,输出重定向 将输入,输出绑定文件或设备后。只对当前那条指令是有效的。如果需要在绑定之后,接下来的所有命令都支持的话。就需要用exec命令

实例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[chengmo@centos5 shell]$ exec 6>&1
#将标准输出与fd 6绑定
 
[chengmo@centos5 shell]$ ls  /proc/self/fd/
0  1  2  3  6
#出现文件描述符6
 
[chengmo@centos5 shell]$ exec 1>suc.txt
#将接下来所有命令标准输出,绑定到suc.txt文件(输出到该文件)
 
[chengmo@centos5 shell]$ ls -al
#执行命令,发现什么都不返回了,因为标准输出已经输出到suc.txt文件了
 
[chengmo@centos5 shell]$ exec 1>&6
#恢复标准输出
 
[chengmo@centos5 shell]$ exec 6>&-
#关闭fd 6描述符
 
[chengmo@centos5 ~]$ ls /proc/self/fd/
0  1  2  3

说明:使用前先将标准输入保存到文件描述符6,这里说明下,文件描述符默认会打开0,1,2 还可以使用自定义描述符 。然后对标准输出绑定到文件,接下来所有输出都会发生到文件。 使用完后,恢复标准的输出,关闭打开文件描述符6。

有趣事情:

可能有朋友会这样用:exec 1>suc.txt ,接下来所有输出都绑定到suc.txt 文件,那么怎么样恢复原来的呢? 试试你就会发现问题所在……

 

  • 复杂一点实例

1
2
3
4
5
6
7
8
9
10
11
exec 3<>test.sh;
#打开test.sh可读写操作,与文件描述符3绑定
 
while read line<&3
 do
    echo $line;
done
#循环读取文件描述符3(读取的是test.sh内容)
exec 3>&-
exec 3<&-
#关闭文件的,输入,输出绑定

 

总结下:

学习就要总结,总结才可以提高了。哈哈!

估计还有一些朋友是头晕晕的。怎么linux的重定向这么复杂呢,又是文件打开描述符又是读,还有些,还有默认标准输入输出。

其实,总结一下,重定向应用通常就以下两点:

1、重新设置命令的默认输入,输出,指向到自己文件(文件,文件描述符,设备其实都是文件,因为linux就是基于设备也是文件,描述符也指向是文件,哈哈)

2、扩展自己新的描述符,对文件进行读写操作

如果想深入体验LINUX系统的新手,也可以先下载一个方德Linux软件中心试用一下。
免费下载地址:http://www.nfs-cloud.cn:81/appCenter/open/softcenter

今天关于PHP重定向与POST数据php 重定向的介绍到此结束,谢谢您的阅读,有关CakePHP 2.4重定向()与POST数据?、host文件--ip重定向、jquery – 外部django重定向与POST参数、Linux Shell 数据重定向(输入重定向与输出重定向)等更多相关知识的信息可以在本站进行查询。

本文标签: