You are on page 1of 60


The Project is an attempt at developing packages for maintaining all the details about
Admission, Payment particulars and Academic details for institution such as student name,
personal details etc. Display of the same maintaining note books manually is tedious, time
consuming process; keeping these things in mind this project has been developed to increase the
speed and accuracy of the total process carried by our project.

The basic principles involved in the above problem is that all the process are entered in
the notebook .But here in our “School Computerization System” the entries made in the book are
stored in the database and later received for the purpose like accounting of fees using a package
namely MYSQL.

The modules in our project are

 Details
 Payment Details
 Admission Reports

The Program “School Computerization System” has been successfully able to provide
solution to the requirement of Admission Details of any institution .All the reports are available
at any time.


The term analysis refers to an orderly structured process for identifying and solving problems. A
system is combination of resources working together to convert input to useful outputs.

Analysis is a detailed study of each of these components and their operations and
relationship within and outside of the system. The study of system concepts has three

 A system must be designed to achieve a predetermined objective.

 Inter relationship and inter dependents must exit among the components.
 Higher priority is given to the objective of the organization.

System Analysis is the application of the system approach to problem solving using
computers. To do system works one need to understand the system concept and information
regarding the corporation on the corresponding organization.

The problems in manual office management are as follows.

 Retrieve date is calculated manually.

 Manual maintenance is not easy.
 The maintenance records are damaged or missed.
 It requites full energy of man power, to do a simple work.

Office system computerization will retrieve all the disadvantages of manual office
maintenance computerization is aimed in exchanging the speed of information retrieval, by
increasing the process speed, data security and hence generates up to dated and accurate
information and reports.


Processor : Intel (R) core (TM) i5

RAM : 1 GB DDR Ram

Hard disk : 500 GB

Monitor : VGA/SVGA

Keyboard : Logitech

Mouse : Logitech (3 Buttons)


Operating System : Windows 7

Front end : PHP

Back end : MYSQL


PHP is a server site scripting language. Full form of php is Hypertext Preprocessor. PHP
is a server site scripting language. It is open source scripting language. It is widely used all over
the world. It is faster than other scripting language. Some important features of php are given
below; It is most popular and frequently used worldwide scripting language, the main reason of
popularity is; It is open source and very simple.

• Simple

• Faster

• Interpreted

• Open Source

• Case Sensitive

• Simplicity

• Efficiency

• Platform Independent

• Security

• Flexibility

• Familiarity

• Error Reporting

• Loosely Typed Language

• Real-Time Access Monitoring


It is very simple and easy to use, compare to other scripting language it is very simple
and easy, this is widely used all over the world.


It is an interpreted language, i.e. there is no need for compilation.


It is faster than other scripting language e.g. asp and jsp.

Open Source

Open source means you no need to pay for use php.

Platform Independent

PHP code will be run on every platform, Linux, Unix, Mac OS X, Windows.

Case Sensitive

PHP is case sensitive scripting language at time of variable declaration. In PHP, all
keywords (e.g. if, else, while, echo, etc.), classes, functions, and user-defined functions are NOT

Error Reporting

PHP have some predefined error reporting constants to generate a warning or error

Real-Time Access Monitoring

PHP provides access logging by creating the summary of recent accesses for the user.
Loosely Typed Language

PHP supports variable usage without declaring its data type. It will be taken at the time of
the execution based on the type of data it has on its value.

Uses of PHP

PHP is a scripting language generally used to make websites. PHP is mainly used for
design server side applications. Actually PHP is a server side scripting language which is used
for connect Web Page with a DataBase such as asp or jsp. Some basic uses of PHP are given

• It is used for create dynamic website.

• To Interacting with web server (Apache etc)

• To interacting with any back-end / database server e.g. MySQL

• To interaction with the native file system of the OS

• To implement the business logical layers (one or more)

• It can Encrypt Data

• Access Cookies variable and set cookies

• Using php you can restrict user to access specific web page

• PHP usually used to output HTML code to the browser

• Used for connect web application with DataBase

• It is used for send and receive E-Mails.

• You can use PHP to find today's date, and then build a calendar for the month.

• If you host banner advertisements on your website, you can use PHP to rotate them

• Using php you can count your visitors on your website.

• You can use PHP to create a special area of your website for members.

• Using php you can create login page for your user. Using php you can add, delete,

modify elements within your database thru PHP. Access cookies variables and set


• Using PHP, you can restrict users to access some pages of your website.

