我正在使用Wufoo API V3将我网站上托管的表单中的数据提交到我的Wufoo帐户。我按照[Entries POST API] [1]页面上的示例,我能够将数据成功发送到我的帐户。
我想知道如何检查错误消息,并使用PHP显示每个文本输入字段的ErrorText?
例如,如果有人未在所需的电子邮件字段中提供其电子邮件地址。
这是我到目前为止的代码:
<?
function submit() {
$ref = curl_init('https://myname.wufoo.com/api/v3/forms/xxxxxx/entries.json');
curl_setopt($ref, CURLOPT_HTTPHEADER, array('Content-type: multipart/form-data'));
curl_setopt($ref, CURLOPT_POST, true);
curl_setopt($ref, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ref, CURLOPT_POSTFIELDS, getPostParams());
curl_setopt($ref, CURLOPT_USERPWD, 'XXXX-XXXX-XXXX-XXXX');
curl_setopt($ref, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_setopt($ref, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ref, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ref, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ref, CURLOPT_USERAGENT, 'Wufoo.com');
$response = curl_exec($ref);
echo $response;
}
function getPostParams() {
return array( 'Field4' => "you@company.com");
}
submit();
?>
更新(2011年11月12日):
MinisterOfPower,
感谢关于Wufoo PHP API Wrapper的[回复和建议] [2]。我现在正在使用API Wrapper并且它摇滚。我在将您提供的代码与表单集成时遇到了一些挑战。
例如,如果我在index.php上有一个表单(见下文),则需要一个电子邮件字段。在提交表单后,如何设置API包装器以在相应的输入字段旁边显示错误?
以下是 index.php 的代码:
<? require_once('my-wrapper.php'); ?>
<html>
<head>
<title>Form</title>
</head>
<body>
<form id="form1" name="form1" autocomplete="off" enctype="multipart/form-data" method="post" action="">
<div>
<label id="email" class="icons" for="Field4">Email</label>
<input id="Field4" name="Field4" type="text" class="formreg"/>
</div>
<div>
<label id="name" class="icons" for="Field6">Name</label>
<input id="Field6" name="Field6" type="text" class="formreg"/>
</div>
<input type="submit" name="saveForm" value="Submit" id="submit" class="submit" />
<input type="hidden" id="idstamp" name="idstamp" value="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=" />
</form>
</body>
</html>
以下是 my-wrapper.php 的代码:
$wrapper = new WufooApiWrapper('XXXX-XXXX-XXXX-XXXX', 'mysubdomain','wufoo.com');
$postArray = array();
foreach ($this->postValues as $value => $key) {
$postArray[] = new WufooSubmitField($key, $value);
}
try {
$result = $wrapper->entryPost('XXXXXX', $postArray);
if (!$result->Success) {
foreach ($result->FieldErrors as $key => $value) {
echo "Error on $key. Error Text: $value <br />";
}
}
} catch (Exception $e) {
//Read the error message.
}
更新(2011年11月20日):
我现在可以在MinisterofPower的代码和Wufoo API包装器的帮助下显示错误消息。我有几个跟进问题:
我想知道如何使用PHP设置下面的表单,以便在按下提交按钮时发布条目?
是否可以使用AJAX执行此操作,因此页面无法刷新?
以下是代码:
<?
// API
require_once('WufooApiExamples.php');
// Wufoo
$wrapper = new WufooApiWrapper('XXXX-XXXX-XXXX-XXXX', 'mysubdomain','wufoo.com');
// Post Entries
$postArray = array();
foreach ($this->postValues as $key => $value) {
$postArray[] = new WufooSubmitField($key, $value);
}
try {
$result = $wrapper->entryPost('xxxxxx', $postArray);
if (!$result->Success) {
foreach ($result->FieldErrors as $key => $value) {
$fieldError[$value->ID] = $value->ErrorText;
}
}
} catch (Exception $e) {
//Read the error message.
}
// Add Errors
function addErrors($fieldName, $fieldError, $add){
if($fieldError[$fieldName] != ''){
if ($add == 'message') return '<p class="errors">'.$fieldError[$fieldName].'</p>';
else if ($add == 'class') return 'class ="errors"';
}
}
?>
<!--Begin Form-->
<div <? echo addErrors('Field4', $fieldError, 'class') ?>>
<label id="profile" class="icons" for="Field4">Email</label>
<input id="Field4" name="Field4" type="text" class="formreg" tabindex="1"/>
<? echo addErrors('Field4', $fieldError, 'message')?>
</div>
<div <? echo addErrors('Field6', $fieldError, 'class') ?>>
<label id="profile" class="icons" for="Field6">Name</label>
<input id="Field6" name="Field6" type="text" class="formreg" tabindex="1"/>
<? echo addErrors('Field6', $fieldError, 'message')?>
</div>
<!--End Form-->
答案 0 :(得分:2)
API docs概述了检索响应的过程。此外,字段错误的标记找到了Dealing With Failure部分。
Wufoo为PHP和many other语言提供API Wrappers是没有价值的。我强烈建议使用其中之一,因为它们使这个过程变得更加容易。
使用Wufoo API,您将在响应对象中搜索Success值0,然后解析Field Errors节点,如下所示:
$wrapper = new WufooApiWrapper($this->apiKey, $this->subdomain, 'wufoo.com');
$postArray = array();
foreach ($this->postValues as $value => $key) {
$postArray[] = new WufooSubmitField($key, $value);
}
try {
$result = $wrapper->entryPost($this->formHash, $postArray);
if (!$result->Success) {
foreach ($result->FieldErros as $key => $value) {
echo "Error on $key. Error Text: $value <br />";
}
}
} catch (Exception $e) {
//Read the error message.
}
上面发布了一个后续问题,所以我会在这里添加我的答案。
您询问了如何在相关表单旁边显示错误。你可以用javascript或php做到这一点。我只会告诉你PHP的方式。
使用PHP,您可以重定向回到带有URL的GET参数值的表单,枚举错误字段和消息。所以,例如,你可以这样做:
for($result->FieldErrors as $name => $value) {
$str.="$name=$value&";
}
if($str) {
$str = '?errors=true&'.$str;
$host = $_SERVER['HTTP_HOST'];
$uri = rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
header("Location: http://$host$uri/$str");
exit;
}
然后,你将上面的代码包装在这个if语句中,以检查回发时的错误值,如下所示:
if($_GET['errors']) {
require_once('my-wrapper.php');
else
//Your HTML HERE
endif
之后,添加一些PHP条件,如果它们包含错误,则会将类名附加到字段中。例如:
<label id="Field4" class="icons <?php if ($_GET['Field4']) echo 'error'; ?>" for="Field4">Email</label>
最后,添加一些CSS以使用颜色或其他指示符调出错误字段。
另一种方法是使用javascript。
使用与上面相同的逻辑,但将以下脚本添加到您的页面(从here和here抓取。)
<script type="text/javascript" charset="utf-8">
function getQueryVariable(variable) {
var query = window.location.search.substring(1);
var vars = query.split("&");
for (var i=0;i<vars.length;i++) {
var pair = vars[i].split("=");
if (pair[0] == variable) {
return 'error';
}
}
}
function changeClass (elementID, newClass) {
var element = document.getElementById(elementID);
element.setAttribute("class", newClass); //For Most Browsers
element.setAttribute("className", newClass); //For IE; harmless to other browsers.
}
changeClass('Field4', 'error');
</script>
然后使用此标记:
<label id="Field4" class="icons" for="Field4">Email</label>
祝你好运。
PS:此代码是在SO中编写的,因此它可能包含语法错误。但你可以明白这一点......