web-dev-qa-db-fra.com

Soumission du formulaire Codeigniter avec téléchargement de fichier

im essayant d'écrire un code où je peux soumettre un formulaire entrer le contenu dans une base de données, en même temps, effectuer un téléchargement de fichier et le stocker dans un dossier à l'intérieur de mon serveur

l'emplacement du dossier s'appelle uploads qui se trouve à la racine de mon site

voici mon code

contrôleur (site.php)

 <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

 class Site extends CI_controller {

public function __construct()
{
    parent::__construct();
    // Your own constructor code
    $this->load->model("site_model");
    $this->load->helper(array('form', 'url'));
} 

public function cmain($type,$page)
{
    $data = $this->_initialize_data(); //this is just a bunch of variables that im calling in another function
    $data['type'] = $type;
    $data['page'] = $page;
    $this->load->vars($data);
    $this->load->view('site/cmain');
}


public function m1()
        {               

        $this->load->library('upload', $config);

            if(isset($_POST['m1']))
            {
                $suffix = $this->input->post("suffix");
                $fn = $this->input->post("fn");
                $mn = $this->input->post("mn");
                $ln = $this->input->post("ln");


                $newdata = array('suffix'=>$suffix,
                                'fn'=>$fn,
                                'mn'=>$mn,
                                'ln'=>$ln,

                                 );
                //this code is for the file upload
                           $config['upload_path'] = 'uploads';
                           $config['allowed_types'] = '*';

                           $this->load->library('upload', $config);

                           $data = array('upload_data' => $this->upload->data());
                 //end of file upload codes                 

                $this->db->insert('myself', $newdata); 

                redirect(base_url() . "site/complaint");    

            }

        }

voir (cmain.php)

<form action="<?php echo base_url();?>site/m1" name="details" id="details" method="post" enctype="multipart/form-data">
        <table class='table' width="100%">
            <tr>
            <td colspan='2'>
                <b><font color="#3B608C">Personal Information</font></b>
            </td>
        </tr>
        <tr>
            <td>
                Suffix  (e.g. Jr., III)
            </td>
            <td>
                <input type="text" name="suffix" id="suffix" value="">
            </td>
        </tr>
        <tr>
            <td>
                First Name*
            </td>
            <td>
                <input type="text" name="fn" id="fn" value="">
            </td>
        </tr>
        <tr>
            <td>
                Middle Name*
            </td>
            <td>
                <input type="text" name="mn" id="mn" value="">
            </td>
        </tr>
        <tr>
            <td>
                Last Name*
            </td>
            <td>
                <input type="text" name="ln" id="ln" value="">
            </td>
        </tr>
</table>

            <table>
        <tr>
        <td width="50%">
        Please attach documents pertinent to these complaints. <br>
        (Attach a Zip file if more than one document)<br>
        </td>
        <td align="center">
        <input name = "userfile" type="file" class="input-xlarge" id = "userfile" />
        </td></tr>
        </table>
        <input type="submit" value="Submit Form" class="pull-right" id="submit" name="m1"/>
</form>

le formulaire est correctement posté dans la base de données, comme le suffixe, fn, ln et mn mais le téléchargement de fichier ne fonctionne pas

j'ai essayé de mon mieux pour suivre ce que les échantillons de codeigniter et seulement obtenu les lignes je pense que j'avais besoin

est-ce que je fais quelque chose de mal?

merci

10
itsover9000

enfin réussi 

je l'ai utilisé pour la partie de téléchargement de fichier

                //start of file upload code
                $config['upload_path'] = './uploads/';
                $config['allowed_types'] = '*';
                $this->load->library('upload', $config);
                $this->upload->do_upload();
                $data = $this->upload->data();
                //end of file upload code

et changé le 

<form action="<?php echo base_url();?>site/m1" name="details" id="details" method="post" enctype="multipart/form-data">

dans 

<?php echo form_open_multipart('site/c_upload');?>
5
itsover9000

Je pense que vous devez définir la préférence de téléchargement de fichier

$config['upload_path'] = './uploads/';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = '100';
$config['max_width'] = '1024';
$config['max_height'] = '768';

Assistant de formulaire

$this->load->helper(array('form', 'url'));

Pour plus de détails jeter un oeil

1
Owais Alam
  • Avez-vous défini des autorisations d'écriture pour le dossier 'uploads'? (exemple: php.net/manual/en/function.chmod.php)

  • Faites toujours du développement piloté par les tests. J'ai obtenu ci-dessous le bloc de code de cette URL

    if ( ! $this->upload->do_upload())
    {
        $error = array('error' => $this->upload->display_errors());
    
        $this->load->view('upload_form', $error);
    }
    
0
OMG