Ready to watch this entire course?
Become a member and get unlimited access to the entire skills library of over 4,900 courses, including more Developer and personalized recommendations.Start Your Free Trial Now
- View Offline
Starting with the what and why of CodeIgniter, Jon introduces key concepts such as the MVC pattern and libraries by demonstrating how to create static pages, then storing and displaying magazine info in a database. Advanced topics like classes and helpers are explored to validate user input, upload files, and much more. By creating a complete system, you'll have the foundation to build your own applications with CodeIgniter.
- What is CodeIgniter?
- Creating a static page controller
- Generating output with a view
- What is a model?
- Saving data with Active Records
- Creating forms
- Validating user input
- Listing records in tables
- Uploading images
- Viewing and deleting records
Skill Level Intermediate
File uploads can be a pain, but CodeIgniter tries to eliminate some of the more obnoxious parts using the file uploading class which is especially helpful for images. File uploads consist of the following process. First, the file form element is displayed to the user. Then, the form is submitted and the file is uploaded. Based on file upload preferences such as image height, width or maximum size, the file is validated. When validation is past, the file metadata is available for use. I'm going to allow users to upload cover images of the back issues. First, switch to a terminal and navigate to the root directory of your CodeIgniter installation, verify that you're in the right place. Next, make a directory that you can use to upload files to. Mkdir, space, upload.
Next, set the permissions on that directory. Chmod 755 is a best practice. In a worst-case scenario, use 777 but this is almost never necessary and not recommended, as it's a big security risk. Now that the designation exists, I can go back to the IDE. Open up the magazine controller, I'm going to create a configuration array for file uploads. This also handles validation so, this part is fairly important. There's a comprehensive list of all the options in the user guide at ellislab.com. So, starting with configuration array, config equals array. The first step is the upload underscore_path which is just upload. Next, specify the allowed file extension types.
Allowed_types and we'll set that to gif, jpg and png. Then, the maximum file size in kilobytes, max_size I'll set it to 250. The maximum width and pixels max_width 1920 and maximum height max_height and we'll set that to 1080. Finally, the upload library can be loaded with a configuration, this, load, library, upload and pass it to config.
Then navigate to the form validation. The form validator doesn't actually check file uploads, which is a bit goofy. Instead, I'm going to have to explicitly specify a file upload check, using do_upload and the name of the form element. If you're uploading multiple files, you will have to do multiple do_uploads. If you leave out the name of the form element, it won't work. Finally, I'm going to make file upload optional, by checking the files array, then preforming validation. As ugly as this looks, this is the recommended method. So, I'm going to navigate to the form validation run. I'll start with check_file_upload equals false.
if is set, the FILES super global, issue_cover error and files issue_cover error not equals 4, check_file_upload equals true. Then, we'll change the if on the validation run. If the form validation fails or check_file_upload and not this, upload, do_upload using the key issue_cover, we'll wrap this whole section in parenthesis and save.
The last piece of the puzzler for the controller, is what to do with the uploaded file. Just before issue_save, get the uploaded file metadata, upload_data equals this, upload_data. If it exists, set the issue_cover to the file name. If is set, upload_data, key, file_name, issue, issue_cover equals upload_data, file_name.
Save the controller, then go to the magazine form view. Immediately following the echoed validation errors, I'll need to explicitly display the upload errors. Yes, it's separate from the form upload. PHP echo, this, upload, display_errors. And it's going to take two arguments which is the opening, div, class, equals alert, alert-error and close and followed by the closed div. Close the PHP tag, and then I will need to switch the form open to a form open multi part to handle the uploaded files.
Before the Submit button, let's create the form element for the file upload. Div, PHP echo form_label, cover scan, then issue_cover is the name. Close the PHP. And PHP echo. Then I'm going to use the form helper, form_upload, with the name of the field as an argument. form_upload, issue_cover. Save, then go back to the browser. Let's click, Add, to see the new file form.
Let's create issue number five of Sandy Shores, with a publish date of 2013-06-01. Click save and it should be successful as the file upload is optional. Let's go back to Add, and add issue number two of Sandy Shores with a date 2013-02-01, but this time I'll upload. Go to Assets > NotAnImage.txt. Click Open, and Save. It'll be correctly rejected as disallowed.
Finally upload the JPEG version of issue number two And that should work, success. Check the upload directory as well. Now, if I go back to the magazine list, I can see that there's a duplicate entry for issue number two and I can't see the covers. Mm-hm, maybe I should do something about that.