C02—CISC474, Spring 2007
PHP+MySQL application: you design it
Proposal Due |
Code Due |
Presentation Due |
Points |
Group or Individual |
Wednesday:
03/14/2007 |
Friday:
05/04/2007 |
Monday:
05/07/2007 |
100-300 |
your choice |
For this assignment, you implement a webapp using PHP/MySQL. The development platform is cisc474.acad.cis.udel.edu.
To get credit for this assignment, you should
- First prepare a proposal, which you must submit by Wednesday March 14th. The proposal should provide a brief description of the main functionalities of the web app—all the "stories". It should also indicate whether you plan to do the project as an individual or as a group.
- You are encouraged to make a proposal that contains at least "two phases", i.e. phase I will is this basic app, phase II will add these features, phase III will add these other features. That way, if you are not successful in completing all of the phases, you can at least get partial credit for the parts that do work.
- I will let you know if your proposal is accepted no later than Wednesday March 4, and indicate the point value for each phase. The total value of all phases proposed will be between 100 and 300 points, depending on the scope of what is proposed.
- You develop the web site, along with documentation in the form of a wiki, and source code as both an SVN repository, and as a tarball or zip file. The distribution should contain a README.txt and/or INSTALL.txt with instructions for taking your code and getting the web site up and running on a standard PHP+MySQL platform. The final version of the code (tarball / zip file) should be submitted on WebCT and the SVN repository "frozen" by midnight 05/04, though you are encouraged to finish it sooner.
- The documentation should enable a future CISC474 to take your SVN repository and/or your distribution, and pick up the project from where you left off (to make enhancements, bug fixes, etc.)
- You agree to leave the code with an open source license so that future CISC474 students can continue work on it.
- You agree to be ready to present your code to the class by Monday 05/07/2007.
Grading
Grading will be based on whether the final product is usable and useful—not on "how hard you worked on it". So, it is important to be modest in what you propose. A very simple, modest application that is useful, written skillfully, and works well will earn more points that a flashy ambitious one that falls on its face. Go for functionality, not flash—but don't negect usability.
Some things that should be true for every PHP/MySQL app
It should be possible to take your tarball or zip file, unpack it on a web server with PHP available, go through a straightforward and well-documented configuration step, and then have it up and working.
Some tips:
- If your application relies on a MySQL database with certain tables, you should include a script that creates the necessary tables, and populates them with any initial data that needs to be stored in them.
- There should be no hard coded dependencies on being deployed on a specific host. Where possible, all URLs within the app should be relative URLs. Where this is not possible, there should be a simple, well-documented configuration process.
- All configuration should be done in ONE configuration file, or via ONE configuration script. Do NOT include in your configuration instructions such as "Do a search and replace and change all references in the code to foo.udel.edu to the name of your host".
- The same is true of the MySQL database. You should not hard code the name of the database, the host on which it resides, or the MySQL username/password used to access it—all of those should be configurable.
- All of the database tables for your app should use some common prefix in the table name, e.g. (xyx_customers,xyz_products,xyz_users), rather than (customers,products,users).
- If your application relies on a MySQL database with certain tables, you should include a script that creates the necessary tables, and populates them with any initial data that needs to be stored in them.
Suggestions
Choosing good "phases", each of which is independently useful, is very important. So is doing unit testing, and disciplined version control—be sure to get something simple working first and check it in to the repository before moving on to something more complex, and don't check in broken code!