2017-03-14 1 views
0

Meine Aufgabe ist es, eine BMI-Tabelle zu erstellen.Hinzufügen von Kopfzeilen in HTML-Tabellen

<?php 

$minWeight = $_GET['min_weight']; //Getting values from HTML user input 
$maxWeight = $_GET['max_weight']; 
$minHeight = $_GET['min_height']; 
$maxHeight = $_GET['max_height']; 

$tableStr = "<html> \n <head> \n <style> \n table, th, td {border: 1px solid black;} 
\n </style> \n </head> \n <body> \n <table style=width:100%> \n"; //table formating 

//This is ugly. I would like to merge this into the existing for loop 
$tableStr .= "<th></th>"; 
for($j = $minWeight; $j <= $maxWeight; $j += 5) { 
     $tableStr .= "<th>" . $j ."</th>"; 
} 
//Up to here 

for($i = $minHeight; $i <= $maxHeight; $i += 5){ //creating the number of headers 
    $tableStr .= "<tr>"; 
    $tableStr .= "<th>" . $i . "</th>"; 
    for($j = $minWeight; $j <= $maxWeight; $j += 5) { 
     //$tableStr .= "<th>" . $j ."</th>"; //print this alongside the line below messes up the table 
     $tableStr .= "<td>" . intval($j/pow(($i/100),2)) . "</td>"; //This prints the result in the columns 
    } 
    $tableStr .= "</tr>"; 
} 

$tableStr .= "</table> \n </body> \n </html>"; //end table format 
echo $tableStr; 

?> 

Ich habe es fast funktioniert. Das einzige, was fehlt, ist das Gewicht auf der Oberseite des Tisches als x-Achse hinzuzufügen. Ich habe versucht, ich kann nicht sowohl die BMI-Ergebnisse von der Berechnung und das tatsächliche Gewicht unberührt auf dem Tisch zu zeigen.

Die einzige Möglichkeit, die ich tun konnte, war durch Erstellen einer separaten for-Schleife und Drucken einer Reihe der Werte, aber ich fühle mich wie in der bereits vorhandenen geschachtelten for-Schleife tun können.

Antwort

1

Try this:

$minW = $_GET['min_weight']; 
$maxW = $_GET['max_weight']; 
$minH = $_GET['min_height']; 
$maxH = $_GET['max_height']; 

echo '<html><head><style>table, th, td { border: 1px solid black; } table { width: 100%; }</style></head><body>'; 
echo '<table><th></th>'; 

for ($i = $minH; $i <= $maxH; $i += 5) { 
    // If we're on the first row, print the headers 
    if ($i == $minH) { 
     for ($j = $minW; $j <= $maxW; $j += 5) { 
      echo '<th>' . $j . '</th>'; 
     } 
    } 

    echo '<tr>'; 

    for ($j = $minW; $j <= $maxW; $j += 5) { 
     // If we're on the first column, print the row's number 
     if ($j == $minW) { 
      echo '<th>' . $i . '</th>'; 
     } 
     echo '<td>' . intval($j/pow(($i/100),2)) . '</td>'; 
    } 

    echo '</tr>'; 

} 

echo '</table>'; 
echo '</body></html>'; 

Works für mich, versuchen Sie es hier: http://www.writephponline.com/ (benutzerdefinierte Werte für $minW verwenden, $maxW, etc ..)

0

\ n ein Zeilenumbruch, sondern in HTML verwenden wir < br> Tag

Verwendung von \ n mit

1. Echo direkt an Seite

Nun, wenn Sie zu versuchen, sind Echo-String an der Seite

echo "kings \n garden"; 

Ausgang wird

kings garden 

Sie erhalten keinen Garten in einer neuen Zeile. Da PHP eine serverseitige Sprache ist und Sie Ausgaben als HTML senden, müssen Sie Zeilenumbrüche in HTML erstellen. Html nicht \ verstehen n Sie benötigen nl2br() Funktion für das verwenden, was sie tut, ist

Returns String mit < br /> oder < br> eingefügt vor allen Zeilenumbrüchen (\ r \ n \ n \ r , \ n und \ r).

echo nl2br ("kings \n garden"); 

Ausgabe

kings 
garden 

Hinweis Vergewissern Sie sich, Echo/Druck \ n in doppelte Anführungszeichen, sonst es wird buchstäblich als \ n wiedergegeben werden. weil PHP-Interpreter Parse String in Apostroph mit Konzept der als

zu Textdatei

jetzt

so "\n" not '\n' 

2. Schreib

ist, wenn Sie echo eine Textdatei Sie nur \ n verwenden können und es wird neue echo wie

$myfile = fopen("test.txt", "w+") ; 

$txt = "kings \n garden"; 
fwrite($myfile, $txt); 
fclose($myfile); 

ausgegeben wird

kings 
garden 
+0

Ich rende keine Textdatei, ich erstelle eine Tabelle dynamisch. – Pete

+0

entfernen Sie einfach Ihre \ n in Ihrem Code –

0

Ich denke @ Condorcho Antwort funktioniert, aber es vermeidet nicht die zusätzliche Schleife wie vom OP erwähnt.

Um das zu tun dies versuchen:

$minWeight = $_GET['min_weight']; //Getting values from HTML user input 
$maxWeight = $_GET['max_weight']; 
$minHeight = $_GET['min_height']; 
$maxHeight = $_GET['max_height']; 
$c = max(array($maxWeight-$minWeight,$maxHeight-$minHeight)); 

$aStr = "<html> \n <head> \n <style> \n table, th, td {border: 1px solid black;} 
\n </style> \n </head> \n <body> \n <table style=width:100%> \n <tr> \n <th></th>"; 
$bStr = ""; 

for($i = 0; $i <= $c; $i += 5){ 
if ($i<=($maxWeight-$minWeight)) { 
    $aStr .= "<th>" . ($minWeight + $i) . "</th>"; 
} 
if ($i<=($maxHeight-$minHeight)) { 
    $bStr .= "<tr> \n <th>" . ($i + $minHeight) . "</th>"; 
    for($j = $minWeight; $j <= $maxWeight; $j += 5) { 
     $bStr .= "<td>" . intval($j/pow((($i+$minHeight)/100),2)) . "</td>"; 
    } 
    $bStr .= "\n </tr> \n"; 
} 
} 
$aStr .= "\n </tr> \n"; 
$tableStr = $aStr . $bStr . "</table> \n </body> \n </html>"; 
echo $tableStr; 
?> 

die die \n ‚Unter der Annahme, s für die Formatierung des Quellcodes erzeugt werden? @Beny ist korrekt, dass sie keinen Unterschied zu dem gerenderten HTML machen und <br /> sollte stattdessen verwendet werden, wenn das die Absicht ist.

Verwandte Themen