Following is a practice code from a book titled "Head First PHP and sql" which I am studying.  When I run sendemail.php in  localhost sever I  get two errors:
- Undefined variables Subject & text.
Both however were defined  with the post array at the beginning. This code is about an HTML form that is part of PHP script, sticky form data and built-in PHP superglaobal variable $_Server['PHP_SELF']. Please see if I am missing something.
<!DOCTYPE html >
<html lang="en">
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<title>sendmail.html</title>
</head>
<body>
    <?php 
        if(isset($_POST['Submit'])){
        $from='elmer@makemelvis.com';
       **$subject=$_POST['subject'];** 
       **$text =$_POST['elvismail'];**
         $output_form =false;
    if(empty($subject) && empty($text)){
        echo 'You forgot the email subject and body text 
         <br/>';
        $output_form =true;
        }   
    if(empty($subject) && (!empty($text))){
        echo 'You forgot the email subject<br/>';
        $output_form =true;
        }
         
     if((!empty($subject)) && empty($text)){
        echo 'You forgot the email body text<br/>';
        $output_form =true;
        }   
    if((!empty($subject)) && (!empty($text))){
            
    $dbc = mysqli_connect('localhost', 'root', 
    '#######', 'elvis_store')
     or die('Error connecting to Mysql Server.');
        
    $query = "SELECT * FROM email_list";        
            $result = mysqli_query($dbc, $query)
            or die ('Error querying database.');
    
        while($row = mysqli_fetch_array($result)){
               
        $first_name= $row['first_name'];    
        $last_name = $row['last_name'];
        $msg= "Dear $first_name $last_name,\n $text";            
        $to= $row['email'];
        
        mail( $to , $subject, $msg, 'From:'. $from);
            
        echo 'Email sent to:' . $to.'<br>';
        
            }   
        
        mysqli_close($dbc);
    
            }
        }// This will close the first if, which tells us 
            if the form was submitte.
        
        else{
                $output_form =true; //if the from's never 
               been submitted, we definitely need to show 
                it!
            }
                if ($output_form){/* This if statment 
                checks the $output_form variable
                and displays the form is it is true.*/
        
        ?>      <!--closed PHP-->
        
        <form method="post" **action="<?php echo 
         $_SERVER['PHP_SELF']; ?>" >**
        <label for="subject">Subject of email:</label> 
         <br/>
            
        <input id="subject" name="subject"      
         type="text" size="30" **value ="<?php echo 
         $subject; ?>"/>**<br/> <!--Added sticky form 
          data-->
            <label for="elvismail">Body of email:</label> 
             <br />
            
         <textarea id="elvismail" name="elvismail" 
          rows="8" cols="40"> <?php echo $text; ?> 
         </textarea><br /><!--Added sticky form data-
->
            <input type="submit" name="Submit" 
             value="Submit"/>
        </form>
        <?php
        } //this curly bracket closes the 
        if($output_form)
        ?>
    </body>
    
    </html>
     Thx
      SG_Gham

 
    