0

I'm new to programming and need help with loops in php. I need to make the page so that when you input two different numbers, all of the numbers in between them are displayed on the page, in a table, and if the ending number is lower than the starting number, then an error appears. Any help is appreciated.

    <body>

<form method="post">
Starting Number: <br>
<input type="text" name="start" required><br><br>
Ending Number: <br>
<input type="text" name="end" required><br><br>
<input type="submit" name="subBtn"<br><br><br>
</form>

<?php
// using if statements to automatically set the grade and comment
if ($_POST['subBtn']) 
    // store the posted values from the form in variables
    $start = $_POST['start'];
    $end = $_POST['end'];

?>

<table border="1" style="width:100%" padding="15px">

    <tr>
     <td>Temperature (Celcius)</td>
     <td>Temperature (Kelvin)</td>      
     <td>Temperature (Farenheit)</td>
    </tr>

    <tr>
    <td>
     <?php
     $c = $start;
     while($start >= $end){?>
     <?php echo $start--;?>
     <?php }?>  
    </td>

    <td><?php
     $k = start + 273;
     while($k != $end + 272){?>
     <?php echo $k--;?>
     <?php }?>
    </td>

    <td>
     <?php
     $f = 212;
     while($f >= 31){?>
     <?php echo $f-=1.8;?>
     <?php }?>  
    </td>
    </tr>

</table>

</body>

2 Answers2

1

First, use opening and closing brackets:

if ($_POST['subBtn']) {
    $start = $_POST['start'];
    $end = $_POST['end'];

... and close it at the end of your TABLE:

</table>
<?php } ?>

Then, perform a test:

if ($start <= $end){
    echo 'Start temp needs to be higher than End temp';
}else{
    ... your other code here

Last, there is an infinite loop with your Kelvin calculation. check your calc and update the loop.

Webomatik
  • 844
  • 7
  • 7
0

Firstly to check for an error, I would do something like this:

if($end < $start) {
    echo 'Oops, your end number is lower than your start';
}

Then for the actual display logic this should do what you need:

for($i = $start; $i < $end; $i++) {
    echo '<td>'.$i.'</td>';
} 

This will display the numbers between $start and $end, if you want it inclusive then use <= in the logic part of the for loop.

I am not 100% certain but I believe you need to specify the action in the <form> element as well, I believe it is defaulting to the current page so you should be able to get it working for testing.

I would recommend perhaps moving the PHP logic above the HTML just to split it out a bit as well, you could then put the actual items into a variable and echo that in the html.

Richard Bale
  • 368
  • 3
  • 9
  • Just as I posted @Webomatik also posted an answer, he points out some other bits that I didn't which will probably be quite helpful as well – Richard Bale May 16 '16 at 15:32
  • Oh, and there's a typo (missing $) in your kelvin section, here: $k = start + 273; Your variable start should be $start – Webomatik May 16 '16 at 15:35