Handling file uploads @ php.net
When you upload a file via http post, the $FILES array will hold all of the information concerning your uploaded file. There are five keys in the array; name, size, type, tmp_name, and error. You would call these like this: $FILES['image']['name'], $_FILES['image']['size'], and so on.
Here is a piece of a script I wrote recently:
$tmp_file = $_FILES['image']['tmp_name'];
$original_name = $_FILES['image']['name'];
$img_location = "relative/path/to/location/" . $original_name;
move_uploaded_file($tmp_file, $img_location);
move_uploaded_file moves the file from the temp location, to the specified path/filename.ext. You need to be sure to specify the name of the file in the second argument passed to move_uploaded_file (or copy()), or else nothing will happen. You get the name of the file from the $_FILES['image']['name'] var.
If you want to upload and work with multiple files, use this for your input tag: <input type="file" name="image[]">, and then you can call $_FILES['image']['name']['$i']... where $i == 0 is the first file, $i == 1 is the second file and so on.