• It can encrypt data.

• PHP performs system functions, i.e. from files on a system it can create, open, read,

write, and close them.

• It can handle forms, i.e. gather data from files, save data to a file.

Why use php

• It runs on different platforms such as Windows, Linux, Unix, etc.

• This language is very simple to learn and runs efficiently on the server side.

• It is compatible with almost all servers used today,such as Apache, IIS, etc.

• It supports many databases such as MySQL, Oracle, PostgreSQL etc.

• It is perfectly suited for Web development and can be embedded directly into the HTML


• PHP can also be used to create dynamic web pages.

• It is often used together with Apache (web server) on various operating systems. It can be
also used with Microsoft's IIS on Windows.

PHP also has support for talking to other services using protocols such as LDAP, IMAP,
SNMP, NNTP, POP3, HTTP, COM (on Windows) and countless others. You can also open raw
network sockets and interact using any other protocol. PHP has support for the WDDX complex
data exchange between virtually all Web programming languages. Talking about
interconnection, PHP has support for instantiation of Java objects and using them transparently
as PHP objects. You can also use our CORBA extension to access remote objects.

PHP has extremely useful text processing features, from the POSIX Extended or Perl
regular expressions to parsing XML Introduction 3 documents. For parsing and accessing XML
documents, we support the SAX and DOM standards. You can use our XSLT extension to
transform XML documents. While using PHP in the ecommerce field, you'll find the Cybercash
payment, CyberMUT, VeriSign Payflow Pro and CCVS functions useful for your online
payment programs.

it is important to make sure that you have a proper environment setup on your machine to
develop your web programs using PHP. If this displays a page showing your PHP installation
related information, then it means you have PHP and Webserver installed properly. Otherwise
you have to follow given procedure to install PHP on your computer.


MySQL is a Relational Database Management System (“RDBMS”). It is used by most

modern websites and web-based services as a convenient and fast-access storage and retrieval
solution for large volumes of data. A simple example of items which might be stored in a
MySQL database would be a site-registered user’s name with associated password (encrypted for
security), the user registration date, and number of times visited, etc.

MySQL can also be accessed using many tools. It can be easily communicated with via
PHP (PHP Hypertext Preprocessor), a scripting language whose primary focus is to manipulate
HTML for a webpage on the server before it is delivered to a client’s machine. A user can submit
queries to a database via PHP, allowing insertion, retrieval and manipulation of information
into/from the database.

Installation Guide to use MySQL

MySQL can be downloaded from There are also

several MySQL management tools which can be downloaded and installed to allow the
manipulation of MySQL. These tools mainly provide an interface to operate on MySQL. Many
of these tools are free and provide an easy configuration of MySQL with PHP, e.g., XAMPP,
WampServer, AMPPS . Another free MySQL management system is MySQL workbench. It
provides database administrators and developers an integrated environment for database design
and modelling, SQL development, database administration, database migration. In this course we
will be using XAMPP because it is straightforward to install and use.


XAMPP is a freely available software package which integrates distributions for Apache
web server, MySQL, PHP and Perl into one easy installation. If you wish to set up a web server
on your home computer, this is the recommended route. We will be using XAMPP for the
purposes of this course. The teacher will guide through the process of installing XAMPP in the

 Cross-platform support
 Stored procedures, using a procedural language that closely adheres to SQL/PSM
 Triggers
 Cursors
 Updatable views
 Online Data Definition Language (DDL) when using the InnoDB Storage Engine.
 Information schema
 Performance Schema that collects and aggregates statistics about server execution
and query performance for monitoring purposes
 A set of SQL Mode options to control runtime behavior, including a strict mode
to better adhere to SQL standards.
 X/Open XA distributed transaction processing (DTP) support; two phase commit
as part of this, using the default InnoDB storage engine
 Transactions with save points when using the default InnoDB Storage Engine.
The NDB Cluster Storage Engine also supports transactions.
 ACID compliance when using InnoDB and NDB Cluster Storage Engines
 SSL support
 Query caching
 Sub-SELECTs (i.e. nested SELECTs)
 Built-in replication support (i.e., master-master replication and master-slave
replication) with one master per slave, many slaves per master. Multi-master
replication is provided in MySQL Clusterand multi-master support can be added
to unclustered configurations using Galera Cluster. Full-text indexing and
 Embedded database library
 Unicode support
 Partitioned tables with pruning of partitions in optimizer
 Shared-nothing clustering through MySQL Cluster
 Multiple storage engines, allowing one to choose the one that is most effective for
