السلام عليكم و رحمة الله و بركاته

الكلام عن تحليل الخوارزميات – من وجهة نظري – أفضل طريقة له هي السؤال و الجواب يعني مثلا

يعني اية تحليل الخوارزم المعين ؟

لو انا عاوز مثلا أعمل ترتيب لدفعة تالتة حاسبات من حيث الدرجات و جيت ادور على خوارزميات ممكن تعمل لي ترتيب هالاقي خوارزميات كتير جدا ،، طب اختار الخوارزم المعين و اسيب الباقيين على أي اساس ؟

المعيار الاساسي اللي بيفرق بين خوارزم و التاني هو سرعة الاداء بتاعهم فالخوارزم اللي بيأدي أسرع ممكن نضحي بجزء من سرعته لزيادة دقة الحل مثلا ( لو انا مثلا بادور على خوارزم في مجال التحليل العددي Numerical analysis هايهمني قوي إني أوصل لدقة أكبر )

هنا ممكن يكون الخوارزم اللي اخترته أسرع بس دقته أقل فاضطر اعدل الخوارزم بحيث يطلع دقة أكبر بس في المقابل هاضحي بجزء من سرعته ،، معنى كدا ان الخوارزم السريع بيمكنني من اني اضيف فيه أي مميزات و أدفع في المقابل من سرعته لذلك بيعرفوا السرعة على انها عملة الكمبيوتر ،، ممكن أضحي بالسرعة في مقابل مميزات تانية كمان ،، انما لو الخوارزم اصلا بطيء يبقى انا مش معايا العملة اللي هادفعها في مقابل المميزات اللي عاوزها في الخوارزم بتاعي

العامل الاساسي اللي بتتوقف عليه السرعة في الغالب هو كمية المدخلات اللي داخلة للخوارزم ،، بمعنى ان لو الدفعة اللي انا عاوز ارتبها مثلا كان عددها 100 طالب غير لما يكون عددها 8000 اكيد الوقت المطلوب عشان ارتب 8000 طالب هايكون أكبر ،، و السبب في كدا ان الوقت المطلوب لتنفيذ الخوارزم هو دالة في المدخلات و دة معناه ان

لو عندي خوارزم الوقت بتاعه  = ( المدخلات ) ^2 يبقى مطلوب 10000 وحدة زمن عشان يرتب الـ100 طالب حسب درجاتهم بينما لو الوقت بتاعه = ( المدخلات)^3 هانحتاج 1000000 وحدة زمن !!

بنستنتج من كل دة ان تحليل الخوارزم هو ايجاد الدالة اللي بتمثل العلاقة بين مدخلاته و الزمن اللي هايستغرقه

 

هل نوع المدخلات بيأثر في الزمن المطلوب ؟

أكيد اه ،، لان لو انا دخلت للخوارزم مصفوفة فيها الطلاب مترتبين اصلا يبقى هو كدا مش هايعمل اي شغل !! انما لو اديت له المصفوفة دي متلخبطة ،، يعني عشوائية كدا يبقى هو هايرتب يعني هايعمل خطوات و ممكن في أسوأ حالة تكون المصفوفة مترتبة بالعكس !! يعني هايضطر كدا يعمل أكبر كمية شغل ممكنة !! اذن انا عندي تلات حالات للمدخلات اللي جاية لي في الخوارزم

Best case

Average case

Worst case

لذلك لما احلل خوارزم هاحلله على التلات حالات دول يعني هابقى محتاج أعرف لو الخوارزم دة جات له أفضل الحالات هاياخد وقت قد اية ،، طب لو جات له حالة متوسطة ( يعني المصفوفة نص مترتبة ) هاياخد وقت قد اية ،، طيب ماذا لو جت أسوأ حالة خالص إن المصفوفة تكون مترتبة بالعكس تماما بقا !!  طبيعي احنا لازم نتوقع الأسوأ عشان كدا أهم حالة عندنا هي الورست كايس ،، أهم ما في تحليل الخوارزم هو اجابة سؤال : الخوارزم دة هاياخد وقت قد اية لو كانت المدخلات معكوسة ؟

