2016-09-30 50 views
1

我有一個SQL數據庫,我讀出的數據然後顯示在動態生成的html表中。這裏是我的代碼工作正常:如何從動態生成的html表中刪除選定的列?

$sql = "SELECT $selection FROM $tabelle WHERE $masterarray"; 


$result = mysqli_query($db, $sql) or die("Invalid query");    
$numrows = mysqli_num_rows($result); 
$numcols = mysqli_num_fields($result); 
$field = mysqli_fetch_fields($result); 


if ($numrows > 0) { 

echo "<table>"; 
echo "<thead>"; 
echo "<tr>"; 
echo "<th>" . 'Nr' . "</th>"; 


for($x=0;$x<$numcols;$x++){ 
echo "<th>" . $field[$x]->name . "</th>"; 
} 

echo "</tr>"; 
echo "</thead>"; 

echo "<tbody>"; 
echo "<tr>"; 
$nr = 1; 

while ($row = mysqli_fetch_array($result)) { 
    echo "<td>" . $nr . "</td>"; 
    for ($k=0; $k<$numcols; $k++) {  
    echo "<td>" . $row[$k] . "</td>"; //Prints the data 
    } 

$nr = $nr + 1; 
echo "</tr>"; 

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

} 
} 

mysqli_close($db); 

現在,我想刪除特定列(例如那些,它們是空的還是那些,這是不是很有趣的用戶,誰發出請求)。

unset($field[$variable])試了一下,但沒有奏效。此外,值(如果有的話)也應該刪除。在打印前

+0

如果可以的話,從'mysqli'開關'PDO':然後你就可以做一個簡單的'fetchAll'和使用'array_column'遍歷每一列和檢查它是否是一個有趣的一個。 – Xenos

回答

0

始終格式化陣列。嘗試刪除$field數組中的特定列,然後再回顯HTML,然後打印最終表。一旦HTML代碼在PHP中得到迴應,您將無法在不使用JavaScript的情況下將其刪除。

您可以檢查對$field[$x]->name變量和使用continue跳過列。

+0

這就是我想要做的!我如何檢查$ field [$ x] - > name變量以跳過列? – Columbus

0
<?php 

// DataBase Config - http://php.net/manual/pt_BR/pdo.construct.php. 
$dsn = 'mysql:host=localhost;dbname=test'; 
$usr = 'root'; 
$pwd = ''; 

try { // try to connect in database. 

    $pdo = new PDO($dsn, $usr, $pwd); 

} catch (PDOException $e) { // if there is error in the connection. 

    die('Connection failed: ' . $e->getMessage()); 

} 

// Prepare Statement and execute - http://php.net/manual/pt_BR/pdo.prepare.php. 
$stm = $pdo->prepare('select id, weight, color, name from product'); 
$stm->execute(); 

// Get ALL rows - Object. 
$rows = $stm->fetchAll(PDO::FETCH_OBJ); 

// Print Rows. 
//echo '<pre>'.print_r(rows, true).'</pre>'; 

// Check $row; 
if (count($rows)) { 

    // Order and Display Cols. 
    $colsDisplay = [ 
     'id'  => 'ID Product', 
     'name'  => 'Name', 
     'weight' => 'Weigth' 
    ]; 

    // Table. 
    $html = '<table border="1">'; 
    $html .= "\n <thead>"; 
    $html .= "\n  <tr>"; 
    $html .= "\n   <th bgcolor='#eee'>Row</th>"; 
    $html .= "\n   <th>". implode("</th>\n   <th>", $colsDisplay) ."</th>"; 
    $html .= "\n  </tr>"; 
    $html .= "\n </thead>"; 
    $html .= "\n <tbody>"; 

    // Loop ROWS. 
    foreach ($rows as $key => $val) { 

     $html .= "\n  <tr>"; 

     $html .= "\n   <td bgcolor='#eee'>". $key ."</td>"; 

     // Loop COLS to display. 
     foreach ($colsDisplay as $thKey => $thVal) { 

      $html .= "\n   <td>". $val->$thKey ."</td>"; 

     } 

     $html .= "\n  </tr>"; 

    } 

    $html .= "\n".' </tbody>'; 
    $html .= "\n".'</table>'; 

    echo $html; 

} 
+0

謝謝Geraldo的解決方案!這就是我想做的事情,它和你的$ rows-array完美結合!但是,當我嘗試將它放入我的代碼中時,我總是得到一個具有右列名稱但具有6個空行的表格。我認爲這個問題必須在我的數據庫查詢中。我用$ rows = mysqli_fetch_array($ result)從數據庫中得到了我的結果,這與我的舊代碼一起工作,但不幸的是您的解決方案沒有。你能給我一個例子,我必須做我的數據庫查詢來獲得我的$行嗎? – Columbus

+0

我希望它能幫助你。 –

0

爲了知道,一列是空的,你應該檢查整個列。有不同的方式來做到這一點,其中一個可能是調查哪些是空的,然後只使用那些不是空的。類似這樣的:

<?php 
// ... 
$q = "SELECT SUM(LENGTH(my_first_column)) col_0, SUM(LENGTH(my_second_column)) col_1, ..., SUM(LENGTH(my_11th_column)) col_10 FROM $tabelle WHERE $masterarray"; 

// ... execute query and return results in $nonEmpty 
$nonEmpty = array(); 
foreach($row as $columnIndex) { 
    if ($row[$columnIndex] > 0) { 
    $nonEmpty[] = $columnIndex; 
    } 
} 
// ... now go through results and print only cols with at least one row with lenght > 0 i.e. non empty 
$len = 11; 
$rowHTML = "<tr>"; 
while ($row = mysqli_fetch_array($result)) { 

    for ($i = 0; $i < $len; ++$i) { 
     $rowHTML = ''; 
     if (!in_array($i, $nonEmpty)) { 
     $rowHTML .= '<td>' . $row[$i] . '</td>'; 
     } 
     $rowHTML .= "</tr>\n"; 
    } 
} 

// ... 

這段代碼將刪除所有空值的列。如果列中至少有一個單元格具有某個值,則會在結果中看到該列。

的代碼沒有經過優化 - 這只是一個粗略的想法。但這是一個起點。

相關問題