veedeoo 474 Junior Poster Featured Poster

Susan, welcome back to Daniweb.

veedeoo 474 Junior Poster Featured Poster

this is wrong

var arr = {/literal}{$a.ins_status|@json_encode}{literal};
alert(arr);

it should be written as

var arr = {literal}{$a.ins_status|@json_encode}{/literal};
alert(arr);

Whatever you want to pass to the template file, it is highly recommended to pass it from the business logic side rather going for the literal.

Besides you can always register you own plugin if that is needed.

veedeoo 474 Junior Poster Featured Poster

just create a method for the modal, for example let's use the most common example of bootstrap modal.

View page

<head>
    <script type="text/javascript">
      $(document).ready(function(){
        $("#myModal").modal('show');
      });
    </script>

 </head>
 <body>
 <!-- the modal. Again, there is nothing here that I wrote, except I added something for the jquery to catch, else the rest of the codes are default in bootstrap 3-->

 <a href="#myModal" role="button" class="btn btn-large btn-primary" data-toggle="modal">Launch Demo Modal</a>
<!-- Bootstrap trigger to open modal -->
<div id="myModal" class="modal fade">

    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">

                <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
                <h4 class="modal-title">Confirmation</h4>
            </div>

            <div class="modal-body">

 <form class="form-horizontal well" data-async data-target="#result" action="<?php echo $base_url(); ?>modalcontroller/modal_response" method="POST">

<fieldset>
<!-- form content -->
 <label>Test</label><input type="text" name="text"/>
 <input type="submit" name="submit" value="submit">
</fieldset>
</form>

<!-- this is our target div where the response from the controller's method will show up -->
<div id="result"></div>

  </div>
      <div class="modal-footer">
                <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
                <button type="button" class="btn btn-primary">Save changes</button>
            </div>
        </div>
    </div>
</div>
<!-- end of test modal -->

we add our jquery

<script>

jQuery(function($) {
$('form[data-async]').on('submit', function(event) {
var $form = $(this);
var $target = $($form.attr('data-target'));

$.ajax({
type: $form.attr('method'),
url: $form.attr('action'),
data: $form.serialize(),

success: function(data, status) {
$target.html(data);
}
});

event.preventDefault();
});
});
</script>

