//textarea will always be set when looking at it this way. so
if(isset($_POST['textarea'] && $_POST['textarea'] != '') {
// You have textarea data do something with it...
$text = $_POST['textarea']
} else {
echo "textarea has no value...";
}

It looks like you've not yet been informed about one of the basic principles of working with forms in PHP. I see that you're using $_POST, but in the HTML form you're using below clearly defines the 'name' attribute of your textarea element as 'reason'. It is the 'name' of form elements that you should be using to get the values of those fields from the $_POST array. So in this case you should use $_POST.

Also, something that may help you moving forward: I find that checking if a form filed is not empty more closely meets my needs 9 times out of ten, while isset() tends to only see that a certain key in an array is set, rather than whether it's empty or not. If a user submits a form without bothering to fill out the field, then $_POST will be set, but it will still be empty. So in this case, it seems that checking to make sure that a field is not empty more closely matches your needs as well.

So here is what you probably want to change your above code to look like instead:

//The '!' means not, or opposite. So '!empty($someVar)' means "Not empty"
if( !empty($_POST['reason']) ){
//execute the code for when the form has properly been filled out
}else{
//display the form
}