Scrabble in PHP2
Scrabble in PHP2
1/07)
Date of birth
27/04/1989
Title
:I
hereby
declare that
I have read
thisPHP
thesis and in my
DESIGNING
SCRABBLE
USING
opinion this thesis is sufficient in terms of scope and quality for the
CONFIDENTIAL
award of
RESTRICTED
SignatureI agree
: ....................................................
OPEN ACCESS
that my thesis to be published as online open access
(full text)
2010/2011
Date : ....................................................
Certified by:
SIGNATURE
Date :
NOTES :
SIGNATURE OF SUPERVISOR
NAME OF SUPERVISOR
Date :
If the thesis is CONFIDENTIAL or RESTRICTED, please attach with the letter from
the organisation with period and reasons for confidentiality or restriction.
JUN
2011
ii
I declare that this thesis entitled Designing Scrabble Using PHP is the result of my
own research except as cited in the references. The thesis has not been accepted for any
degree and is not concurrently submitted in candidature of any other degree.
Signature : ....................................................
Name : Muhammad Aasim Asyafiie bin Ahmad
Date : ................................................
iiii
ACKNOWLEDGEMENT
First and foremost, I would like to thanks my supervisor, Dr. Sulaiman, for his
tolerance given throughout the period of the project.
I would like to appreciate my family for their support all this years. They have
been tolerant for many years despite my mysterious actions.
Last but not least, I would like to thanks the programmers on the web, novice or
professional who have directly or indirectly helped me with this project. Truly, the
Internet brings everyone closer than ever.
iv
ABSTRACT
PHP and the Internet go well with each other like bread and butter. The
practicality of PHP is undeniable and the world sees more and more website employ it to
greater length. Of course, PHP must be assisted by something else for it to work
beautifully. This project will use PHP, MySQL and JavaScript to attempt to create the
board game Scrabble. MySQL in this project is used to store the game configuration, the
players name, turn, score and all the letters with its scores. Simply put, its main job is
storing data. The data stored can be managed by using phpMyAdmin, the most
commonly used MySQL editor. What to do with the data will be determined by PHP
codes. JavaScript will be used to link between the player and the game. The moment the
player submit the letters, JavaScript will take all the data and link them to another PHP
page without the user refreshing their page. This PHP page will modify the data and
update them in the database. The project concludes that it is possible to create such
programme using PHP and its assistant.
ABSTRAK
Tidak dinafikan bahawa PHP dan Internet tidak boleh dipisahkan. Kesenangan
menggunakan PHP telah melahirkan banyak laman sesawang yang menggunakannya
dan angka ini masih bertambah. Akan tetapi, PHP perlukan bantuan software lain supaya
ia dapat berfungsi. Projek ini akan menggunakan PHP, MySQL dan JavaScript untuk
membuat permainan Sahibba. Dalam projek ini, MySQL akan digunakan untuk
menyimpan konfigurasi permainan, nama, giliran, markah pemain dan semua hurufhuruf beserta dengan markahnya sekali. Ia berperanan sebagai penyimpan maklumat.
Maklumat yang disimpan boleh diubah-alih dengan menggunakan phpMyAdmin, yang
merupakan pengubah-alih MySQL yang paling dikenali. Apa yand akan dilakukan
terhadapa maklumat yang disimpan akan ditentukan oleh kod-kod PHP. JavaScript pula
akan menghubungkan pemain dengan permainan. Tatkala pemain menghantarkan hurufhuruf yang telah disusun, JavaScript akan mengambil semua maklumat-maklumat ini
dan hantarkannya ke laman PHP yang lain. Laman PHP inin akan mengubah-alih
maklumat yang disampaikan dan akan mengubah maklumat dalam database MySQL.
Melalui projek ini boleh disimpulkan bahawa pembangunan software tersebut boleh
dilakukan dengan PHP dan software bantuannya.
vi
TABLE OF CONTENT
CHAPTER
TITLE
PAGE
DECLARATION OF THESIS
ii
ACKNOWLEDGEMENT
iii
ABSTRACT
iv
ABSTRAK
TABLE OF CONTENT
vi
LIST OF FIGURES
ix
INTRODUCTION
1.1
Background
1.2
Objective of Project
1.3
Scope of Project
1.4
Outline of Thesis
Introduction
2.2
PHP
vii
2.3
2.4
2.5
MySQL
JavaScript
2.4.2 jQuery
Studies on Scrabble
2.5.1 Introduction
10
METHODOLOGY
3.1
Introduction
12
3.2
12
3.3
Designing Board
16
3.4
20
3.5
21
3.6
24
25
25
3.7
Identifying Words
35
3.8
Getting Scores
36
3.9
Updating Turns
39
Introduction
41
4.2
Playing by Oneself
41
viii
4.2.1 Procedure
41
42
42
44
Conclusion
47
5.2
Problems
48
5.3
Recommendation
48
REFERENCES
50
ix
LIST OF FIGURES
FIGURE
TITLE
PAGE
2.1
Starting game
12
3.1
Index page
13
3.2
14
3.3
15
3.4
16
3.5
17
3.6
Designing board
18
3.7
18
3.8
Table game_board1
19
3.9
20
3.10
20
3.11
Table total_letters
21
22
3.13
23
3.14
23
3.15
24
3.16
The table that stores the chosen letter inside the database
24
3.17
25
Middle
3.18
27
3.19
28
3.20
29
3.21
30
3.22
31
3.23
32
3.24
34
3.25
34
3.26
35
3.27
36
xi
3.28
37
3.29
38
3.30
39
3.31
39
3.32
40
3.33
40
4.1
43
4.2
43
4.3
44
4.4
45
4.5
45
4.6
45
4.7
46
Chapter 1
Introduction
1.1
Background
Scrabble is played throughout the world and it does not take long until the game
found itself turned into a computer programme. But the majority of the programmes are
not written in PHP. This is understandable because PHP does not give much interactivity
to the programme. But, recent development in PHP allows for such interactivity.
1.2
JavaScript.
1.3
1.4
Outline of Thesis
This thesis consist of 4 chapters, the first chapter discusses the objective and
scope of the project. Chapter 2 discusses the theory and literature review to be used in
the project.
Chapter 2
2.1 Introduction
This chapter will study PHP in general, its strength and some of it in detail, its
brief history. PHP will usually be accompanied by MySQL, so it will only be
appropriate to introduce it, and what it does. Also, the tools used to work with PHP and
MySQL will be discussed. It will also delve to some extent on JavaScript, though not as
in-depth because it plays a small part in the project.
2.2 PHP
Safe to say, one should be knowledgeable about PHP when it comes to coping
with project like this. We will only discuss some general aspect about PHP and why is
PHP chosen based on its strength.
PHP is a scripting language specifically designed for the Internet. It also worth
mentioning it is a server-side scripting language. One can embed a PHP code inside an
HTML page and it will run whenever a user visits the page.
It is important to know some of its history to understand its strength. But, a full
length history can fill several pages. So, what will be covered here is just a gist of it. It
started around 1995 when Rasmus Lerdorf developed a script made from Perl/CGI to
know how much people are viewing his resume. Lerdorf named his creation as PHP. It
will not be long until the second version came about because people are clamouring for
its toolset. This time however its written in C.
It wasnt until the year 2000 that the world see PHP 4.0 which many would argue
as the languages official debut within the enterprise development scene. PHP 5.0 would
follow suit which improve some existing functionalities.
PHP have the ability to connect to a diverse number of databases. Apart from
the commonly used MySQL, it also can directly connect to PostgreSQL, mSQL, dbm,
FilePro, Hyperwave, Informix, InterBase, and Sybase databases.
PHP is designed specifically for the web. So when it come to designing web
sites, it can perform many useful task for the Web like generate GIF images, connect to
web services, work with cookies with few codes.
Over 180 libraries at developers disposal when they decide to use PHP. Plus, it
contains over 1,000 functions. PHP is most known for its ability to create pages
dynamically, interact with the databases, and modify form information. But PHP can
also manipulate AdobeFlash and Portable Document Format (PDF) file, check if the user
is the a particular person by comparing the data with the one from databases or from
stored flat files.
Still, others choose PHP because it is free. Now, free of charge is already a
tough price to compete with. Not only that, since its creation, users are allowed to
modify and redistribute without any restriction. Such software that met the previous
qualification is dubbed as open source software, and the Internet is practically a home
for such software. The Internet needs open source software to flourish and so is the other
way around. Its no wonder why PHP have garnered such popularity.
Practicality is one of the main reasons PHP was invented in the first place. PHP
is not created as a new language in of itself, but rather as a tool to solve unsolvable
problem during its time. The result is a language to build application with a minimum of
knowledge. Unlike C, there is no need to include some libraries before one is allowed to
programme. And PHP is loose type language so theres no need to typecast what a certain
variable is. For example, in C one must tell the programme whether a certain variable is
an integer, double, or string; but in PHP, one just create a variable and the programme
will employ a best-guess formula for typesetting the variable.
For now, theres no such thing as a GUI interface editor for PHP. The most we
can get is Dreamweaver. But even then, it mainly focuses on HTML and not PHP. There
exist several text editors for editing PHP. It works like a regular notepad but it will
recognise that the user is typing PHP and might highlight when a user a made mistake in
the syntax.
One of the best text editors is called Notepad++. It not only deals with PHP, but
will also work with JavaScript which used sometime to a lesser extent. But really though,
what one need is a text editor, even the regular one that comes with each computer can
be used.
2.3 MySQL
MySQL is a very fast, robust, relational management system (RDBMS). A
database will enable a user to store and manage data effectively. And let me tell you, this
project needs a lot of it. MySQL is available under a dual licensing scheme. It is free
under an open source license (GPL) and is free as long as you agree to comply with it.
MySQL is highly optimised but it lacks many of the features that are considered
standard.
MySQL comes with no GUI to manage its database within. We can use
command-line tools but that process is tedious and time consuming. So, to cope with this
problem, various GUI have been introduced to manage the database.
This project will use phpMyAdmin to manage the database. phpMyAdmin is
installed in many Web Hosts making it the most commonly used MySQL GUI tools.
Other tools can also be used if one is knowledgeable, but it should be noted that
phpMyAdmin is the standard.
2.4 JavaScript
PHP working with MySQL can produce stupendous results but it will not help
much when it comes to users interactivity. Its purpose is to introduce interactivity to the
user, to let the pages responds to the user when the user made a specific event.
Nowadays, it is virtually impossible to find any Web Page that does not contain some
sort of JavaScript code. It is worth mentioning that JavaScript have nothing to do with
Java, a more complex language.
images and so on. It let you to validate what a user has submitted in his or her forms
before submitting the forms to the server.
2.4.2 jQuery
JavaScript however have some disadvantages. It is inconsistent to begin with,
some browser supports it, and some doesnt. And it has a monstrous syntax and can make
a beginner run away before scratching its surface. It is then several ambitious developers
decided to introduce JavaScript libraries to make it accessible for the new and existing
developers by simplifying the whole thing.
There are several JavaScript libraries but the one that is most useful is jQuery. It
has a small file size and the syntax used is ridiculously easy. The latter is very useful.
Using raw JavaScript, several dozen lines of codes for a single task will be the norm,
jQuery on the other hand, makes life much simpler and not only that, it can perform
more tasks. The developer can now do more stuff by typing less. jQuery has done to
JavaScript, what CSS had done to HTML.
2.5.1 Introduction
Scrabble is a board game designed for 2 to 4 players. It is played on a game
board marked by 15x15 grid and all the players have to form words on this game board
10
to score points. The words can only be arranged horizontally or vertically and the words
must be available in a standard dictionary.
ii)
The player who starts the game will begin the game by forming a word in the
middle of the board either horizontally or vertically.
The next players will then put a letter anywhere near the words that had been formed
by previous player(s). This is better explained by referring to the figures below:
11
After finishing their turn, each of the players must take new letters from the sack
to replace the letter used when forming the word. But the total number of letters in each
of the players hand must still be 8 at a time.
Each of the player can pass their turn if such a need arises. The game ends if all
the letters in the sack has been used or the game have been passed three times
consecutively.
Chapter 3
Methodology
3.1 Introduction
In this project, the main pages will be written in PHP. The Javascript file will be
stored elsewhere alongside the PHP files. The database for MySQL will be stored in the
database.
13
The first table (the upper table), is designed by using the codes shown in figure
3.2. The code uses the method POST to send the required data to scrabble.php.
14
15
16
17
Figure 3.6 below shows part of the codes used to design this. Notice each of the
squares is designated with an id in integer form. And the JavaScript codes will forward it
to the function SelectSquare(x,y,z) in java2.js as shown in figure 3.7.
18
19
The id column designates the particular square on the board. And the value
column is to store what letters have been played on the particular id. We first extract the
data, store the data into a variable as shown in figure 3.9 and echo it out by using PHP as
shown in figure 3.10.
20
21
value is to indicate if the particular letter has been taken or not, 1 means it have not
been taken while 0 means it has.
The letters given to the player to arrange on the board is stored in a rack. Each
player will receive exactly seven letters and is placed inside a table with seven columns
and one row as shown in figure 3.12. All of the codes used in this part are in fillrack.php.
22
MySQL is used in order for the letters to appear inside the table. The process is
goes as follows:
i)
All of the possible letters are stored inside the database using MySQL.
Figure 3.13 shows part of the table. Value 1 means the particular letter is
available while 0 means it have already been taken.
ii)
Compute how many empty spaces a player has in his or her rack. If its the
beginning of the game, then the player has seven empty spaces. Figure
3.14 shows the code used.
iii)
Take the letters from the letter table in the database randomly. The
amount of letters taken from the database is determined by the players
available empty spaces. Figure 3.15 shows the code used.
iv)
The letters taken will be stored inside another table in the database that is
designed to store the players letter as shown in figure 3.16.
v)
From the table that stores the players letters from the database, the
programme will extract each of the letters and put them into an array.
Each player will have their own array.
vi)
These arrays will then be echoed into the table by using simple PHP
command.
vii)
If all working accordingly. The database will delete the letters chosen
from it to prevent duplicates.
23
24
Figure 3.16 The table that stores the chosen letter inside the database
25
ii)
Figure 3.17 The code that is responsible for detecting if the letter is in the middle.
In order to detect the adjacent letters, the programme will need to know the id of
each of the squares used to assign the letters. And from there, the programme will
compute if the ids used are adjacent to each other. There are two ways for the letters to
26
be adjacent to each others; vertical and horizontal. Each has its own formula, although
they are only slightly different from each other.
Lets take the process step by step. First, the player will click on the letters and
then click on the board. The programme will record the players move and store them
inside an array and then into the tableplayer1word. After the player finish arranging
words and clicked submit on the game board, the programme will run the function get( )
as from java2.js. The function is shown in figure 3.21.
27
This function is done with the help of jQuery.js. The function $.post(x,y,z) is
used to send data to a specified page, in this case its addword.php. And it will take the
variable and use it on the designated page. After the page have processed the variable,
the programme will produce an output based on the command. In fact, the third
perimeter can be thrown away because what we really want out of this function is to
process the variable using addword.php. And, by using this function, the browser will
not refresh.
The variables to be given to addword.php are the boardid and letterx arrays.
Each array has seven elements. The boardid array is the array used to store the id of the
square used while the letterx array is used to store the letter played. Each array
correspond to each other which means boardid [1] will refer to the location of letterx[1]
and so on. Also, note that each of the array elements have to be an integer to be able to
28
process it. So, the element of boardid [1] will become id1, element boardid2 become id2
and so on.
After that, addword.php will get the entire variable passed by the function get
( ) and store them again into an array. This is so that we can simplify the next process.
The code used is shown in figure 3.22.
29
With that done, the programme will check if theres already a letter next to the
right side of each of the letters played. To do this, the programme will first increase the
id for each of the letters played by one. And by using these new ids, the programme will
check if theres any existing letter from the table gameboard1. Then, the number of these
existing letters is calculated. If its zero, then it will go out of the loop. But if theres one,
the programme will then take the existing letter and put it into the table arrangewordx.
Figure 3.24 shows the codes used for this process. Also, note that this process is used for
every letter played.
30
But, the programme had only done checking the right side of the letters played
and it have not checked if theres a letter to the right side of the existing letters. Its
basically the mirror image of the previous step. Figure 3.25 shows the code for this
process. Note the difference is from what table are the data extracted. This time the
programme take them from player1wordinstead of gameboard1.
31
An adjacent letter can exist in four different directions. So far, the programme
has only managed one of them. Next is to check if there are any adjacent letters to the
left. To do this, the programme needs to only do minor changes to the previous two steps.
Check the fourth line in figure 3.24 and figure 3.25, $idarray[$x] + 1 indicates that the
programme is checking the right hand side of the square. If we change it into
$idarray[$x] 1, the programme will now checking the left hand side.
After finish checking the horizontal side of the board, the programme now has to
check the vertical side of it. The process is, again, similar and what changes are the
variables. Figure 3.26 shows the code for checking if there are any adjacent letters at the
upper part of the letters.
32
The programme now needs to check if there any upper adjacent letters relative
to the existing letters and if there are any adjacent letters below relative to both the
played letters and existing letters.
Take from the game board all the squares used and get their ids. Note,
this does not include the letters used by the players.
ii)
All the squares ids are then added by one. This is to detect if there are
letters at the right edge of the existing words. The modified ids are then
stored inside an array.
33
iii)
All the unmodified squares ids are then added by fifteen, and that also
stored inside an array. This is to check if there are letters adjacent
vertically to the existing words.
iv)
The unmodified squares ids are once again modified by subtracting them;
first with one and then stored inside an array. Then, the original squares
ids are again subtracted but by fifteen this time, and again stored inside
an array. The former is to check if there are adjacent letters on the left
while the latter is to check if there are adjacent letter above the existing
words.
v)
The programme then checks the squares used by the player. If any of the
id used by the player matched with any of the elements inside any four of
the arrays that were previously created, then the programmes will know
that the player is linking their letters with those that are already exist on
the game board. The programme will then check to see the square the
player is trying to link with and get its id.
vi)
The programme will then check if all the letters used by the player and
the existing letter on the board the player trying to link are adjacent to
each other either horizontally or vertically.
If all these steps are satisfied, the programme will acknowledge that the letters
are adjacent to each other.
After all that, the programme still has ways to go. The programme will take all
ids for each of the existing letter from the table gameboard1 and split them into four
different arrays. The first will have its entire id increase by the value of one. Another
one decreases them by the value of one. The third one will increase them by the value of
fifteen, and the fourth one will subtract them by fifteen. Figure 3.27 shows the code for
this process.
34
After that, the programme will check if any of the elements of each of the four
new arrays are overlapping with the ids from the letter played by the player. If any of
them overlap, the programme will let the programme pass through the later if statement
by assigning value to the variable $allow as shown in figure 3.28.
This code allows for limit but there are still some holes left. The last part of the
process is to take the id for all the letters played and subtract them with one another.
35
Since the programme had already arranged the id from lowest to highest, it will only
need slight addition. The code is shown in figure 3.29.
The reason to do this is due to the fact that, if each of the squares have its ids
separated by any number that can either be divisible by fifteen or by itself, then the
letters played are adjacent to each other.
To accomplish this, the programme will use a lot of tables inside the database.
Each of the players will have two tables for them in the database. One is to store word
that happens to be arranged horizontally and the one for the vertical word.
After the programme determine that the letters are arranged adjacent to each
other. It then needs to know if the letters are arranged horizontally or vertically. If the
letters are arranged horizontally, the letters used by the players along with the letters the
36
player trying to link with will be placed inside a table to store horizontal words. If the
letters are arranged vertically, the letters will be placed in a table for vertical letters.
Next, the programme will then arrange the letters by id from lowest to highest.
Because this will arrange the letters from left to right or from top to bottom and from
this a word will be formed.
In addition to the intrinsic scores of the letters, each of the squares on the board
will also have its own score multiplier as shown in figure 3.10. There are three columns
this time. The column id is, again, the id of a particular square on the board. The column
multiplier is how much the intrinsic is going to be multiplied if a particular letter is
played on a particular square. And the column range requires a bit more explanation. If
37
the value of range is W, which stands for word, then the score will first get the total
score of the word first and then multiply it with the appropriate multiplier. If, however,
the value is L, which stands for letters, the particular letter on the particular square will
be multiplied first and then added to the total score.
Figure 3.28 Picture shows the multiplier for each of the letter
Thats the part that requires MySQL. For calculating the scores, the codes are in
addword.php.
38
The first step is to get all the letters from the word that has been identified in the
previous step. Next, identify the square of all the letters used. And identify the intrinsic
score of each of the letter used. From here the code can take one of two paths.
First, if one of the letters is played on a double or triple letter square. The
intrinsic score of the particular letter on that square will need to be multiplied by a
specified amount and that will become the letters new score. After all the score
modification on all the letters, the code will then identify the rest of the letter and get
their intrinsic score. And finally, the code will add them all up and store the score inside
a variable.
The second route is when one of the letters played is on a double or triple word
square. The code will first get all the letters intrinsic scores and add them all up and
store them inside a variable, and then it will multiply the total score with the specified
amount according to the square.
39
The above process is repeated twice to account for words that are arranged
vertically and horizontally.
The score will be stored inside a table in the database. The score the player
managed to get will then be stored inside the database along with the number of turn the
word was played. Figure 3.12 shows part of the code for this purpose and figure 3.13
shows the table that is used to store the score inside the database.
40
end of turn of a player, the data inside those temporary tables will be deleted. Figure
3.14 shows the codes used for such effect.
The letter used by the players will be deleted from their racks so to allow new
letters to be added and to avoid duplicates. Some of tables are used for arranging the
letters used by the player so to allow an English word to emerge.
Since the letters arranged on the board are done using MySQL, it is important
that before ending the turn, to update the table that is used for it by using a simple code
as shown in figure 3.15.
Chapter 4
4.1 Introduction
For this project, only two experiments are performed. One is to play the game
by using only one computer. And the other is to use several computers. Both
experiments is to start from the beginning until the end of the game.
4.2.1 Procedure
Now, to try out all these rules, we have to abandon the correctness of the English
language.
1) A simple index page is set up to register the player
42
2) See if the programme only allow for players to start in the middle (an
important rule).
3) Test if the programme will be able to detect the word right next to it.
4) Form random words and see if the programme is able to figure out what word
it needs to record.
5) From the previous words formed, check to see if the scores are calculated the
way they are meant to be.
43
44
4.2.2.2
we have a game board as in figure 4.3. And we wish to add a letter at the bottom of L.
The result is as in figure 4.4 and the score table in the database is able to record the
specified word and scores as shown in figure 4.5.
45
46
42
CHAPTER 5
5.1 Conclusion
PHP unfortunately is not a prime language when it comes to designing games. So,
it will be tough for a programmer to design a game based solely on PHP.
The goal of this project is to design a Scrabble game by using PHP. Unfortunately,
PHP alone is not capable of doing it and must employ the help of MySQL to accomplish it.
Turns out, PHP does not play that much of a big role in this project against MySQL. The
PHP codes used in this programmes are basic and does not employ much need of web
interactivity anyways.
MySQL plays a big part in this project. From recording game configurations to
arranging words so that PHP can figure it out. Again, the codes for MySQL are also basic.
The real difficulty is designing the logic. Safe to say, one needs a high logic skill when it
comes to this project.
43
5.2 Problems
Although the programme can identify most of the words, sometime it can make
mistakes, and with this mistakes come the wrong score.
PHP session () function cannot carry over to another PHP page and thats a big
problem. Essentially, one needs to use cookies when it comes to designing multiplayer
game using PHP.
The dictionary itself is a problem. There are a few English word list databases for
use with MySQL but one needs to pay several bucks to get them.
The document itself is a problem. Somehow forgot to do the backup for this file and
later it went corrupt without warning.
5.3 Recommendations
Simply put, one should not use PHP if one wishes to design games especially an
interactive one. Sure, simple online games that does not allow interactivity in real time
between players are possible using PHP. But, if one insists on making interactive PHP
games, here are a few recommendations:
44
i)
MySQL is your best friend when it comes to designing online PHP games
Ive wasted hours labouring in vain when a simple use of MySQL can easily
obliterate many of my problems. Of course, MySQL is one of many database used with
PHP so pick one of your favourite if MySQL is not yours.
ii)
Programming is one of those easy to learn, hard to master type of skills. The codes
itself are not hard, but arranging those simple with one another is a whole different
story. I sometime get confused because I did not have a systematic logic design on
paper from the very beginning to let me navigate through the programmes easily.
45
REFERENCES
1)
W. Jason Gilmore. Beginning PHP and MySQ: From Novice to Professional. 3rd
edition. United States of America: Apress. 2008.
2)
3)
4)
5)
Jason Lengstrof. Pro PHP and jQuery. United States of America: Apress. 2010
6)
Bear Bibeault, Yehuda Katz. jQuery in Action. United Kingdom of Great Britain
and Northern Ireland: Manning. 2008.
46
7)
8)
Steve Suehring, Tim Converse, Joyce Park. PHP 6 and MySQL Bible. United States
of America: Wiley Publishing Inc. 2009.
9)
Andi Gutsmans, Stig Saether Bakken, Derick Rethans. PHP 5 Power Programming.
United States of America: Prentice Hall. 2004.
10)
Larry Ullman. PHP6 and MySQL 5.United States of America: Peachpit Press. 2008.
11)
Luke Welling, Laura Thomson. PHP and MySQL Web Development. United States
of America: Sams Publishing. 2005.
12)
13)
Richard York. Beginning JavaScript and CSS Development With jQuery. United
States of America: Wiley Publishing Inc. 2009.
14)
Jesus Castagnetto, harish Rawat, Sascha Schumann, Chris Scollo, Deepak Veliath.
Professional PHP Programming. United Kingdom of Great Britain and Northern
Ireland: Wrox Press. 1999.
15)
Thomas A. Powell. HTML & CSS: The Complete Refrence. 5th edition. United
States of America: Mc Graw-Hill. 2010
47
16)