The issue is somewhat complicated.
If Plot is given something that isn't the correct form, it makes a blank plot.
The rest is somewhat difficult to explain without more experience. Your code above doesn't put variables into a proper context. Contexts are much like namespaces in other languages. In the example below, I have "MathExpresion" put all the variables into a context called "LocalContext" and then use that context in your code:
CloudDeploy[
FormFunction[{"equation" -> Restricted["MathExpression", Automatic, Automatic, "LocalContent`"]},
Plot[#equation, {LocalContent`x, -10, 10}] &,
"PNG"]
]
The & operator defines something called a pure or anonymous function.
Is there somewhere you copied this code from? I'd like to check that it explains some of this if possible.