1

我将给出一个我需要能够做什么的基本示例,希望有人能指出我正确的方向,尽管我确定我要问的人是当他们面对自己时阅读。不管怎样,就到这里吧。

我在站点 Y 的页面上有一个表单(我们称之为 form.php),该表单看起来像这样(只要求输入用户名和密码):

<form action="http://SiteX.com/validate.php" method="post">
Email Address: <input type="text" name="email">
Password: <input type="password" name="password">
<input type="submit">
</form>

如您所见,表单托管在站点 Y 上,并将信息提交到站点 X 上的页面。

站点 X 上的 validate.php 检查站点 Y 提交的登录详细信息并返回登录详细信息是否有效,有点像这样(显然比这更复杂):

$SubmittedEmail = $_POST['email'];
$SubmittedPassword = $_POST['password'];

$CrossReferenceEmail = 'someemail@dontcare.com';
$CrossReferencePassword = 'apassword';

if ( ($SubmittedEmail == $CrossReferenceEmail) && ($SubmittedPassword == $CrossReferencePassword) ) {
echo 'Valid';
} else {
echo 'Not Valid'; }

我需要做的,我不知道该怎么做,是如何让“form.php”等待回复(无论登录详细信息是否有效),然后根据该回复做一些事情?

4

3 回答 3

1
<form id="Form" action="http://SiteX.com/validate.php" method="post">
Email Address: <input type="text" name="email">
Password: <input type="password" name="password">
<input type="submit">
</form>


$("#Form").submit(function(event) {

  /* stop form from submitting normally */
  event.preventDefault();

  /* get some values from elements on the page: */
  var $form = $( this ),
      e = $form.find( 'input[name="email"]' ).val(),
      p = $form.find( 'input[name="password"]' ).val(),
      url = $form.attr( 'action' );

  /* Send the data using post */
  var posting = $.post( url, { email: e,password:p } );

  /* Put the results in a div */
  posting.done(function( data ) {
   if(data=='valid')
   alert('login successful');
   elseif(data=='Not Valid')
   alert('login not successful');
  });
});
于 2013-02-07T06:33:06.937 回答
1

非常基本和简单的方法是通过java 脚本使用httpRequest并从站点 X 获取返回值,如果匹配则将数据提交到站点 Y 中的任何 php 文件。如果您想知道,我可以发送一个示例来帮助您。

这种方式对用户更友好,但需要客户端进程。另一种方法是使用获取内容功能。

另一种方式:

您可以使用站点 Y 上的get.php文件并将数据提交到get.php

get.php文件中使用file_get_content函数并通过 get 方法提交用户名数据(添加到 url 的末尾,如示例)然后检查返回值(真或假)

例子 :

$SubmittedEmail = $_POST['email'];
$SubmittedPassword = $_POST['password'];

$homepage = file_get_contents("http://www.example.com/x.php?email=SubmittedEmail &password=$SubmittedPassword&...[other parameters]");

在 www.x.com/x.php

您可以通过 get 方法获取电子邮件和密码并回显结果。

$hompage中的returnet 值是站点 x 上的 x.php 文件的结果(真或假或您在站点 x 文件 x.php 上回显的任何内容)

在站点 x.com/x.php 上这样做以获取数据并将结果返回到 y 站点:

 $SubmittedEmail = $_GET['email'];
 $SubmittedPassword = $_GET['password'];
if ( ($SubmittedEmail == $CrossReferenceEmail) && ($SubmittedPassword == $CrossReferencePassword) ) {
echo 'true';
} else {
echo 'false'; }

更多帮助: http: //php.net/manual/en/function.file-get-contents.php

于 2013-02-07T06:39:44.950 回答
0

这样......您不能在表单传输后立即将 url 设置为“validate.php”,因此原始 form.php 及其代码不再可用。

您可以做的是将 formtransmission 更改为 ajax-javascript,它将等待 validate.php 的响应而不关闭 form.php ...然后您可以做任何您需要做的事情。

(这和卷曲有什么关系?)

[编辑]

将此 javascript 添加到 form.php html 输出

function validate()
{
    var e = $('email').value;
    var p = $('password').value; //jQuery is easier to type
    // the same as
    // var p = document.getElementById('password').value;
    var req = new Request({
        url: '/validate.php?',
        method: 'post',
        data: {'email' : e, 'password' : p},
        onComplete: function(response)
        {
            if (response == "Valid" ) 
            {
                //do what you want on success
            }
            else
            {
                // do what you want on unsuccessful login
            }
        }
    }).send();
}

现在编辑表格(只是第一行)

<form onsubmit="validate();" method="post">

那应该做

于 2013-02-07T06:19:17.080 回答