自定义表单发布“数组”而不是用户输入值

时间:2013-08-27 01:20:32

标签: php arrays forms foreach postdata

我们正在使用Aheadworks帮助台模块,并尝试创建第二个表单以捕获特定信息,并使用该表单创建一个票证,其中所有表单内容都发布到帮助台的“内容”部分。

问题是,如果我使用name =“content”,那么发布到“内容”部分的内容就是“数组”

表单代码非常简单:

<form id="helpdesk-ticket-form" action="../helpdeskultimate/customer/new/" method="post" enctype="multipart/form-data"><input name="title" value="WHOLESALE SETUP REQUEST" type="hidden">
<div><label for="title_field">Name<span class="required">*</span></label><br> <input id="title" class="input-text required-entry" style="width: 250px;" name="" value="" type="text"></div>
<div>&nbsp;</div>
<div><label for="title_field">Company Name<span class="required">*</span></label>    <br><input id="content_field" class="input-text " title="Company" name="content" value="" type="text"></div>
<input name="department_id" value="2" type="hidden">
<div>&nbsp;</div>
<div><label for="content_field">Message<span class="required">*</span></label><br>     <textarea id="content_field" class="required-entry" style="width: 450px;" name="content" rows="10" cols="53"></textarea></div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div><label for="filename">Attach Reseller Permit (2Mb limit)</label><br> <input id="filename" class="input-file" style="width: 450px;" name="filename" type="file"></div>
<div class="button-set">&nbsp;</div>
<div class="button-set"><span><span><br></span></span></div>
<div class="button-set"><button class="button right form-button" type="submit"><span>  <span>Submit ticket</span></span> </button></div>
</form>

我尝试过使用name =“content []”,但它也返回了“Array”

该模块似乎正在使用此post方法:

public function newAction()
{
    if (!$this->_getCustomerSession()->getCustomerId()) {
        $this->_getCustomerSession()->authenticate($this);
        return;
    }
    $session = Mage::getSingleton('core/session');
    $customer = $this->_getCustomerSession()->getCustomer();

    $Proto = Mage::getModel('helpdeskultimate/proto');
    $postData = $this->getRequest()->getPost();

    if (isset($postData['department_id'])) {
        $Proto->setDepartmentId($postData['department_id']);
    }
    try {

        $Proto
                ->setSubject(@$postData['title'])
                ->setContent(@$postData['content'])
                ->setPriority(@$postData['priority'])
                ->setStoreId(Mage::app()->getStore()->getId())
                ->setFrom(Mage::getSingleton('customer/customer')->getId())
                ->setSource('web');

插入到消息字段似乎来自这里:

/* Insert */
    try {
        $message->setContent(trim($data['content']));
        $validateResult = $message->validate();

可以从http://www.gingabox.com/CustomerController.zip

下载完整的控制器文件

我不确定如何在@ $ postData ['content']中实际使用foreach语句,或者是否有更好的解决方案。

我很乐意问AheadWorks,但他们告诉他们他们现在不接受定制查询(太忙)......

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:1)

单词“Array”是将PHP数组转换为字符串时得到的;由于数组值可以包含任何内容,因此PHP不会试图找出如何转换数组并只返回字符串"Array"。这正是行中发生的事情:

// The trim() function casts $data as a string => string(5) "Array"
$message->setContent(trim($data['content']));

有些函数返回数组内容的字符串表示,例如print_r()。这将在多行字符串中吐出数组,因此在代码中包含该数组将是:

$message->setContent(print_r($data['content'], TRUE));

如果您希望将数组的内容作为单行字符串,则应该使用您在问题中提到的foreach()语句。这是一个简单的例子:

$contentString = 'Second Form values:' . PHP_EOL;
foreach($data['content'] as $key => $value) {
    $contentString .= PHP_EOL . '    ' . $key . ': ' . $value;
}

然后,您可以使用$contentString作为消息,而不是直接访问$data数组值。我不知道validate()方法在您的示例中做了什么,但在将它们用作电子邮件正文之前,确保您正确地转义第二个表单中的值绝对是一个好主意。

答案 1 :(得分:0)

如果您可以在HTML中更改表单定义,那么您可以将数组作为内容接收,请查看以下示例:

<form id="helpdesk-ticket-form" action="tescik.php" method="post" enctype="multipart/form-data"><input name="title" value="WHOLESALE SETUP REQUEST" type="hidden">
<div><label for="title_field">Name<span class="required">*</span></label><br> <input id="title" class="input-text required-entry" style="width: 250px;" name="content[name]" value="" type="text"></div>
<div>&nbsp;</div>
<div><label for="title_field">Company Name<span class="required">*</span></label>    <br><input id="content_field" class="input-text " title="Company" name="content[company]" value="" type="text"></div>
<input name="department_id" value="2" type="hidden">
<div>&nbsp;</div>
<div><label for="content_field">Message<span class="required">*</span></label><br>     <textarea id="content_field" class="required-entry" style="width: 450px;" name="content[message]" rows="10" cols="53"></textarea></div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div><label for="filename">Attach Reseller Permit (2Mb limit)</label><br> <input id="filename" class="input-file" style="width: 450px;" name="filename" type="file"></div>
<div class="button-set">&nbsp;</div>
<div class="button-set"><span><span><br></span></span></div>
<div class="button-set"><button class="button right form-button" type="submit"><span>  <span>Submit ticket</span></span> </button></div>
</form>

请注意更改的表单名称,例如content[message]content[company]等。这应该解析为值数组。

相关问题