each table in the application.[c]
 Native storage engines InnoDB, MyISAM, Merge, Memory (heap), Federated,
Archive, CSV, Black hole, NDB Cluster.
 Commit grouping, gathering multiple transactions from multiple connections
together to increase the number of commits per second.



The existing system involved in the admission of students maintained all the details manually.
the Accountant or Office Staff has to keep a track of all the details manually is very tedious

There is no easy way exist to track any new additional courses added. Reports generation for
class wise fees collection, bus students information, late fee collection are takes a huge effort for
the school management. It is very difficult to handle the reports manually.


 The manual system comes across several drawbacks like consumption of time,
maintenance, etc.
 The retrieval of records is difficult and it is a time consuming one, by checking various
 The recording of information consumes more time and it may cause some errors.
 Updating process is also difficult because many manual works are involved.
 There is possibility of missing some important details while we maintain them manually.
 Inability to produce rapidly and accurate reports for an organization.

The computerized system is designed in order to reduce the job of manual work by
maintaining all the details of the admission of a student in computers. The modification cannot
be easily made in manual system, but it is possible in our computerized system.


 Fast and Accurate access of data.

 No need to maintain the manually written records of admission details, etc.
 Manual works are reduced, so that the expenses can be minimized.
 It minimizes the staff’s working time.
 Capable of displaying the details under various parameters.
 Maintain all the details about the admission, payment details and academic details. In our
system, more reports can be generated.



Design inputs are typically the initial requirements that describe the GUI controls to be


Design outputs are the results of the design and engineering efforts .these are normally
the final specifications for the device. Including the design process and the in-coming, in-process
and finished device inspection, measurement or test methods and criteria. The outputs are
normally documented in models, drawings, engineering design and other documents. The output
needs to be directly traceable to the input requirements. Design verification and validation should
demonstrate that the final output specifications conform to the input requirements and meet user
needs and intended uses.


The design review is a format review of the GUI device design by representatives of each
design function participating in the design efforts as well as other interested parties (eg.
marketing, sales, manufacturing engineering etc).the design review must be documented in the
DHF and include review date, participants, design version/revision reviewed and review results.


Design verification is the process that confirms that the design output conforms to the
design input. Design verification should demonstrate that the specifications are the correct
specifications for the design. Design verification must be documented in the DHF and include
the verification date, participants, design version verified, verification method and verification

Design validation is the process in which the device design is validated using initial/low
volume production processes. The purpose for the design validation is to confirm that the design
functions according to design inputs when produced using normal production processes rather
than prototype processes. The design validation must be documented in the DHF.


Design transfer is the process in which the device design is translated into
production,distribution,and installation specifications.


The DHF is a formal document that is prepared for each GUI device. The DHF can be
either a collection of the actual documents generated in the product development(PD) process or
an index of documents and their storage location.

The required inputs are stored in the form of tables. They may be numeric and
alphanumeric. The relationships are created within the tables to access the data efficiently and
effectively. Menu is used to select different options. Each and every option has its own input
screen. Input screen should have its title and its required variable used to produce the result.

The input screen should be user friendly so that everyone can access the option without
complete system knowledge. During each entry of input data guidelines are provided to the user
to avoid incorrect and inaccurate data entry.

Input design is a process of converting a user-oriented description of the input to the

computer-based system. This design is important to avoid errors in the input process and show
the correct direction to the management for getting the correct information from the
computerized system. Input design must be in such a way that it must control the amount of
input, avoid delay, etc. It must be simple. The input design must ensure user-friendly screen,
with simplicity, providing ease of viewing & entering the data

The objective input designs are

 To provide a cost effective method or output

 To achieve the high cost possible live accuracy

 To ensure that the input is acceptable and under stood

Needless to say, therefore, that the input data is the lifeblood of a system and have to be
analyzed and designed with at most case and consideration.

The output information to view, must be provided in a such a format that the people can
understand. After analyzing the operations of the system output information required for each
jobs are determined. In addition to this, these outputs may be in a format suitable to input
subsequent processing.

The project titled as “School Management System” has the following reports.


First this report calculates first term fees that are not paid, if paid means it omits the paid
students. While default students name will generate from admission detail and pending will
calculated from first term fee master. It includes late fine also. While default student is staff child
means it will get pending fee from fee master according to staff child concession. Same way
generating reports for second and third terms and display the Pending reports in accordance to
class wise and term wise.

