duan201444 2012-08-06 02:38
浏览 37
已采纳

操纵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!

  • 写回答

2条回答 默认 最新

  • doupian9798 2012-08-06 02:51
    关注

    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.
    ";
        }
        else
        {
            echo "The user is lower than level 3.
    ";
        }
    
        if($currentUser->checkUserLevel('biology',12))
        // same check, differnt inputs
        {
            echo "The user is at least level 3.
    ";
        }
        else
        {
            echo "The user is lower than level 3.
    ";
        }
    
    
        // 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.
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 phython如何实现以下功能?查找同一用户名的消费金额合并—
  • ¥15 孟德尔随机化怎样画共定位分析图
  • ¥18 模拟电路问题解答有偿速度
  • ¥15 CST仿真别人的模型结果仿真结果S参数完全不对
  • ¥15 误删注册表文件致win10无法开启
  • ¥15 请问在阿里云服务器中怎么利用数据库制作网站
  • ¥60 ESP32怎么烧录自启动程序
  • ¥50 html2canvas超出滚动条不显示
  • ¥15 java业务性能问题求解(sql,业务设计相关)
  • ¥15 52810 尾椎c三个a 写蓝牙地址