2017-09-14 57 views
0

我想把整個SQL數據庫放到html表中。我正在使用MySQLi API。 但它只是返回表的第一行,其餘的人只是看亂七八糟up.Here是我的代碼:把整個SQL數據庫放到HTML表中

  <h1> School Lesson System</h1> 

      <?php 

       if(isset($_SESSION['u_id'])) { 
        echo "You are logged in \n"; 
       } 
      ?> 
      <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'; 
?> 

這個任何解決方案????

+2

而是用'for'循環的,只是做',而($行= $ result-> FETCH_ASSOC()){',這是標準的方式獲取行。 – Qirel

+2

你有一個叫做'monday'的表?恐怕你有更大的問題需要解決! – Strawberry

回答

1

1.使用while代替for

2.不要靠近<tbody><table>內部循環(這是主要的問題)

3。當您在您的代碼中使用SESSION時,我無法在您的代碼中看到session_start();.So請檢查,如果您沒有然後將其添加到頁面頂部。

做象下面這樣: -

<?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'; 
?> 

注: -

Monday表名是不好的。這將是一個富有成效的名字,它描述了它的目的本身,如users(list of users),logs(track record of different activities)等。

+0

實際上星期一表示所有lesson_id,老師,教室......在星期一發生。但是,如果你能給我一個更好的名字,我明白 –

2

那是因爲你關閉了tbody和table標籤裏面的for循環。

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

移動這兩條線以外的地方。

1

變化是:

<?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>"; 
+0

大聲笑!更高的聲譽將我接受的答案變成最差的答案。 –

+0

它不是大聲笑。 OP所面臨的實際問題並不是因爲'for'循環,這是因爲'for'循環中寫入'',這使得整個表格變形。 while循環只是編碼的一個增強,但它不會解決扭曲表的實際問題。如果你耐心地與其他答案比較,那麼你會發現,不僅你的答案是不正確的,而且也沒有解釋爲什麼OP必須這樣做。一個答案也爲未來的訪問者提供服務,因此它需要有一個解釋。更改你的代碼使其正確,你的反對票將被刪除。 –

+0

還是它的大聲笑!但讚賞....我同意你的意見:) –

0

用於連接數據庫

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(); 
}  

}

然後另一個類文件Lesson.php創建一個類文件。使用數據庫列作爲它的私有變量..然後像這樣寫一個函數fetchData()。

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; 

    } 

然後使用foreach語句來打印吧..

+1

爲什麼包裝會更容易?爲什麼直接界面不夠好?根據我的經驗,像這樣的包裝只會產生比解決更多的麻煩。 – Qirel