Database is the storage media where the data given by the user are stored as such or
processed and stored. The system accepts data from the database to generate required
information for the user database determines the purpose and exact application of the system.
While designing decided which facts are to be stored in it and divide the subjects & create tables
for each subject and determine the relationship between the data in one table to other. Verify the
data by entering the sample records to produce the results.
 Easy of learning and use.
 Data independence.
 More information at low cost.
 Accuracy and integrity.
 Recovery from failure.
 Privacy and security.
 Performance.

In a database, information from several files are coordinated, accessed operated upon as
through it is in a single file. Logically, the information are cenztralized, physically, the data may
be located on different devices, connected through data communication facilities.


Data integrity means storing all data in one place only how each application to access it.
This approach results in more consistent information, one update being sufficient to achieve a
new record status for all applications, which use it. This leads to less data redundancy; data items
need not be duplicated; a reduction in the direct access storage requirement.

Data independence is the insulation of application programs from changing aspects of

physical data organization. This objective seeks to allow changes in the content and organization
of physical data without reprogramming of applications and to allow modifications to application
programs without reorganizing the physical data.

The tables needed for each module were designed and the specification were designed
and specification of each and every column was given based on the records and details collected
during record specification of each and every column was given based on the records details
collected during record inspection during system study.
The main menu of the project “school Campus Management System” is

 Master
 Transaction
 Reports



The option Admin Details from the Admission Menu is used to admit the new students
into the institution. In this option the user has to enter all the personnel details of the students.
Here the student personnel details are stored in the admission and personal details tables. Here
the not null validations are done for the following fields Name, student Date of Birth.


When a new student admitted into the institution, the previous institution details are
stored in Academic table. Here the not null validations are done for the following fields Previous
institution name, previous class and percentage. The previous institution class must be less then
one class of current class and it must not greater than current class.


The option student info from the Admission menu is used to view all the student names in
a particular class and the user can edit the name if need. The data for this option is taken from
student details.


The option I, II and III Term entry from the fees master menu is used to store the fees
parameter for I, II and III term. The parameters entered here are used in the fee transactions.


The option I Term collection from transaction menu is used to collect the I Term fees
from the students. Here the receipt number will automatically generated. The fees
parameter details are taken from the Fee master table and stored in I term table.


The option II Term collection from transaction menu is used to collect the II Term fees
from the students. Here the receipt number will automatically generated. The fees parameter
details are taken from the Fee master table and stored in II term table.


The option III Term collection from transaction menu is used to collect the III Term fees
from the students. Here the receipt number will be automatically generated. The fees parameter
details are taken from the Fee master table and stored in 3 term table.


Reports module is designed to give user friendly information to give status on the day to

day transaction made in SCHOOL system. It can be generated by the admin for various

purposes. Based on the reports admin take decisions of the system.




After the source code has been completed, documented as related data structures.
Completed the project has to undergo testing and validation where there is subtitle and definite
attempt to get errors.

The project developer treads lightly, designing and execution test that will demonstrates
that the program works rather than uncovering errors, unfortunately errors will be present and if
the project developer doesn’t find them, the user will find out.

The project developer is always responsible for testing the individual units i.e. modules
of the program. In many cases developer also conducts integration testing i.e. the testing step that
leads to the construction of the complete program structure.

This project has undergone the following testing procedures to ensure its correctness.


In unit testing, we have to test the programs making up the system. For this reason, Unit
testing sometimes called as Program testing. The software units in a system are the modules and
routines that are assembled and integrated to perform a specific function, Unit testing first on the
modules independently of one another, to locate errors.

This enables, to detect errors in coding and logic that are contained with the module
alone. The testing was carried out during programming stage itself.


In these testing procedures the project is given to the customer to test whether all
requirements have been fulfilled and after the user is fully satisfied. The project is perfectly
ready. If the user makes request for any change and if they found any errors those all errors has
to be taken into consideration and to be correct it to make a project a perfect project.


Integration testing is a systematic technique for constructing the program structure. While
at the same time conducting tests to uncover errors associated with interfacing. The objective is
to take unit tested modules and build a program structure that has been dictated by design.

In this integration testing its done using the main module and based on the type of
integration testing the subordinate tables and other criteria along with their path, is replaced one
at a time with actual modules. In the project, after integrating the modules such as purchase and
sales, they are tested with their integration in purchase returns and sales return.

