concatenation with the string looks correct to me.
Are you sure your DB record is correctly updated?
If you pass the correct $id to this method it should exists in the redirection header.
I suggest you to reproduce the eventuality where you don't have a value for $id in the new location and do some debug, for example:
public function .....
echo "The ID is " . $id;
// the update code here
echo 'location:edit.php?id=' . $id;
header('location:edit.php?id=' . $id);
die('result not valid');
Check if the printed $id values are the same, are the expected and if the record was really updated. You should not see the string 'result not valid' as the code exit before.
This is not best practice of testing but should help you understand what is happening.
When you say 'All I get in the browser is ' do you mean you've been redirected to that page, right?