Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Manipulate MySQL Database Data

Tags:

php

mysql

I have a MySQL database that holds a list of classes in columns, and each class has a "level" which is the value of the row, which changes for each person. So, math, for example, has 0, 1, 2, and 3 as possible values, 0 being not selected as a class, and 1, 2, and 3 being high, medium, and low, respectively.

I have a MySQL query which pulls just the classes from a user's database row.

$result = mysql_query("SELECT math, physics, biology, chemistry, english, spanish, history, economics, art, theoryofknowledge, extendedessay FROM users WHERE username = '". $login_session ."'") or die(mysql_error());  

        while($row = mysql_fetch_array( $result )) {
            echo "Math:". $row['math'] ."<br />";
            echo "Physics:". $row['physics'] ."<br />";
            echo "Biology:". $row['biology'] ."<br />";
            echo "Chemistry:". $row['chemistry'] ."<br />";
            echo "English:". $row['english'] ."<br />";
            echo "Spanish:". $row['spanish'] ."<br />";
            echo "History:". $row['history'] ."<br />";
            echo "Economics:". $row['economics'] ."<br />";
            echo "Art:". $row['art'] ."<br />";
            echo "Theory of Knowledge:". $row['theoryofknowledge'] ."<br />";
            echo "Extended Essay:". $row['extendedessay'];
        }

Here is the output for a user:

Math:1
Physics:1
Biology:0
Chemistry:2
English:2
Spanish:3
History:0
Economics:1
Art:0
Theory of Knowledge:1
Extended Essay:1

How could I determine which level a user has, without doing an if statement for every single time the class is called? I need to call the classes in multiple places on the site, and I'd like an easy way to check which classes, and level, the user has.

Thanks!

like image 345
Alex Castro Avatar asked Aug 06 '12 02:08

Alex Castro


1 Answers

I think the best approach would be to build a PHP class that loads the user in and inside it have a function that can accept a class (Biology, Math etc) and return the level of the user. If you wanted to, you could write something simple that performs a check of the level required and returns a true or false depending on if the user is a high enough level.

I even slapped together some super basic structure you might want to extend upon:

<?php

    class myUser
    // You are making an object here that stores information about your user.
    // This will mean you only need to query that data once from the DB, then
    // you can use it anywhere on the page without needing to do more queries.
    {
        public $math;
        public $biology;
        // I am making public variables here based on your columns
        // You cuold just as easily make an array for example to store them in.

        public function __construct($userID)
        // Making a construct class - meaning you will be able to write a snippet
        // like this: $currentUser = new myUser(6);
        // and the user information will be loaded nicely for you
        {
            $query="select math, biology from users where ID=$userID";
            // database stuff ....
            // this is where you would write your actual code to get the info
            // from the database and populate it properly, not like I did
            // below for this example
            $this->math=4;
            $this->biology=2;
        }

        public function checkUserLevel($myTopic, $reqLevel)
        // Making use of a few things here that I should ntoe:
        // This is a function you can call from the main code below
        // like this: $currentUser->checkUserLevel('math',3)
        // it will return either true or false.
        // I have used variable variables here for the $myTopic to
        // make it easier. You normally access an element differently
        // normally it is like: echo $this->math;  // output 4
        // Also I am using a ternary operator to return the data,
        // which is just a shortcut.
        {
            return ($this->$myTopic>=$reqLevel)? true : false;
        }

        public function returnUserLevel($myTopic)
        {
            return $this->$myTopic;
        }

    }

    $currentUser = new myUser(6);
    // This is creating a new user object based on the class we made above.
    // Further Explanation:
    // We have a class called myUser, but a class is just a schematic.
    // The $currenUser bit defines a new variable in our code.
    // the "= new myUser" bit says that we want to use the schematic above for this variable
    // the "myUser(6)" basically gives the constructor function an ID to get from
    // the database for the user. Because we defined a constructor class that expects
    // an ID, we need to supply it one, else we will get an error.
    // So $currentUser = new myUser(6)
    // really means "Make me a new variable called $currentUser and make it of the myUser
    // class type, and when making it, fetch me the details of student ID 6 and populate it
    // with their data.

    if($currentUser->checkUserLevel('math',3))
    // Now I am using one of the functions called checkUserLevel, supplying it
    // with the two arguments it needs and depending on it it returns true or false
    // doing one action or another.
    {
        echo "The user is at least level 3.\n";
    }
    else
    {
        echo "The user is lower than level 3.\n";
    }

    if($currentUser->checkUserLevel('biology',12))
    // same check, differnt inputs
    {
        echo "The user is at least level 3.\n";
    }
    else
    {
        echo "The user is lower than level 3.\n";
    }


    // You can output like this for example:
    echo "The users math is at: ".$currentUser->math;

    // and I added a little function that will simply return the level for you of the subject you enter.
    echo "The user is at math level ".$currentUser->returnUserLevel('math');

    // lastly you can do something like this:
    $allSubjects=array('math','physics','biology');
    for($i=0;$i<count($allSubjects);$i++)
    {
        echo "The users ".$allSubjects[$i]." level is at ".$currentUser->returnUserLevel($allSubjects[$i])."<br><br>";
    }

?>

The output of code is:

The user is at least level 3.

The user is lower than level 3.
like image 111
Fluffeh Avatar answered Oct 18 '22 12:10

Fluffeh