创建一个php/mysql表单以嵌入到许多不同的网站上

创建一个php/mysql表单以嵌入到许多不同的网站上,php,jquery,Php,Jquery,我不知道从哪里开始,如果有人能给我指出正确的方向,我将不胜感激。我想创建一个简单的表单“widget”,用于嵌入不同的网站 其想法是表单驻留在我的服务器上,表单信息将提交到我服务器上的数据库,但将嵌入到其他站点 **表单具有基于$\u GET变量填充的动态下拉菜单。例如,如果我使用iframe,它会像这样 <iframe src="http://www.example.com/form.php?id=555"></iframe> 我应该使用iframe还是javas

我不知道从哪里开始,如果有人能给我指出正确的方向,我将不胜感激。我想创建一个简单的表单“widget”,用于嵌入不同的网站

其想法是表单驻留在我的服务器上,表单信息将提交到我服务器上的数据库,但将嵌入到其他站点

**表单具有基于
$\u GET
变量填充的动态下拉菜单。例如,如果我使用iframe,它会像这样

<iframe src="http://www.example.com/form.php?id=555"></iframe>


我应该使用iframe还是javascript更好,有更好的方法吗?我需要注意哪些安全问题?

我以前从未做过类似的事情。但是您可以使用jQuery从外部链接加载表单

$("#feeds").load("feeds.html");
您可以使用一些PHP来实现

include 'your external path';
然后,您的表单可以如下所示:

<form action="yourExternalActionLink" method="post or get">
some tags...
</form>

一些标签。。。

我认为除了使用iFrame,您没有其他选择

大多数现代浏览器甚至不允许使用ajax/Javascript访问除您自己的域之外的网站


您必须使用iframe,只要您希望这些内容驻留在您自己的服务器上以便轻松更新

您最好的解决方案就是使用iframe

不能使用javascript执行此操作的原因是因为大多数浏览器都有关于跨站点脚本的安全策略

使用iframe,您将能够为最终用户提供一个URL,然后他们将能够将框架定位到他们想要的任何位置。我想您可以为每个用户提供一个带有特定路径的URL,或者提供一个变量来定义用户

比如:

<iframe src="http://yourdomain.com/form/?clientid=12345&style=woodgrain"></iframe>

浏览器源策略的一个问题是,网站所有者将无法自行设置表单的样式,也无法以任何方式操纵iframe中的DOM。这实际上可能是一个祝福或诅咒你,取决于具体情况


如果在提交表单后需要执行操作,则始终可以让站点使用脚本,该脚本的函数在第一次迭代期间不执行任何操作,但在第二次迭代时会更改iframe源,甚至将其从父站点的DOM中删除。这将通过iframe标记中的onLoad=“”操作完成

我实际上还没有尝试过,但是有很多技术可以实现跨域ajax请求。这里有一个:。解决此问题的javascript解决方案如下:

$.ajax({
    url: 'yoursite.com/forms/272.json?param1=23&param3=df',
    type: 'get',
    success: function (response) {
        //populate a form with response data.
   }
});
因此,您在服务器上编写了一个API,该API将返回有关表单外观的JSON,并传递您需要的任何参数。您可以返回JSON,并可以根据自己的喜好构建表单。无论如何,这就是javascript解决方案


但正如其他人所提到的,跨域ajax并不是你应该能够做到的事情,至少我是这么认为的。因此,如果您有兴趣尝试这种方式,我会更深入地研究YQL(国防部用来实现这一点的功能):

如上所述,跨浏览器安全限制限制了您的选择

我知道有4种方法可以解决这个问题。JsonP可能是最灵活的,但是为了完整性,我在这里把它们都包括进来了

1) iframe是最简单的,但您的小部件对包含它的网站的访问权限有限,反之亦然

2) Jsonp=most flexible—这通过使用标记来实现。您的服务器端代码接受一个回调参数,并在它传回的任何json前面标记它

php中的示例

 <?php
header("content-type: application/json"); 

$json = array('example'=>'results');

// Wrap and write a JSON-formatted object with a function call, using the supplied value of parm 'callback' in the URL:
echo $_GET['callback']. '('. json_encode($json) . ')';    

?>
您的小部件消费者可以复制粘贴,也可以通过脚本src调用直接从web服务器加载所需的javascript。

3) DNS别名-要求您的小部件的所有用户在其DNS中为您的服务器创建一个条目,以便其位于同一顶级域中。IE point-widgetprovider.consumersdomain.com连接到您的服务器。(您将需要一个固定的ip,因为为所有域设置虚拟主机会很麻烦)然后您可以像上面那样使用脚本标记加载javascript,但您不必担心jsonp,可以使用标准ajax调用与站点交互

4) Silverlight Flash—通过在服务器上包含xml文件,可以绕过跨域策略


奖金-我认为,一旦WebSocket角色真正公开,您就可以使用它来实现这一点。

如果您想做一些开箱即用的事情。。。你为什么不试试Zoho creator表单?! 它使用方便


最省力的解决方案是将表单作为
小部件提供。顺便说一句,这是一种安全问题最少的方法。许多用户也喜欢简单的html代码段,但并非100%的网站都能够/热衷于嵌入它们。表单是否必须异步提交?您无法从外部链接获取内容。浏览器通常不允许这样做,因为跨浏览器源代码策略。通过iframe传递get变量是否存在任何已知问题?没有。您可以轻松地传递查询字符串变量。一个简单的谷歌搜索也可以为您提供示例代码。尽管我可以尝试,但我不明白Jasonp是如何绕过跨站点脚本问题的?请注意这一点,因为YQL提供的是缓存,所以您无法执行“实时”跨域ajax请求。他们不是一个门户。
$.ajax({ url:'http://yourserver.com/ajax.php', 
      dataType:'jsonp',
      success: function(data)
                  { alert(data); }
       });