Alguna alma

caritativa podria darme una manito o ejemplo sencillo que yo pueda entender.
Lo que deseo es subir una imagen *.jpg, *.bmp, *.gif, *.png a una carpeta expecifica digamos /imagenesupload
y nesesito que el formulario me valide o verifique varias cosas
1. que si el archivo a subir no posee algunas de las extenciones antes mencionadas me de error archivo equivocado
2. que el formulario me capture el nombre del archivo a subir y al mismo tiempo
me almacene el nombre del archivo en un campo llamamoslo campoX
3. que el formulario me avise si estoy tratando de subir algun archivo duplicado o eviatar que me remplase archivos existentes con el mismo nombre
4. el otro problema que tengo es que al tratar de subir los archivos mayores de 2 megas no me suben
tengo 2 dias dandole vuelta a esto

y la verda soy novato y estado leyendo pero hay algunos script que no los entiendo.
por los momento he proba los siguientes script
el Primero
tengo un formulario.html
<form action="upload3.php" method="post" enctype="multipart/form-data">
<input name="archivo" type="file" size="35" />
<input name="enviar" type="submit" value="Upload File" />
<input name="action" type="hidden" value="upload" />
</form>
llamo con el formulario un archivo PHP llamado upload.php
<?
$status = "";
if ($_POST["action"] == "upload") {
$tamano = $_FILES["archivo"]['size'];
$tipo = $_FILES["archivo"]['type'];
$archivo = $_FILES["archivo"]['name'];
$prefijo = substr(md5(uniqid(rand())),0,6);
if ($archivo != "") {
$destino = "imagenesupload/".$prefijo."_".$archivo;
if (copy($_FILES['archivo']['tmp_name'],$destino)) {
$status = "Archivo subido: <b>".$archivo."</b>";
} else {
$status = "Error al subir el archivo";
}
} else {
$status = "Error al subir archivo";
}
}
?>
con este script he podido subir los archivos pero la parte de enviar el nombre de el archivo a la base de datos no he podido como tampoco validar los erroes de archivos con extensiones incorrectas ni tampoco subir archivos mayores de 2megas.
El segundo Script que entindo mucho menos

que el primero espero me expliquen diferencias entre ambos y cual es el mas indicado para usar.
<?php
if (isset($_POST['submit'])) {
if(is_uploaded_file($_FILES['fichero']['tmp_name'])) { // verifica haya sido cargado el archivo
if(move_uploaded_file($_FILES['fichero']['tmp_name'], $_FILES['fichero']['name'])) { // se coloca en su lugar final
echo "<b>Upload exitoso!. Datos:</b><br>";
echo "Nombre: <i><a href=\"".$_FILES['fichero']['name']."\">".$_FILES['fichero']['name']."</a></i><br>";
echo "Tipo MIME: <i>".$_FILES['fichero']['type']."</i><br>";
echo "Peso: <i>".$_FILES['fichero']['size']." bytes</i><br>";
echo "<br><hr><br>";
}
}
}
?>
<form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post" enctype="multipart/form-data">
Archivo: <input name="fichero" type="file">
<input name="submit" type="submit" value="Upload!">
</form>
Se que estoy pidiendo demasiado y que no acostumbran a dar los codigos completos pero solo quiero algo saque de estos 2 dias amargos que he pasado con este solo problema en particular.
Perdonen y mil Gracias a todos