In addition to just stating the query, echo it out when it is running so you can see what it is trying to put into the database, and put an or die statement in to let you know if it failed.
add:
$sql=mysql_query("UPDATE searchpost SET gone='$gone', start_date=NOW(), end_date='$expdate', idx='$idx', login='$login', pass='$pass' WHERE code='$key1'") or die (mysql_error());
echo "mysql_query(\"UPDATE searchpost SET gone='$gone', start_date=NOW(), end_date='$expdate', idx='$idx', login='$login', pass='$pass' WHERE code='$key1'\");";
Might give you more clues.
One other option is to use time() instead of NOW() as the date reference, if your column is a VARCHAR in the database - shouldn't be a problem - just change the query as below:
$sql=mysql_query("UPDATE searchpost SET gone='$gone', start_date='" . time() . "', end_date='$expdate', idx='$idx', login='$login', pass='$pass' WHERE code='$key1'") or die (mysql_error());
Just a thought...