Albus One
Albus One

Reputation: 191

prestashop file upload won't work

I am trying to implement file upload in Order Detail page.

Created form

<form action="" method="post" id="uploadForm" enctype="multipart/form-data">
  <label for="fileUpload">{l s='File to upload:'}</label>
  <input type="hidden" name="MAX_FILE_SIZE" value="2000000" />
  <input type="file" name="fileUpload" id="fileUpload" />

<div class="submit">
    <input type="hidden" name="id_order" value="{$order->id|intval}" />
    <input type="submit" class="unvisible" name="submitMessage" value="{l s='Send'}"/>
    <button type="submit" name="submitMessage" class="button btn btn-default button-medium"><span>{l s='Send'}<i class="icon-chevron-right right"></i></span></button>
</div>
</form>

and added this to OrderDetailController.php

if (Tools::isSubmit('submitMessage')) {
   $idOrder = (int)Tools::getValue('id_order');
   $msgText = Tools::getValue('msgText');

   if (isset($_FILES['fileUpload']['name']) && !empty($_FILES['fileUpload']['name']) && !empty($_FILES['fileUpload']['tmp_name']))
   {
     $this->errors[] = Tools::displayError('Works');
   }
   ...

Now when i submit form - it saves message and completely ignores file.

Does anyone know why?

Upvotes: 2

Views: 1342

Answers (2)

Albus One
Albus One

Reputation: 191

Solved myself. Answered here

It was ajax issue not sending $_FILES[] data

Upvotes: 1

TheDrot
TheDrot

Reputation: 4337

I'm assuming you placed this into order-detail.tpl of default template.

You put your file input into a separate form that doesn't do anything since it does not have a submit button. The comments form on that page is a completely different one that's why your input is ignored.

What you want to do is place your html code without <form> tags into a proper form that submits message. The form is at the bottom of order-detail.tpl.

<form action="{$link->getPageLink('order-detail', true)|escape:'html':'UTF-8'}" method="post" class="std" id="sendOrderMessage">
    <h3 class="page-heading bottom-indent">{l s='Add a message'}</h3>
    <p>{l s='If you would like to add a comment about your order, please write it in the field below.'}</p>
    <p class="form-group">
        <label for="id_product">{l s='Product'}</label>
        <select name="id_product" class="form-control">
            <option value="0">{l s='-- Choose --'}</option>
            {foreach from=$products item=product name=products}
                <option value="{$product.product_id}">{$product.product_name}</option>
            {/foreach}
        </select>
    </p>
    <p class="form-group">
        <textarea class="form-control" cols="67" rows="3" name="msgText"></textarea>
    </p>

    <!-- Your html snippet -->
    <p class="form-group">
        <label for="fileUpload">{l s='File to upload:'}</label>
        <input type="hidden" name="MAX_FILE_SIZE" value="2000000" />
        <input type="file" name="fileUpload" id="fileUpload" />
    </p>

    <div class="submit">
        <input type="hidden" name="id_order" value="{$order->id|intval}" />
        <input type="submit" class="unvisible" name="submitMessage" value="{l s='Send'}"/>
        <button type="submit" name="submitMessage" class="button btn btn-default button-medium"><span>{l s='Send'}<i class="icon-chevron-right right"></i></span></button>
    </div>
</form>

Upvotes: 0

Related Questions