It is said that validation is successful when the software functions in a systematic manner
that can be reasonably accepted by the customers. This type of testing is very important because
it is the only way to check whether the requirements given by user have been completely
fulfilled. The input given to various forms are validated effectively. The validated input is given
for all modules. Sales module is checked such that only available quantity can be sold. It is
checked with all purchase sum of the selected product. Each module is tested independently.

When the initial design was done for the system, the client was consulted for the
acceptance of the design so that further proceedings of the system development can be carried
on. After the development of the system a demonstration was given to them about the working of
the system. The aim of the system illustration was to identify any malfunction of the system.

After the management of the system was approved the system implemented in the
concern, initially the system was run parallel with existing manual system. The system has been
tested with live data and has proved to be error free and user friendly.

Implementation is the process of converting a new or revised system design into an

operational one when the initial design was done by the system; a demonstration was given to the
end user about the working system.

This process is uses to verify and identify any logical mess working of the system by
feeding various combinations of test data. After the approval of the system by both end user and
management the system was implemented. System implementation is made up of many
activities. The major activities are as follows.


Coding is the process of whereby the physical design specifications created by the
analysis team turned into working computer code by the programming team.


Once the coding process is begin and proceed in parallel, as each program module can be

Installation is the process during which the current system is replaced by the new system.
This includes conversion of existing data, software, and documentation and work procedures to
those consistent with the new system.


It is result from the installation process, user guides provides the information of how the
use the system and its flow.

Training and support

Training plan is a strategy for training user so they quickly learn to the new system. The
development of the training plan probably began earlier in the project. The best-suited
application package to develop the system is PHP under windows XP’ environment.


Maintaining the organization in the successful manner will depend upon its accuracy,
punctuality, and regularity. All these things are impossible to maintain in manual system.

In order to overcome this problem, we have created the "SCHOOL

COMPUTERIZATION SYSTEM” software for the campus management. This system is very
easy to understand and provides lots or options to maintain records.

In which, this software is more helpful for maintaining these system accurately &
efficiently. This will definitely leads the company as one of its successful all behind it’s in this
competitive world.


 Domain-Driven Design in by Carlos Buenosvinos , Christian Soronellas , Keyvan

AkbaryPublisher: PicketPublished: June 2017
 PHP Objects, Patterns, and Practice, Fifth Edition by Matt
ZandstraPublisher: ApressPublished: December 2016
 Doyle, Matt. Beginning PHP 5.3 (Wrox Programmer to Programmer), 2009.
 Lerdorf, Rasmus. PHP Pocket Reference, O'Reilly, 2000.
 Nixon, Robin. Learning PHP, MySQL, JavaScript, and CSS: A Step-by-Step Guide to
Creating Dynamic Websites, O'Reilly, 2012.
 Nixon, Robin. Robin Nixon's PHP Crash Course: Learn PHP in 14 easy lectures,
O'Reilly, 2012.
 Ullman, Larry. PHP Advanced and Object-Oriented Programming: Visual QuickPro
Guide (3rd Edition), 2012.
 Ullman, Larry. PHP for the Web: Visual QuickStart Guide, 2011.
 Welling, Luke and Thomson, Laura. PHP and MySQL Web Development, Third Edition,
Sams, 2008.





Master Form Admin Details

Student Info Student Details

Staff Child Info Personal Details

I Term Fee Collection

Address Details

Academic Details
II & III Term Fee Collection

Student Info Report

Fee Master

Staff Child Report

Pending Fee Report


Table Name: Login

Description: This table is used to store the Password for the ICMS.

S.No Field Name Data Type Size Description

1 Username Text 15 To Store the Username

2 Password Text 12 To Store the Password

Table Name: Admindet

Description: For storing student personnel and academic information.

S.No Field Name Data Type Size Description

1 Adminclass Text 7 To Store Student Class Name

2 AdminGroup Text 5 To Store Student Group

3 Adminsec Text 1 To Store Student Section

4 Admindate Text 10 To Store Admission Date

5 Adminid Integer 2 Admission ID, automatically generated

6 Sname Text 30 To Store Student Name

7 Sdob Text 10 Student Date of Birth

8 Sage Byte 1 Student Age

9 Snation Text 15 Student Nationality

10 Srgn Text 15 Student Religion

11 Scaste Text 15 Student Caste

12 Scmty Text 3 Student Community

13 Sgender Text 1 Student Gender