Asymptotic analysis

الدالة اللي بتمثل العلاقة بين عدد مدخلات خوارزم و الوقت اللي بيستغرقه مش لازم تكون حد واحد ممكن تكون دالة تربيعية

f(x) = ax^2 + bx +c

أو دالة تكعيبة او دالة خطية او غير كدا ، بس لما بنعمل تحليل لخوارزم بنهمل كل الحدود غير المؤثرة بشكل كبير يعني لو عندنا دالة لخوارزم معين هي f(x) = 3x^3 + 2x+17

لاحظ كدا الجدول دة

x 3x^3 2x 17
10 3000 20 17
100 3000000 200 17
1000 3000000000 2000 17
10000 3000000000000 20000 17

لاحظ بقا الحد الاولاني ( الاكس تكعيب ) و الفرق الرهيب بينه و بين الحد التاني و التالت خصوصا لو المدخلات ( الاكس ) زادت قوي ،، تخيل لو احنا عاوزين نرتب بقا دفعة تجارة ! او عاوزين نرتب سكان جمهورية مصر العربية حسب السن !!! في الحالة دي هانلاقي ان الحد التاني و التالتة لا يقارنوا بالحد الاولاني و الفرق بينهم رهيب ،، لو قسمتهم على بعض هابقى بتقسم مالا نهاية على رقم !

لذلك أهم ما في التحليل هو اكبر الحدود من ناحية الأس لان الأس هو اللي بيأثر بشكل كبير جدا لما حجم ( عدد ) المدخلات يزيد جدا فاذا كان عندي خوارزم دالة الوقت بتاعته هي

f(x) = x^2 + 4x^6 +678

باقول ان الخوارزم دة O(x^6)

و بتتنطق كدا ،، بيج او اوف اكس^6 و دة بينقلنا لجزئية تانية مهمة

Asymptotic notations

دالة البيج او دي بتوضح لينا الحد الاقصى من الوقت اللي عمر الخوارزم  ما هايعديه ،، يعني نقدر نقول ان

C*x^6 >= T(x) ,, where T(x) is the time of an algorithm which is Big-O of x^6

هل في دوال تانية بتوضح لي حدود الزمن اللي بياخده الخوارزم ؟

أيوة في دالة الثيتا و دالة البيح أوميجا بحيث ان لو كان الخوارزم من نوع θ(x^6)

دة معناه إن

C1*x^6<= T(x) <=C2*x^6

و لو كان الخوارزم من نوع Ω(x^6)

دة معناه إن

C*x^6 <= T(x)

 

نستنتج من كدا إن :-

Big-O Indicates the UPPER BOUND of the time an algorithm takes .

Big-Ω indicates the LOWER BOUND an algorithm takes .

θ indicates the area in which an algorithm falls .

طب اية هي الثوابت دي ؟

لما كنا بنحسب البيج او بتاعت خوارزم أهملنا الحدود الأقل تأثيرا ،، بس لما أقول إن الحد الأقصى للوقت اللي هايستهلكه الخوارزم هو كذا معنى كدا ان الحد الاقصى دة  = كل المعادلة اللي ذكرته منها و اللي ما ذكرتوش طب ازاي نعوض اللي ما ذكرناهوش ؟ بنعوضه عن طريق فرض ثابت وجود ثوابت يعني انا لما اقول ان الخوارزم دة بيج او اوف اكس تربيع : معناها ان الوقت اللي بيستهلكه الخوارزم أقل من ثابت في الإكس تربيع .

طيب اذا كانت عندي معادلة خورازم هي

f(x) = x+2

