Taking advantage of the falsey and ineffective "" empty string
I wouldn't do it this way, because it does seem confusing. And not just because you are using truthiness (which I really wouldn't do, because it's hard to understand and just screams for bugs). It takes a while to see what happens when there is no POST value, what happens if a categories doesn't exist, etc. 

You don't need multiple checks either though, just move all the code that belongs to category-doesnt-exists and category-exists into one block. If you also extract some code to functions, your code might look something like this:

if(!isset($_POST['category']) ||  $_POST['category'] == $Allcats ){
    displayAddForm("", $SELF);
    displayRentForm("", getAll());
} else if (&lt;videos of that category doesnt exist&gt;) {
    // message that video doesn't exist
    displayAddForm("", $SELF);
    displayRentForm("", getAll());
} else {
    $categorySelected = $_POST['category'];
    $hiddenCategory = "&lt;input type='hidden' name='category' value='htmlspecialchars($categorySelected, ENT_QUOTES, 'UTF-8') '&gt;";
    displayAddForm($hiddenCategory, $SELF);
    displayRentForm($hiddenCategory, getByCategoryId($categorySelected));
}

function getAll() {
    $mysqli-&gt;prepare("SELECT * FROM records");
    // return array of results
}

function getByCategoryId($id) {
    $vidStmt = $mysqli-&gt;prepare("SELECT * FROM records WHERE category=?");
    $vidStmt-&gt;bind_param("s",$categorySelected);
    // return array of results
}

function displayRentForm($hiddenCategory, $categories) {
    foreach($categories as $category){
        echo "&lt;tr&gt;
        &lt;td&gt; htmlspecialchars($name, ENT_QUOTES, 'UTF-8') $name &lt;td&gt; htmlspecialchars($category, ENT_QUOTES, 'UTF-8')  &lt;td&gt; htmlspecialchars($length, ENT_QUOTES, 'UTF-8')  &lt;td&gt; 
        &lt;form class='rent' action = htmlspecialchars($SELF, ENT_QUOTES, 'UTF-8')  method ='post'&gt;
          $hiddenCategory
          &lt;input type='hidden' name='ACTION' value='rent'&gt;
          .... more fields ..
        &lt;/form&gt;
        ";
    }
}

function displayAddForm($hiddenCategory, $SELF) {
    echo "&lt;form id='addvideo' action = &lt;?php echo htmlspecialchars($SELF, ENT_QUOTES, 'UTF-8') ; ?&gt; method ='post'&gt;" .
        $hiddenCategory .
        "&lt;input type='hidden' name='ACTION' value='addvideo'&gt;
        &lt;input type="submit" value="ADD VIDEO"&gt;
        Name:&lt;input type="text" name="name"&gt;
        &lt;!--  more fields.... --&gt;
    &lt;/form&gt;";
}


It's not perfect, but I you get the idea.

XSS

You shouldn't write vulnerable code, even for academic work. It's bad practice, and it normalizes unsecure code; you get used to writing it, and other people get used to reading it.

Always protect against XSS when echoing variable data, eg:

$hiddenCategory = "&lt;input type='hidden' name='category' value='" . htmlspecialchars($categorySelected, ENT_QUOTES, 'UTF-8') . "'&gt;";


And 

&lt;form id='addvideo' action = '&lt;?php echo htmlspecialchars($SELF, ENT_QUOTES, 'UTF-8'); ?&gt;' method ='post'&gt;


Misc


Don't mix " and ' so much. Something like &lt;input type='hidden' name='ACTION' value='addvideo'&gt;&lt;input type="submit" value="ADD VIDEO"&gt; is hard to read, and harder to change than uniformly quoted code (you can see this in my code example above, where I didn't bother to correct it).
Your indentation is off, making your code harder to read.