14 Fgname Text 30 Father/Guardian Name

15 Mname Text 30 Mother Name

16 Fgocc Text 25 Father/Guardian Occupation

17 Aincome Long 4 Annual Income

18 Padd1 Text 50 Permanent Address

19 Fgqualif Text 15 Father/Guardian Qualification

20 Mqualif Text 15 Mother Qualification

21 Staffchild Text 3 Weather the Student is staff child or not.

Table Name: Adminacad

Description: For storing student previous institution information.

S.No Field Name Data Type Size Description

1 Adminid Integer 2 Admin. ID taken from Admindet table.

2 Psname Text 30 Previous Institution Name

3 percent Integer 2 Marks scored in previous institution

Table Name: Feemaster

Description: This table is used to hold the fee details of I Term for the Current and Previous
Year. This information will be used in fee collection form.
S.No Field Name Data Type Size

1 Classid Text 8 To Store Classname

2 Year Text 9 To Store Academic Year

3 Grp Text 5 To Store Group

4 Trmname Text 10 To Store Term Name

5 Tfees Integer 2 To Store Tuition Fee

6 Splfees Integer 2 To Store Special Fee

7 Amenfees Integer 2 To Store Amenity Fee

8 Paydate Date/Time 8 To Store the Paydate for the I Term

9 Termfees Integer 2 To Store the Fee

Table Name: TermFeeMas

Description: This table is used to hold the fee details of II & III Term. This information will be
used in fee collection form for II & III term.

S.No Field Name Data Type Size Description

1 Classid Text 8 To Store Classname

2 Year Text 9 To Store the Academic Year

3 Grp Text 5 To Store the Group Name

4 Trmname Text 10 To Store the Term Name

5 Tuitionfees Integer 2 To Store the Tuition Fee

6 Examfees Integer 2 To Store the Exam Fee

7 Paydate Date/Time 8 To Store Paydate for the II & III term

Table Name: Feedetail

Description: This table is used to hold the I, II & III Term Fee Transactions.

S.No Field Name Data Type Size Description

1 Receiptno Integer 2 To Store the Receipt Number

2 Stuid Integer 2 To Store the student admission ID

4 Termname Text 10 To Store the Term Name

5 Receiptdate Date/Time 8 To Store the Receipt Date

6 Fine Integer 2 To Store the Fine

7 Totalamt Integer 2 To Store the Total Fee Collected

8 Amtpaid Yes/No 1 To Store the Amount Paid Data

9 Receiver Text 30 To Store the Amount Receiver

10 Paymenttype Text 10 To Store the Payment Type

11 Tfees Integer 2 To Store Tuition Fee

12 Splfees Integer 2 To Store Special Fee

13 Amenfees Integer 2 To Store Amenity Fee

14 Fyear Text 9 To Store the Financial Year

15 RollNo Integer 2 To Store the Roll Number.

DataBase Name: Company

Table Name: Comp

Description: This table is used to store the Academic year created by the End user.

S.No Field Name Data Type Size Description

1 Sno AutoNumber 4 Serial Number

2 Year Text 9 To Store the Year

Table Name: Info

Description: This table is used to store the institution details like Name, Print Name,


S.No Field Name Data Type Size Description

1 Cname Text 100 Company Name

2 CPName Text 100 Company Print Name

3 Add1 Text 50 Address 1

4 Add2 Text 50 Address 2

5 City Text 50 City




$currDir = dirname(__FILE__);





$adminConfig = config('adminConfig');