اية هي البج او بتاعته ؟ طبعا بيج او اوف اكس طيب هل تنفع انها تكون بيج او اوف اكس أس عشرة ؟ نظريا ينفع طبعا ما هو لو ضربت ثابت في اكس أس عشرة اكيد هايطلع أكبر من الوقت المطلوب في المعادلة دي لذلك اتطرحت فكرة تانية و هي ان الدوال اللي بتوضح لي الحدود نوعين :-

دوال Tight و دوال مش Tight!!

الدوال التايت دي يعني مش بعيدة بكتير عن الحل الصح زي ان البج أو للمعادلة الاخيرة دي بإكس إنما الحل اللي مش تاتيت معناه ان انا باوضع حد للزمن اه ،، انما الحد دة بعيد قوي عن الصح ،، زي مثلا لو انت رايح تشتري كتاب الام اي تي بتاع الخوارزميات : لو انت عارف ان الكتاب تمنه من خمسين لسبعين جنية و انت أخدت معاك سبعين جنية كدا تبقى انت واخد معاك البيج أو لسعر الكتاب دة و تبقى تاتيت أما لو أخدت معاك 10000 جنية هاتبقى واخد ليتل أو ( الحد الأقصى برضة بس ببيبقى بعيد ) اذن في مجموع دوال تانية للحدود و ماهياش تايت زي

Little-o

Little-ω

و هي بالظبط بتقوم بنفس وظيفة البج أو و البيج أوميجا بس مش تايت

إية بقا المشاكل اللي ممكن تقابلني لما احب احلل خوارزم؟

واضح من الكلام اللي فات ان لو عندي معادلة التايم بتاعت خوارزم هاقدر أجيب الحدود التلاتة بتوعه بسهولة مثلا

f(x) = 17x^3+55x^(1/2) +3000 is :-

O(x^3) & Ω(x^3) & θ(x^3)

يبقى انا لو وصلت للمعادلة هقدر أجيب الحدود بسهولة ،، المشكلة اللي ممكن تقابلني بقا لما احب احلل خوارزم هي اني ما اقدرش أوصل للمعادلة بتاعته ! طب ازاي ؟ ممكن مثلا تكون المعادلة بتاعته دي بتحتوي على دوال تانية انا ما اعرفهاش ( دوال معادلات تانية ) في الحالة دي هاضطر أعرفها الأول و ممكن تكون الدالة دي recursive

و دي بتمثل مشكلة كبيرة زي مثلا

f(x) = 2 where x = 1 & f(x) = 3x^2 + f(x/2) where x>1

هنا لازم احل المعادلة اللي الريكرسف دي الأول بمعنى إني استبدل استخدامها لنفسها بحدود عادية مثلا حاجة + حاجة عشان أعرف اجيب أكبر أس و بالتالي أجيب دوال الحدود التلاتة أو الخمسة لو محتاجهم

حاجات عاوز أوضحها

الشرح دة مبني بالأساس على

  • MIT : introduction to algorithms ( chapter 2,3 ) .
  • First lecture of MIT algorithms course ( available here) .
  • Lecture about asymptotic notations from IIT : design and analysis of algorithms course ( available here ) .

اي تعليقات ، تصحيحات او أسئلة تبقى مشكورة جدا و ان شاء الله المقال يكون مفيد

OOP questions and its adhamian answers

Posted: August 4, 2010 in OOP

السلام عليكم و رحمة الله و بركاته

Alsalamo alikom wa rahmato allahe wa barakato ,

After finishing my 8th chapter in “OOP demystified ” book , i wrote some questions and answers to them from my point of view , i listed some of them below :-

What is abstract object and real object ?
Abstract object is the object – the details , like the class is an abstract object but the object itself is a real object , that is because the real object actually holds data , not just say that it exsits …
Why we need to declare the type of our variables ?
We need that for two main purposes :-

  1. The computer need to know how much space to allocate for that variable ..
  2. The computer uses this piece of information to determine what operations to be performed on that variable , like integer variable can’t be transformed to uppercase , or string variables can’t be summed ..

