I tried what you suggested. There was no output from $array_info, so it must be empty. I've done some experimenting, and my code now looks like this:
<?
include 'db.php';
if(isset($HTTP_POST_VARS['submit'])){
//get old
$speech_query=mysql_query("SELECT 'speech' FROM map WHERE `x` = '2' AND `y` = '2'") or die(mysql_error());
$rows=mysql_num_rows($speech_query);
print_r("Number of selected rows: ");
print_r($rows);
?><BR><BR><?
$array_info=mysql_fetch_array($speech_query);
$speech_array=unserialize($speech_query);
print_r("Array_info before: ");
print_r($array_info);
?><BR><BR><?
print_r("Speech_array before: ");
print_r($speech_array);
?><BR><BR><?
//add new
$time=time();
$new=$_POST['speech'];
$speech_array[$time] = $new;
print_r("Speech_array after: ");
print_r($speech_array);
$info=mysql_real_escape_string(serialize($speech_array));
$update=mysql_query("UPDATE `map` SET `speech`= '$info' WHERE x='2' AND y='2' ") or die(mysql_error());
mysql_free_result($speech_query);
}else{
?>
<form name="signup" action="<? $_SERVER['PHP_SELF']; ?>" method="POST">
<tr>
<td><input type="text" id ="speech" name="speech" value="" maxlength="30"></td>
<td><input type="submit" id="submit" name="submit" value="submit"></td></form><?}?>
and my output is
Number of selected rows: 1
Array_info before: Array ( [0] => speech [speech] => speech )
Speech_array before:
Speech_array after: Array ( [1161103925] => whateverIsubmit )
One problem that I had before was that I was using values for the mysql query 'x' and 'y' that hadn't been specfied. I've replaced them with placeholder values that correspond to the data I'm testing.
Apart from that I'm no further on.