if(!$cg = sqlValue("select count(1) from membership_groups where allowSignup=1")){

$noSignup = true;

echo error_message($Translation['sign up disabled']);


if($_POST['signUp'] != ''){

// receive data

$memberID = is_allowed_username($_POST['newUsername']);

$email = isEmail($_POST['email']);

$password = $_POST['password'];

$confirmPassword = $_POST['confirmPassword'];

$groupID = intval($_POST['groupID']);
$custom1 = makeSafe($_POST['custom1']);

$custom2 = makeSafe($_POST['custom2']);

$custom3 = makeSafe($_POST['custom3']);

$custom4 = makeSafe($_POST['custom4']);

// validate data


echo error_message($Translation['username invalid']);


if(strlen($password) < 4 || trim($password) != $password){

echo error_message($Translation['password invalid']);


if($password != $confirmPassword){

echo error_message($Translation['password no match']);



echo error_message($Translation['email invalid']);


if(!sqlValue("select count(1) from membership_groups where groupID='$groupID' and


echo error_message($Translation['group invalid']);


// save member data

$needsApproval = sqlValue("select needsApproval from membership_groups where


sql("INSERT INTO `membership_users` set memberID='$memberID',

passMD5='".md5($password)."', email='$email', signupDate='".@date('Y-m-d')."',
groupID='$groupID', isBanned='0', isApproved='".($needsApproval==1 ? '0' : '1')."',
custom1='$custom1', custom2='$custom2', custom3='$custom3', custom4='$custom4',
comments='member signed up through the registration form.'", $eo);

// admin mail notification

/* ---- application name as provided in AppGini is used here ---- */

$message = nl2br(

"A new member has signed up for {$app_name}.\n\n" .

"Member name: {$memberID}\n" .

"Member group: " . sqlValue("select name from membership_groups where

groupID='{$groupID}'") . "\n" .

"Member email: {$email}\n" .

"IP address: {$_SERVER['REMOTE_ADDR']}\n" .

"Custom fields:\n" .

($adminConfig['custom1'] ? "{$adminConfig['custom1']}: {$custom1}\n" : '') .

($adminConfig['custom2'] ? "{$adminConfig['custom2']}: {$custom2}\n" : '') .

($adminConfig['custom3'] ? "{$adminConfig['custom3']}: {$custom3}\n" : '') .

($adminConfig['custom4'] ? "{$adminConfig['custom4']}: {$custom4}\n" : '')

if($adminConfig['notifyAdminNewMembers'] == 2 && !$needsApproval){


'to' => $adminConfig['senderEmail'],

'subject' => "[{$app_name}] New member signup",

'message' => $message


}elseif($adminConfig['notifyAdminNewMembers'] >= 1 && $needsApproval){


'to' => $adminConfig['senderEmail'],

'subject' => "[{$app_name}] New member awaiting approval",

'message' => $message


// hook: member_activity


$args = array();

member_activity(getMemberInfo($memberID), ($needsApproval ? 'pending' : 'automatic'),


// redirect to thanks page

$redirect = ($needsApproval ? '' : '?redir=1');


// drop-down of groups allowing self-signup

$groupsDropDown = preg_replace('/<option.*?value="".*?><\/option>/i', '',

htmlSQLSelect('groupID', "select groupID, concat(name, if(needsApproval=1, ' *', ' ')) from
membership_groups where allowSignup=1 order by name", ($cg == 1 ? sqlValue("select
groupID from membership_groups where allowSignup=1 order by name limit 1") : 0 )));

$groupsDropDown = str_replace('<select ', '<select class="form-control" ', $groupsDropDown);


<?php if(!$noSignup){ ?>

<div class="row">

<div class="hidden-xs col-sm-4 col-md-6 col-lg-8" id="signup_splash">

<!-- customized splash content here -->


<div class="col-sm-8 col-md-6 col-lg-4">

<div class="panel panel-success">

<div class="panel-heading">

<h1 class="panel-title"><strong><?php echo $Translation['sign up here']; ?></strong></h1>


<div class="panel-body">
<form method="post" action="membership_signup.php">

<div class="form-group">

<label for="username" class="control-label"><?php echo $Translation['username']; ?></label>

<input class="form-control input-lg" type="text" required="" placeholder="<?php echo

$Translation['username']; ?>" id="username" name="newUsername">

<span id="usernameAvailable" class="help-block hidden pull-left"><i class="glyphicon

glyphicon-ok"></i> <?php echo str_ireplace(array("'", '"', '<memberid>'), '', $Translation['user
available']); ?></span>

<span id="usernameNotAvailable" class="help-block hidden pull-left"><i class="glyphicon

glyphicon-remove"></i> <?php echo str_ireplace(array("'", '"', '<memberid>'), '',
$Translation['username invalid']); ?></span>

<div class="clearfix"></div>


<div class="row">

<div class="col-sm-6">

<div class="form-group">

<label for="password" class="control-label"><?php echo $Translation['password']; ?></label>

<input class="form-control" type="password" required="" placeholder="<?php echo

$Translation['password']; ?>" id="password" name="password">



<div class="col-sm-6">

<div class="form-group">

<label for="confirmPassword" class="control-label"><?php echo $Translation['confirm

password']; ?></label>

<input class="form-control" type="password" required="" placeholder="<?php echo

$Translation['confirm password']; ?>" id="confirmPassword" name="confirmPassword">



<div class="form-group">

<label for="email" class="control-label"><?php echo $Translation['email']; ?></label>

<input class="form-control" type="text" required="" placeholder="<?php echo

$Translation['email']; ?>" id="email" name="email">


<div class="form-group">

<label for="group" class="control-label"><?php echo $Translation['group']; ?></label>

<?php echo $groupsDropDown; ?>

<span class="help-block"><?php echo $Translation['groups *']; ?></span>




for($cf = 1; $cf <= 4; $cf++){

if($adminConfig['custom'.$cf] != ''){


<div class="row form-group">

<div class="col-sm-3"><label class="control-label" for="custom<?php echo $cf; ?>"><?php

echo $adminConfig['custom'.$cf]; ?></label></div>

<div class="col-sm-9"><input class="form-control" type="text" placeholder="<?php echo

$adminConfig['custom'.$cf]; ?>" id="custom<?php echo $cf; ?>" name="custom<?php echo $cf;



<div class="row">

<div class="col-sm-offset-3 col-sm-6">

<button class="btn btn-primary btn-lg btn-block" value="signUp" id="submit" type="submit"

name="signUp"><?php echo $Translation['sign up']; ?></button>




</div> <!-- /div class="panel-body" -->

</div> <!-- /div class="panel ..." -->

</div> <!-- /div class="col..." -->

</div> <!-- /div class="row" -->


$j(function() {


$j('#usernameAvailable, #usernameNotAvailable').click(function(){ $j('#username').focus(); });

$j('#username').on('keyup blur', checkUser);

/* password strength feedback */

$j('#password').on('keyup blur', function(){

var ps = passwordStrength($j('#password').val(), $j('#username').val());

if(ps == 'strong'){

$j('#password').parents('.form-group').removeClass('has-error has-warning').addClass('has-

$j('#password').attr('title', '<?php echo html_attr($Translation['Password strength: strong']); ?>');

}else if(ps == 'good'){

$j('#password').parents('.form-group').removeClass('has-success has-error').addClass('has-

$j('#password').attr('title', '<?php echo html_attr($Translation['Password strength: good']); ?>');


$j('#password').parents('.form-group').removeClass('has-success has-warning').addClass('has-

$j('#password').attr('title', '<?php echo html_attr($Translation['Password strength: weak']); ?>');


/* inline feedback of confirm password */

$j('#confirmPassword').on('keyup blur', function(){

if($j('#confirmPassword').val() != $j('#password').val() || !$j('#confirmPassword').val().length){




/* inline feedback of email */

$j('#email').on('change', function(){






/* validate form before submitting */

$j('#submit').click(function(e){ if(!jsValidateSignup()) e.preventDefault(); })


var uaro; // user availability request object

function checkUser(){

// abort previous request, if any

if(uaro != undefined) uaro.abort();


uaro = $j.ajax({
url: 'checkMemberID.php',

type: 'GET',

data: { 'memberID': $j('#username').val() },

success: function(resp){

var ua=resp;

if(ua.match(/\<!-- AVAILABLE --\>/)){





function reset_username_status(status){

$j('#usernameNotAvailable, #usernameAvailable')



.removeClass('has-error has-success');

if(status == undefined) return;

if(status == 'success'){




if(status == 'error'){





/* validate data before submitting */

function jsValidateSignup(){

var p1 = $j('#password').val();

var p2 = $j('#confirmPassword').val();

var email = $j('#email').val();

/* user exists? */


modal_window({ message: '<div class="alert alert-danger"><?php echo

html_attr($Translation['username invalid']); ?></div>', title: "<?php echo
html_attr($Translation['error:']); ?>", close: function(){ $j('#username').focus(); } });

return false;

/* passwords not matching? */

if(p1 != p2){

modal_window({ message: '<div class="alert alert-danger"><?php echo

html_attr($Translation['password no match']); ?></div>', title: "<?php echo
html_attr($Translation['error:']); ?>", close: function(){ $j('#confirmPassword').focus(); } });
return false;


modal_window({ message: '<div class="alert alert-danger"><?php echo

html_attr($Translation['email invalid']); ?></div>', title: "<?php echo
html_attr($Translation['error:']); ?>", close: function(){ $j('#email').focus(); } });

return false;

return true;



#usernameAvailable,#usernameNotAvailable{ cursor: pointer; }


<?php } ?>

<?php include_once("{$currDir}/footer.php"); ?>