What is the diffrence between instance variable and just variable ?
Instance variables are variables of the class , so it is not allocated for untill his object is instantiated , but normal variables are allocated for when the compiler reach them ..
What is initialzation and instantiation ?
Initialization is the process of setting a variable value , like name = “Adham”; , but instantiation is the process of determining the type of the variable so the computer can allocate memory for it , like String name; here you order the computer to allocate memory for a variable called name of type String .
What is Encapsulation ?
It is the process of combining the procedure and the attributes in one block called  the object .
Why to use Encapsulation ?
We may use it to some organizational reasons ( just groupping related data and behaviours togather ) , but the main purpose of it is Protection , accepting only proper data , for instance this is a PHP function to register a new student in a course :-
function register_student($student_id,$course_id){
// do the registration
}


Any two parameters are accepted here even if they are not a student’s data !! , but using Encapsulation , you combine attributes and behaviours into an object so you can prevent non-student objects from registering themselves allowing only student objects …

Why we make setters and getters for private or protected properties ?
For setters we can use them to validate the new values , for getters we may use them for outputting on a specific manner like :-
class Student {
private status ;
public void setStatus(int status){
this.status = 1;
if(status == 0){
this.status = 0;
}
}

public Stirng  getStatus(){
if(this.status == 0){
return “Success”;
}
return “Fail”;
}
}

What is Encapsulation ?
It is the process of combining the procedure and the attributes in one block called  the object .
What are the types of Inheritance ?
Inheritance has three types :-

  1. Simple inheritance : class SubClass extends SuperClass ;
  2. Multiple inheritance : not supported in java , but it is simulated usnig interfaces .
  3. Level inheritance : when class a is a b is a c .

What are the differences between function and functionality ?
If we have a class represents a dog and another a human , both have common Function which is walking , but they have a different Functionality which is how they do the common function , for instance a human walks on two legs but the dog on four , so Function is something we do but Functionality is how do we do this Function .
Can any class implement some not all interface methods ?
If a class is abstract it can implemet an interface and don’t define all of its methods , But if this abstract class was subclassed , the sub class must implement the remaining methods because the subclass in fact implements this interface .
What are the common mistakes concerned with abstraction ?

There are three common errors concerned with abstraction :-

  1. Trying to instantiate an abstract class .
  2. Trying to call an abstract method from the super class .
  3. Forgetting to define an abstract metod in the subclass .

ISA i will post here regularly about Java from now on !!

Hi , today we will code our area system conversion in PHP object-oriented .

Our project will be consisting of three parts :-

  1. The PHP class : for the conversion calculations .
  2. An HTML form to send conversion request to the convertArea.php script .
  3. The script that implements the class .

The PHP class areaConversion.class.php

<?php
/**
 * @author adham
 * @tutorial ‪http://wp.me/pJ1zT-10
 */
class areaConversion {
    private $quantity , $from , $to , $meters ;
    public $result;
    public function __construct($quantity ,$from, $to){
        $this->from = $from;
        $this->to = $to;
        $this->quantity = $quantity;
        $this->meters = $this->toMeters($this->quantity, $this->from);
        switch($this->to){
            case 'yard':
                $this->result = $this->toYards();
                break;
            case 'hectar' :
                $this->result = $this->toHectars();
                break;
            case 'foot' :
                $this->result = $this->toFeet();
            break;
            case 'meter':
                $this->result = $this->meters;
        }
    }
    // converts anything to meters
    private function toMeters( $quantity, $from){

        switch($from){
            case 'yard' :
                $meters = 0.83612736;
                break;
            case 'foot' :
                $meters = 0.09290304;
                break;
            case 'hectar' :
                $meters = 10000;
                break;
            case 'meter' :
                $meters = 1;
                break;
        }

        $result = $quantity*$meters;
        return $result;

    }

    private function toHectars(){
        $result = $this->meters * 0.0001;
        return $result;
    }

     private function toYards(){
        $result = $this->meters * 1.195990;
        return $result;
    }

