drf65218
2017-09-14 06:51
浏览 107
已采纳

将整个SQL数据库放入HTML表

I'm trying to put a whole SQL database into html table. I'm using MySQLi API. But it just return the first row of the table , and the rest of them just look mess up.Here's my code:

            <h1> School Lesson System</h1>

            <?php

                if(isset($_SESSION['u_id'])) {
                    echo "You are logged in 
";
                }
            ?>
            <table border="1">
                <thead>
                    <tr>
                        <td>Lesson_id</td>
                        <td>Teacher</td>
                        <td>Lesson</td>
                        <td>Day</td>
                        <td>Time</td>
                        <td>Classroom</td>
                        <td>Year</td>
                        <td>Curriculum</td>
                    </tr>
                </thead>
                <tbody>
                    <?php
                    require_once 'includes/dbh.inc.php';

                    $query = "SELECT * FROM monday";
                    $result = $conn->query($query);
                    $rows = $result->num_rows;
                    for ( $j = 0; $j < $rows; ++$j) {
                        $result->data_seek($j);
                        $row = $result->fetch_array(MYSQLI_ASSOC);
                    echo "<tr>";
                        echo "<td>" . $row['Lesson_id']. "</td>";
                         echo "<td>". $row['Teacher']. "</td>";
                         echo "<td>" .$row['Lesson']. "</td>";
                         echo "<td>" . $row['Day']. "</td>";
                         echo "<td>". $row['Time']. "</td>";
                         echo "<td>". $row['Classroom']. "</td>";
                         echo "<td>". $row['Year']. "</td>";
                         echo "<td>". $row['Curriculum']. "</td>";
                     echo "</tr>";
                echo"</tbody>";
            echo"</table>";
                    }


include_once 'footer.php';
?>

Any solution for this ????

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • doumanshan6314 2017-09-14 06:56
    已采纳

    1.Use while instead of for loop

    2.don't close <tbody> and <table> inside loop (which is the main problem)

    3.I am unable to see session_start(); in your code, while you are using SESSION in your code.So please check and if you don't have then add that on top of the page.

    Do like below:-

    <?php
    require_once 'includes/dbh.inc.php';
    
    $query = "SELECT * FROM monday";
    $result = $conn->query($query);
    
    while($row = $result->fetch_array(MYSQLI_ASSOC)){
        echo "<tr>";
            echo "<td>" . $row['Lesson_id']. "</td>";
            echo "<td>". $row['Teacher']. "</td>";
            echo "<td>" .$row['Lesson']. "</td>";
            echo "<td>" . $row['Day']. "</td>";
            echo "<td>". $row['Time']. "</td>";
            echo "<td>". $row['Classroom']. "</td>";
            echo "<td>". $row['Year']. "</td>";
            echo "<td>". $row['Curriculum']. "</td>";
        echo "</tr>";
    }
    echo "</tbody>";
    echo "</table>";
    include_once 'footer.php';
    ?>
    

    Note:-

    Table names like Monday is not good at all. It will be fruitful name which describes it's purpose itself like users(list of users),logs(track record of different activities)...etc.

    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • doulian7252 2017-09-14 06:55

    That's because you close tbody and table tag inside for loop.

           echo"</tbody>";
           echo"</table>";
    

    move this two lines outside the for.

    评论
    解决 无用
    打赏 举报
  • douyun1950 2017-09-14 06:55

    Change that :

    <?php
                        require_once 'includes/dbh.inc.php';
    
                        $query = "SELECT * FROM monday";
                        $result = $conn->query($query);
                        while ($row = $result->fetch_assoc()) {
                        echo "<tr>";
                            echo "<td>" . $row['Lesson_id']. "</td>";
                             echo "<td>". $row['Teacher']. "</td>";
                             echo "<td>" .$row['Lesson']. "</td>";
                             echo "<td>" . $row['Day']. "</td>";
                             echo "<td>". $row['Time']. "</td>";
                             echo "<td>". $row['Classroom']. "</td>";
                             echo "<td>". $row['Year']. "</td>";
                             echo "<td>". $row['Curriculum']. "</td>";
                         echo "</tr>";
    
                        }
      echo"</tbody>";
                    echo"</table>";
    
    评论
    解决 无用
    打赏 举报
  • dongmi4720 2017-09-14 07:00

    Create a class file for connecting the database

      class DBConnUtil {
     private $mysqli;
     function __construct() {
        $this->open_connection();
    }
    
    private function open_connection() {    // function to connect database;
            $this->mysqli = new mysqli(DB_SERVER,DB_USER,DB_PASS,DB_NAME);
            if ($this->mysqli->connect_error) {
                die('Error : ('. $this->mysqli->connect_errno .') '. $this->mysqli->connect_error);
            }
            $this->mysqli->set_charset("utf8");
    }
    public function run_query ($queryString) {
        $result=$this->mysqli->query($queryString);
    
        if (!$result) {
            trigger_error('Wrong SQL: ' . $queryString . ' Error: ' . $this->mysqli->error, E_USER_ERROR);                                                                  
        }
        $this->close_connection();
        return $result;
    }
    
    
    
    private function close_connection() {
            $this->mysqli->close();
    }    
    

    }

    Then another class file Lesson.php. Use the database column as private variable i it..Then write a function fetchData() like this.

        public function fetchData() {
        $dbConn = new DBConnUtil(); //name of the database class mention 
        before..
        $queryString = "select * from tablename ";
        $result = $dbConn->run_query($queryString);
        $rows_returned = $result->num_rows;
    
        $categorydata = array();
        while($rows = $result->fetch_object()){
       $categorydata[] =  $rows;
        }
        $result->free();
       return $categorydata;
    
       }  
    

    then use foreach statement to print it..

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题