we create our simple modalcontroller and modal_response method

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

    class Modalcontroller extends CI_Controller {

        public function __construct(){
            parent::__construct();

        }

        /*
        * we create our modal_response method
        */

        public function modal_response(){
            ## we load our form helper
            $this->load->helper('form');

            ## we …
veedeoo 474 Junior Poster Featured Poster

you can have them installed at the same, but they cannot run at the same time using the same port.

veedeoo 474 Junior Poster Featured Poster

the zeroxi is their latest release. Some people use this to host their site from a thumb drive and it is pretty stable. The phpmyAdmin is also secure on this one compared to xampp.

veedeoo 474 Junior Poster Featured Poster

okay, now I know what is going on. Some version of Xampp is not so friendly with windows7. I am not sure which version were they, but what I was hearing from friends that it has something to do with the compiler used by xampp. Most WAMP stacks are compiled in MSVC9 (Visual C++ 2008) and then someone experimented compiling them on MSVC10 not knowing the implications in Win7 environment.

The only advice I can give you is to maybe consider an alternative to XAMPP. There is a production ready minified server called uniform server. This particular stack can run as indepent application.

If you ever decided to test the uniform server, make sure to make a back-up copy of your database in xampp. Remember, they cannot run at the same time by default.

veedeoo 474 Junior Poster Featured Poster

I tried installing Joomla on my development stack (uniform server, but for some reason I cannot replicate your problem.

I am assuming this maybe an xampp related problem. The server error log don't give me enough info. as to why joomla is crashing.

veedeoo 474 Junior Poster Featured Poster

can you check your server log if there is anything about the errors?

veedeoo 474 Junior Poster Featured Poster

Joomla have provided some possible server related problems here.

An alternative way of doing this is by renaming the htaccess.txt to .htaccess included in the distribution as mentioned here.

in the htaccess.txt, there is also an instruction there about Options +FollowSymLinks must be commented out if causes errors.

veedeoo 474 Junior Poster Featured Poster

it is also looking good on my side.

a22ce9712452b18e9e332c99895e2635

code used

 <div class="text-center">
    {% $paginate %}

</div>

<div class="row" style="border: 1px solid red">
<div class="col-md-9">
Level 1: .col-md-9
<div class="row" style="border: 1px solid blue">
<div class="col-md-6">
Level 2: .col-md-6
</div>
<div class="col-md-6">
Level 2: .col-md-6
</div>
</div>
</div>
</div>

</div>

{% /block %}

please ignore the smarty syntax.

veedeoo 474 Junior Poster Featured Poster

You can also try doing something like this

if(isset($_POST['submit'])){

    var_dump($_POST);

  }

the above should give you two sets of array. Assuming that all items are checked and quantities were filled, the above codes will give us something like this

array(3) {
  ["drink"]=>
  array(5) {
    [0]=>string(3) "p/c"
    [1]=>string(6) "c/half"
    [2]=>string(3) "b/k"
    [3]=>string(3) "b/c"
    [4]=>string(3) "b/w"
  }
  ["drinkno"]=>
  array(5) {
    [0]=>string(1) "1"
    [1]=>string(1) "2"
    [2]=>string(1) "3"
    [3]=>string(1) "4"
    [4]=>string(1) "5"
  }
  ["submit"]=>string(5) "Order"
}

looking at the dumped array, we can see that the drink and drinkno are paired by index that's all we need to know.

We change the code above to test if we can get pair.

if(isset($_POST['submit'])){

    echo $_POST['drink'][0] .'=>'. $_POST['drinkno][0] .'<br/>';

}

You can also sort the not empty entries

$order ='';
$order .=(!empty($_POST[drink'][0] && !empty($_POST['drinkkno'][0] ?'drink type :'. $_POST[drink'][0].' quantity : '.$_POST['drinkkno'][0] : false );
$order .= '<br/>';

## do the same for the remaining drinks
veedeoo 474 Junior Poster Featured Poster

Here is a very simple example..

$article = array('1'=>'article one','2'=>'article two','3'=>'article three','4'=>'article four', '5'=>'article five', '6'=>'article six','7'=>'article seven','8'=>'article eight','9'=>'article nine', '10'=> 'article ten');
$this_ad = '<b>this is banner ad</b>';

$perpage = 10;
$ad_interval = 2;

$i= 0;
$out = '';

foreach($article as $item){

    $i++;
    $out .= $item.'<br/>';
    for($ad_x = $ad_interval; $ad_x <= $perpage; $ad_x += $ad_interval){

  if($i==$ad_x){
    $out .= $this_ad.'<br/>';
}

}

}

echo $out;

you can run the above codes here.

veedeoo 474 Junior Poster Featured Poster

@raminshahab, here is the array equivalent and you can try either one of the proposed solutions above. I know which one will work and which one will not. Your job now to test each.

$json_info = array('data'=> array(
            'ucsfeduworkingdepartmentname'=>array('ITS'),
            'telephonenumber'=>array('+1 415 502-7575'),
            'ucsfeduprofilenodeid' => Array ('39487740' ),
            'displayname' => Array ('Kevin Dale' ),
            'postaladdress'=>array('Box 0272 1855 Folsom Street, MCB Room 401S San Francisco, CA 94143'), 
            'uid' => Array ('88834' ) ,
            'ucsfeduprimarydepartmentnumber' => Array ('411112' ),
            'ucsfeduworkingtitle' => Array ( 'Sr Manager, Identity Mgmt' ) ,
            'mobile' => Array ( '1 415 806-8480' ), 
            'roomnumber' => Array ('401S' ) ,   
            'mail' => Array ('kevin.dale@ucsf.edu' ), 
            'box' => Array ( 'Box 0272' ), 
            'baseaddress' => Array ('1855 Folsom Street San Francisco, CA 94143' ), 
            'primary' => Array ( 'box' => 'Box 0272' ), 
            'building' => Array ( 'MCB' ), 
            'baseaddress' => Array ( '1855 Folsom Street San Francisco, CA 94143' ), 
            'postaladdress' => Array ( 'Box 0272 1855 Folsom Street, MCB Room 401S San Francisco, CA 94143' ),
            'cn' => Array ( 'Campus' ), 
            'ucsfeduaddressprimaryflag' => Array ('true' ),
            'roomnumber' => Array ( '401S' ), 
            'telephonenumber' => Array ( '+1 415 502-7575' ), 
            'ucsfedusecondarytelephonenumber' => Array ('') ,
            'ucsfedutelephonenumberreleasecode' => Array ( ''), 
            'ucsfedusecondarytelephonenumberreleasecode' => Array ( '')  ,
            'ucsfeduprimarydepartmentname' => Array ('F_IT Identity and Access Mgt' ), 
            'departmentname' => Array ('F_IT Identity and Access Mgt' )



));

good luck to you.

veedeoo 474 Junior Poster Featured Poster

Hi Chrisde100, welcome to Daniweb :). Yesssss, I am the first :).

veedeoo 474 Junior Poster Featured Poster

Hello and Welcome.

veedeoo 474 Junior Poster Featured Poster

The Amazing Spider-Man 2 :).

veedeoo 474 Junior Poster Featured Poster

you can make the password all lower case. Although I do not agree with the use of a superglobals $_GET to process user credentials, you can do it like this

Everytime the form is submitted, you can covert the password to lower case

$password = strtolower($_GET['password'];
veedeoo 474 Junior Poster Featured Poster

I am not aware of any GUI to do this kind of installation, but it is not that hard to install them using comman line.

veedeoo 474 Junior Poster Featured Poster

Here are your problems.

connection

$con = mysqli_connect("localhost","root","","register");

Second, the mysqli_select_db...

mysqli_select_db("register", $con);

If you want to use the mysqli_select_db, then connection syntax should be like this.

$con = mysqli_connect("localhost","root","");

then we can use

mysqli_select_db("register", $con);

In mysqli , the error reporting should be written like this. Waring! this is for the development environment only..

 $con = mysqli_connect("localhost","root","");

    if (mysqli_connect_errno()){

      echo "Failed to connect to MySQL: " . mysqli_connect_error();

   }

    ## add the rest below

you need to use prepared statements and bind parameters.

veedeoo 474 Junior Poster Featured Poster

Sorry about this

 ($_POST['submitted'] == true)

It was my mistakes. It should be like this

 ($_POST['submitted'] == "true")

It should have double quotes, because it is a string and that's what I wanted to confirm . So the correct codes should be like this

    <?php if(isset($_POST['submit']) && ($_POST['submitted'] == "true")){ ?>

Now, that I have corrected my wrong response, I have to answer your question.

why need add ($_POST['submitted'] == true) can u explain this?

Normally, when we assign hidden attribute to a form input, it is for the purpose of second stage validation e.g. we want make make sure that it is not a robot filling and submitting our form. So, this

 <input type="hidden" name="submitted" id="submitted" value="true" />

can be confirmed by my proposed codes above. Another purpose is to prevent repeated form submission of the same user.

veedeoo 474 Junior Poster Featured Poster

try changing the form method attribute to what is expected by the form processor.

for example, if you want to process this form with get method,

<form method="post" action="index.php">

then it should be like this

<form method="get" action="index.php">
veedeoo 474 Junior Poster Featured Poster

The table has nothing to do with it.

this is the one causing the error

 <?php if($_POST['submitted'] == true){ ?>

you can do something like this

<?php if(isset($_POST['submit']) && ($_POST['submitted'] == true)){ ?>
veedeoo 474 Junior Poster Featured Poster

hello and welcome.

veedeoo 474 Junior Poster Featured Poster

Okay, I must admit, I am not too lazy today. Here is the HMVC design diagram as it applies to Codeigniter functioning as HMVC framework. It is not like the Kohana or Fuel PHP, but the design pattern concept is there.

e872bbfa2623ccfdbec51d7e2e114e03

it should read "Application Modules are pretty much independent". Sorry about my wireless keyboard battery it think is dying. It cannot catch up on my typing speed :).

Unlike the conventional MVC pattern, the HMVC pattern in this particular framework isolates the modules, making them less interconnected. So the blog controller don't even know if there are other controllers. Because of this design patterns, we can create as many modules as our application demands expansion.

edit again..
I really need to change my batteries.. this is my third edit and it is missing a lot of letters and verbs here in there.

veedeoo 474 Junior Poster Featured Poster

Can you please tell me which HMVC modular extension are you currently using? There are few of them, but have minor difference in doing things.

Another thing is that this

$data['featured_img'] = $this->input->post(file_get_contents($_FILES['featured_img']['name']),TRUE);

will not work. We need to try changing it to this

$data['featured_img'] = (file_get_contents($_FILES['featured_img']['name']),TRUE);

remember that is file... I did not even noticed.

On your database, you need to have an extension column and save the extension of your BLOB.

to get the extension of the BLOB, we can do it like this. There is another way of doing this effeciently, but this is the one that can work flawlessly on the BLOB.

@list(, , $image_type, ) = getimagesize($_FILES['featured_img']['tmp_name']);

if ($image_type == 3){
    $ext="png"; 
}elseif ($image_type == 2){
    $ext="jpeg";
}elseif ($image_type == 1){
    $ext="gif";
}

you can then compare the actual extension of the image to your extension allowed for upload.

The next step is to save the extension on ext column. The reason for this is for you to be able to show the BLOB image on your page. like this

$image_data=$row['image'];

header('Content-Length: '.strlen($image_data));
header("Content-type: image/".$row['ext']);
echo $image_data;
veedeoo 474 Junior Poster Featured Poster

i found errors on the code above

change this

 $data['featured_img'] = $this->input->post(file_get_contents($_FILES['featured_img']['name']));

to this

 $data['featured_img'] = $this->input->post(file_get_contents($_FILES['featured_img']['tmp_name']));

On your model, you still need to find out the true extession of the image. YOu may want to add another validation rules for it. That is only for the name of the file

Second option is to use the CodeIgniter Library as shown here.. use this in your controller..

veedeoo 474 Junior Poster Featured Poster

first you need to run the form validation library.
second check if the form_validation run is false.
third if false above, then call your model method to process the uploaded item.

doing this

$this->input->post('page_headline',TRUE);

will only run the data through the xss filter, but will not validate if it is empty or not.

example. Make sure to follow the php 5 syntax standard.

public function get_data_from_post(){

    $this->load->helper(array('form', 'url'));
    $this->load->library('form_validation');

    ## anticipate any error or errors coming ahead of the form submission.
    $errors = array();

    ## layout your form validation rules
    $this->form_validation->set_rules('page_headline', 'Page Headline', 'required|trim|xss_clean|max_length[255]|alpha_numeric');

    ## add the remaining rules here

    ## check for any trapped errors

        if($this->form_validation->run() == FALSE){
            $errors['errors'] = $this->form_validation->set_err();

            ## if validation return true, send the user back to your form
            $this->load->view('upload_form',$errors);

        }

        else{
            ## call out the upload model
            $this->load->model('Article_model');

            if($this->Article_model->add_article()){

            ## it is a success, do whatever you need to do
                redirect('user/article_success','refresh');
        }

        }

 }

somewhere in your article model, you can do this. We can remove the xss parameter if we like. Just make sure you define it on your form validation rules.

public function add_article{

     $data['page_headline'] = $this->input->post('page_headline');
    $data['page_title'] = $this->input->post('page_title');
    $data['keywords'] = $this->input->post('keywords');
    $data['description'] = $this->input->post('description');
    $data['page_content'] = $this->input->post('page_content');
    $imageName = $_FILES['featured_img']['name'];
    $data['featured_img'] = $this->input->post(file_get_contents($_FILES['featured_img']['name']));

    ## prepare the database query here


    return true;

    }

That's pretty much it. Just make sure to look closely on how the patterns are implemented. It takes practice in doing this.

Good luck to you..

veedeoo 474 Junior Poster Featured Poster

can you at least give us which appliance you are currently using, so that we can let you know if debugging is possible? I know about 11 appliances and I don't know which one you are currently running in your development environment. There are virtualboximages, lampstack, OTRS appliance, ops view, open filer, and others.

veedeoo 474 Junior Poster Featured Poster

How do I debug? I haven't done that before.

you can either use netbeans, eclicpse IDE's or PHP designer. Load your script and run debug.

veedeoo 474 Junior Poster Featured Poster

Hello and welcome.

veedeoo 474 Junior Poster Featured Poster

are you testing your application with the paypal sandbox?

veedeoo 474 Junior Poster Featured Poster

pzuurveen and hericles are correct. You must evaluate all them

veedeoo 474 Junior Poster Featured Poster

You cannot do this

$mySoftware = new software();
$mySoftware->html->pageString;

eventhough if we corrected it to

$mySoftware = new software();

Still this will not work

$mySoftware->html->pageString();

the only time it will work if you extend the class parser as in

class software extends phpParser{

    public function __construct(){
        parent::__construct();

    }

otherwise, you have too many choices from abstract method to magic methods.

If the pagestring can do its job without any dependency to any other methods of the phpParser class, then pageString method can be static.

class ClassOne{


    public static function method_one($string){

        return (strtoupper($string));

        }
}        

class ClassTwo{

    public function use_method_one($string){

         return ClassOne::method_one($string);
    }

    }

$objectTwo = new ClassTwo();
echo $objectTwo->use_method_one('hello world'); 

However, if that method is dependent to any other methods, then the object of the distant class must be intialized

class phpParser{

    public $pageString;

    public function __construct(){

    }

    public function parser_method($string){
        return (strtoupper($string));
    }

}


class software{

    private $baseName;
    private $url;
    private $html;

    public function __construct(){

        //$parserObject = new phpParser();
    }

    public function initiateValues ($string){

        $this->html = new phpParser ();
        return($this->html->parser_method($string));
    }
}

$sObject = new software();

echo $sObject->initiateValues('this is from parser_method()');

If an object of the distant class is needed throughout the initialized object, then the object of the distant class must be created during the class initialization.

public function __construct(){

        $this->html = new phpParser();
    }

and

public function initiateValues ($string){

        return($this->html->parser_method($string));
 }

if the method initiateValues() will be called by other methods in the class, then singleton or factory is …

veedeoo 474 Junior Poster Featured Poster

phpbb also have those string filters. As suggested by jresponse SMF is also pretty good and you can convert your phpBB to SMF. I did this once converting phpBB to SMF out of my frustration.

veedeoo 474 Junior Poster Featured Poster

Veedeoo, I didn't realise you were so young as your answers have the maturity which would eclipse so-called seasoned professionals.

Thanks,I get that a lot. Probably because I grew up with too many great programmers in my family. I was always trying to prove to myself that eventhough I did not major in computer science, I can also do most of the things that they can do and only 10 to 15 years younger.

Growing up, I was always hearing my older brothers discussing about algorithms, data structures, and gang of four design patterns. Our family living room was like a Princeton Lecture Hall. We have more physics, math, and computer science books than our public library in my city.

For some reason, I retained a lot of them inside my head and then I became so interested in learning how to write program.

I think Matt Wright is younger than that me. I am not sure, but he was the youngest in CGI scripting.

veedeoo 474 Junior Poster Featured Poster

Let us know when you got it working, so that I can teach you how to use these

     PDO::PARAM_INT
     PDO::PARAM_BOO
     PDO::PARAM_NULL
     PDO::PARAM_STR

that's for late though..

veedeoo 474 Junior Poster Featured Poster

Hi Ali, welcome to Daniweb..

veedeoo 474 Junior Poster Featured Poster

you are not supposed to wrap the placeholders with single quotes. So, this

 VALUES (':userName',':password',':firstname',':Surname', ':gender', ':dob', ':email')"; 

should be like this

VALUES (:userName, :password, :firstname, :Surname, :gender, :dob, :email)");

and this

 $query_insertintotable->execute(array( $userName,$password,$firstname,$Surname,$gender, $dob ,$email));

should be like this

$query_insertintotable->execute(array(
"userName" => $userName,
"password" => $password,
"firstname" =>$firstname,
"Surname" => $Surname,
"gender" => $gender,
"dob" => $dob,
"email" => $email
));

we only use this

$query_insertintotable->execute(array( $userName,$password,$firstname,$Surname,$gender, $dob ,$email));

if our placeholders are like these

    VALUES ( ? , ? , ? , ? , ? , ? , ? );
veedeoo 474 Junior Poster Featured Poster

Thank you very much people for the new Featured badge. Special thanks to these wonderful people in PHP forum iamthwee, Diafol,pritaeas,Cereal and many others I can't recall their handle.

Also, many, many thanks to Queen Dani, happygeek, and to the other pillars of this community. This is such a wonderful badge of honor.

Wow! I need to show this to my Mom and Dad, aa-nn-nn-ndd to my brothers to. :).

veedeoo 474 Junior Poster Featured Poster

Hey, look at that, I just noticed what is underneath my avatar, this is crazy. I need to say thanks at the geek's lounge.

Sorry for getting out of the topic. It just caught me by surprise. I don't normally look at my avatar after all these years. :)

veedeoo 474 Junior Poster Featured Poster

You cannot prevent forum spam regardless of which script you use. I have used phpbb in the past and I was able to minimize the spam by writing my own anti-spam script.

I became so obessed in fighting them, that I have to create a dedicated database just for the spammers IP address, the last website they were seen, the username they have used. I also have created a bridged between this database and my phpbb forum so that I can delete all of the new members matching my database based on IP and username.

Like what Diafol already mentioned, you will need volunteers to help you out.

veedeoo 474 Junior Poster Featured Poster

okay, I found the link in my inbox. Here is the link for the class. The script might need some upgrades, but that should not be a problem.

veedeoo 474 Junior Poster Featured Poster

Hi,
Some 5 or more years ago, someone from phpclasses.org made a PHP GPS locator. For some reason, I can't find my bookmark for it. Yes that could be done.

veedeoo 474 Junior Poster Featured Poster

Thanks for sharing. Wow, that is pretty cool :).

veedeoo 474 Junior Poster Featured Poster

Prepared statements with parameters work like this.

Methods used : prepare() and execute()

PDO is class. An instance of this class is called an object and the functions associated with this object are called methods.

For our purpose above (shown on your codes), we need these methods called prepare and execute. Now, PDO allows us to prepare and compile our query with placeholders. Placeholders are like markers for the expected values from the users. When the execute method is called, it sends the arguments and runs the compiled statements sent earlier.

So, there are two things going on here in the background.

First, this will be send to the server and later on will be compiled

 $query_insertintotable = $con->prepare("INSERT INTO User (username,Password,First Name,Surname, Gender, DOB, Email Address)

VALUES (:userName, :password,  :firstname, :Surname, :gender, :dob, :email)");

These are placeholders for anticipated incomming values from the user

 VALUES (:userName, :password,  :firstname, :Surname, :gender, :dob, :email)");

TYPE 2 : alternatively, we can also do this

VALUES ( ? , ? ,  ? , ? , ? , ? , ? )";

Those are two options in setting-up the placeholder for binding. For now, let us stick to the first one to avoid any confusion.That is the beauty of PDO. It allows us to send query and temporarily compile with the placeholders.

The second part of the process is to send arguments by way of the method execute.

For the first example, we can do it like this

$query_insertintotable …
princetonMarv commented: nice :) +0
veedeoo 474 Junior Poster Featured Poster

I'm on my way out to lunch. I won't be back for 2 hours though.

veedeoo 474 Junior Poster Featured Poster

I don't see programming as a way of manipulating computer system in order to gain controll over it. I think programming is our ability to create complex instructions to test computer's maximum potential.

Only fools believe everything they hear.

veedeoo 474 Junior Poster Featured Poster

I thought your form is suppose to be submitted through ajax. why is it submitting like a regular form?

Is the chat script reading from a text file? If so, take a look at the chat log. I left a message there.

Your site is about 180ms one way from where I'm at. That is pretty slow for a server, but then the chat response is super slow at >2 minutes response time.

We need to see your PHP script as already been suggested above.

I modified a chat script similar to this long time ago, but it was this slow as I can recall.

veedeoo 474 Junior Poster Featured Poster

By this do you mean I can use Java as my web server side as well as my application side?

There is an open source called Apache Tomcat. Have you heard about it? It is an open source implementation of the Java Servlet and JavaServer Pages.

If you want to develop this type of application, you can download XAMPP to test your application locally. You will have to host it on a server with a TomCat installed. Otherwise, a VPS is highly recommended.

This isn't really hard to do. I once hosted a Java written application on a thumb drive connected to my laptop's USB when I was an undergraduate student over my school's wireless network ssssh ... I must have said too much already... :)

veedeoo 474 Junior Poster Featured Poster

I am currently writing a similar applications where Professors and Students are stored in the same table. What separate between them is a column called membership. I defined 3 different membership levels first student, second professor, and third school admininstrator or department head. It also pull out their LinkedIn profile through the API , if given the permission to do so .

The course history, personal background, and professional profile are stored in separate tables. By doing this, I can pull out anything about the members.

To promote the students just update the membership type or code, or you can create some rules that will automatically promote a member to the next level.