      private function toFeet(){
        $result = $this->meters * 10.763911;
        return $result;
    }

}
?>

The PHP script convertArea.php

<?php
require 'areaConversion.class.php';
if(strlen($_POST['quantity'])!=0 && isset($_POST['from']) && isset($_POST['to'])){
    $converter = new areaConversion($_POST['quantity'], $_POST['from'],$_POST['to']);
    echo round($converter->result, $_POST['round']);
}else{
    echo "please specify required fields !";
}
?>

The HTML form

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script type="text/javascript">
    $(document).ready(function(){
    $("#convForm").submit(function(){
        $.post('convertArea.php',
        {
            from : $("#fromSelect").val(),
            to : $("#toSelect").val(),
            quantity : $("#quantity").val(),
            round : $("#roundSelect").val()
        }

        ,function(data){
            $("#response").text(data);
        });
        return false;
    });
  });
</script>
<div id="response">

</div>
<form id="convForm">
    <h4>From :</h4>
    <select name ="from" id ="fromSelect">
        <option value ="hectar">Hectar</option>
        <option value ="foot">Foot</option>
        <option value ="yard">Yard</option>
        <option value ="meter">Meter</option>
    </select>
    <h4>To :</h4>
    <select name ="to" id="toSelect">
        <option value ="hectar">Hectar</option>
        <option value ="foot">Foot</option>
        <option value ="yard">Yard</option>
        <option value ="meter">Meter</option>
    </select>
    <h4>Quantity :</h4>
    <input type="text" name="quantity" id="quantity"/>
    <h4>Round to :</h4>
    <select name ="round" id="roundSelect">
        <option value ="5">5</option>
        <option value ="6">6</option>
        <option value ="7">7</option>
    </select>
    <input  id ="submit" type="submit" value="convert" name="submit"/>
    </form>

hi everyone, i am facing some problems concerned with how work flows , which step after which in my first codeigniter project .. it aims to be something like digg.com but smaller and just for getting my feet wet not for any commercial goals !

I used Jquery and the form validation class for making validation for the reregistration and logging in system , this is a screen shot .

Now anyone wanna read what i wrote , just download !

i am trying to complete it .. ISA

It’s my first post about what i study in  my college , it is about solving a system of equations using the two famous numerical methods of Jacobi and Gauss .

This post is not about these numerical methods themselves but it is about their PHP implementation .

This is the code for Jacobi :

<?php
	$x = array(
		array(0,-(1/3),-(1/3),-(8/3)),
		array((1/3),0,-(1/3),(8/3)),
		array(-(1/3),(1/3),0,-(8/3))
	);
	$s = array(
		0,0,0
	);
	echo "<table border='1' style= 'width :90%'><tr>";
	echo "<td> k = 0</td><td> 0</td><td> 0</td><td> 0</td></tr>";
	for($i=1;$i<=30;$i++){
		echo "<tr>";
		$s0 = ( $s[0]*$x[0][0]) + ( $s[1]*$x[0][1])+($s[2]*$x[0][2]+$x[0][3]);
		$s1 = ($s[0]*$x[1][0]) + ($s[1]*$x[1][1]) + ($s[2]*$x[1][2]+$x[1][3]);
		$s2 = ( $s[0]*$x[2][0]) + ($s[1]*$x[2][1]) + ($s[2]*$x[2][2]+$x[2][3]);
		$s[0] = $s0;
		$s[1] = $s1;
		$s[2] = $s2;
		echo "<td> k = $i</td><td>".$s[0]."</td><td>".$s[1]."</td><td>".$s[2]."</td></tr>";
		//echo $i." :: ".$s[0]." :: ".$s[1]." :: ".$s[2]."<br>";
	}
	echo "</table>";
?>

And this is the gauss-siedle

	$x = array(
		array(0,0.2,-0.6,-0.4),
		array(-0.2,0,0.4,2),
		array(-0.2,0.4,0,0.6)
	);
	$s = array(
		0,0,0
	);
echo "0 :: 0 :: 0 :: 0<br>";
	for($i=1;$i<100;$i++){

		$s[0] =  $s[0]*$x[0][0] + $s[1]*$x[0][1] + $s[2]*$x[0][2]+$x[0][3];
		$s[1] = $s[0]*$x[1][0] + $s[1]*$x[1][1] + $s[2]*$x[1][2]+$x[1][3];
		$s[2] = $s[0]*$x[2][0] + $s[1]*$x[2][1] + $s[2]*$x[2][2]+$x[2][3];

		echo $i." :: ".$s[0]." :: ".$s[1]." :: ".$s[2]."<br>";
	}
?>

How to use it ?

just put the X coefficients into the $x array after putting it in the valid form !

If you have a problem with approximation accuracy use the round() function

Hi everyone ,

it’s my second tutorial about JQuery validation .. today we are gonna use the validation plugin ISA , we will cover more than one level dealing with this plugin as follows :-

  • Validation using validate() method with no arguments .
  • Validation using rules & messages for custom error message .
  • Some links !

1st level : Validation using validate() method with no arguments :-

<html>
<head>
<script type = "text/javascript" src = "http://code.jquery.com/jquery-latest.js" ></script>
<script type = "text/javascript" src = "http://dev.jquery.com/view/trunk/plugins/validate/jquery.validate.js" ></script>
<script type = "text/javascript" >
$(document).ready(function(){
$("#myForm").validate();
});
</script>
</head>
<body>
<form id = "myForm" >
<p > Username * : </p>
<input type="text" id = "username" class = "required"/>
<p > Email  : </p>
<input type="text" id = "email" class = "optional"/>
<p> Password * : </p>
<input type="text" id = "password" class = "required"/>
<input type = "submit" value = "Register" class = "submit" />
</form>
</body>
</html>

=> Here what did we do ?

  • As JQuery code : we ordered javascript to operate the validate() method on the form whose id = “myForm” when the DOM is ready .
  • As HTML code : we simply define the form inputs  and setting the class attribute to ” required ” for the required inputs and ” optional ” for the optional input ( here i assume that the username and password fields are required , but the email field is optional ) , don’t forget to set the class attribute for the submit button .

If you execute this code you may have a result like this :-

Read the rest of this entry »

JQuery validation – part 1 .

Posted: November 30, 2009 in Jquery

Hi everyone , i intend to start a series of tutorials about JQuery validation covering some important topics like integrating php and its Cdoeigniter , using JQuery validation plugins and Doctrine .

Note that : these tutorials represent my own trials !!

Our tutorial consists of two 3 parts as follows :-

  • HTML code : that contains the form and its input and submit and … fields .
  • PHP script : that validates some $_POST information (typed in the form) and either show errors or just type a message saying “thanks for registering“.
  • JQuery code : that is responsible for two jobs (posting data from the form to the php script and getting the result back to the HTML page again).

We start by writing a simple HTML page that contains a form for registering a new user that consists of :-

  1. Input field of type text for the user name .
  2. Two input fields of type text for the email and the re-email .
  3. Two input fields of type password for the password and re-password .

That will be something like this :-

<form id="sendForm" style = "margin-bottom : 0px">
<label for="username">Username : </label>
<input type="text" id="username"/>
<br>
<label for = "email1">Your email :</label>
<input type = "text" id = "email1" />
<br>
<label for = "email2">re-enter your email :</label>
<input type = "text" id = "email1" />
<br>
<label for = "password1">Your password :</label>
<input type = "text" id = "password1" />
<br>
<label for = "password2">re-enter your password :</label>
<input type = "text" id = "password2" />
<br>
<a id="mysubmit" href="#"> Register</a>
and i used this site to get a rounded-corners div that contained my form :

 

http://www.spiffycorners.com/index.php?sc=spiffy&bg=806F6F&fg=C9ABAB&sz=5px

=> My PHP script that will validate data that will be $_POSTed from the previous HTML form will look like this :-

<?php
// this file is named "rules.php"
$username = $_POST['username'];
$password1 = $_POST['password1'];
$password2 = $_POST['password2'];
$email1 = $_POST['email1'];
$email2 = $_POST['email2'];
function isValidEmailAddress($email){
  return preg_match('/^[^0-9][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[@][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[.][a-zA-Z]{2,4}$/',$email);
	}
$errors="<ul>";
$flag = false;
// if it is empty
if(strlen($username)){
// if it is not empty check length
       if(strlen($username)>50){
       $flag = true;
       $errors .= "<li>username must be more than 10 chars and lower than 50</li>";
	}
       if(strlen($username)<10){
  $flag = true;
  $errors .= "<li>username must be more than 10 chars and lower than 50</li>";
	}
      }else{
	$flag = true;
	$errors.="<li>Please fill the username field</li>";
	}
// if password is empty
if(strlen($password1)==0 || strlen($password2)==0){
   $flag = true;
   $errors.="<li>each password field must not left empty</li>";
    }else{
         // if they are not left
         if(!($password1=== $password2)){
            $flag = true;
            $errors.="<li>Both password fields must be identical</li>";
            }
         if(strlen($password1)>50){
            $flag = true;
            $errors.="<li>password's field length must be less than 50 chars</li>";
             }
        }
// checking the email
if(strlen($email1) == 0 | strlen($email2) == 0){
    $flag = true;
    $errors.="<li>email's field length must be between 1 and 49 chars</li>";
}else{
    if(!$email1 === $email2){
    $flag = true;
    $errors.="<li>Both email fields must be identical</li>";
      }
    if(strlen($email1)<10){
       $errors .= "email's field length must be more than 10 chars";
       }
    if(strlen($email1)>50){
       $errors.= "email's field length must be less than 50 chars";
       }
    if(!isValidEmailAddress($email1)){
       $flag = true;
       $errors .="<li>Invalid email address</li>";
       }
     }
  $errors .="</ul>";

if ($flag){
   print($errors);
}else{
   print "thanks for registering !";
     }

?>

In the previous code what did i do ?

  • Assigning the $_POST’s elements to variables like $username = $_POST['username'];
  • Defining a function that compares its input email address against a regex patterns and returns a boolean value .
  • Defining a variable that will hold errors ( if any ) $errors which will be an unordered list <ul> containing errors as <li>‘s .
  • Checking the $username if its length is more than zero then we check its length to be between 10 and 50 charecters .
  • If not we just add an <li> to the $errors variable containing a message .
  • The rest is similar and logical !
  • Finally we check if the $flag boolean variable was true then we print the errors if not we print a “thank you” message .
  • Instead of printing a “thank you message” we can post these valid information to a database !!

=> And finally the JQuery code that will transfer data from the form to the PHP script using $_POST

and get the result back from the script to the HTML page that contains the form .

$("document").ready(function(){
  $("#mysubmit").click(function(){
    $.post("rules.php",
                 {
                   username : $("#username").val(),
                   password1 : $("#password1").val(),
                   password2 : $("#password2").val(),
                   email1 : $("#email1").val(),
                   email2 : $("#email2").val()
                 },
                 function(data){
                           $("#errors").html(data).show("slow");
                   }
                            );
    });
});

In the previous code what did i do ?

  • In the first line we tell javascript to execute a function when the document is ready .
  • That function will execute another one if and only if the element of id = “mysubmit” was clicked .
  • If it was clicked then we’ll send some data to the “rules.php” via POST method .
  • We then retrieve this file and load it inside the element with id=”errors” .

So $.post works as follows :-

  • Its first argument is the server-side script , the second is a map of what will be sent to the script and a callback .
  • This callback function will be executed when the operation is completed and takes one argument which will be considered to be the data retrieved from the script .

Note : while coding this script you should output the result , so loading it into a div using any ajax method will mean something !