Duda tonta pero importante

Pues con mi experiencia, nunca he usado variables asi: $$ puedo asegurar que ese seria el error , ya me habias explicado de donde surge (CREO) y yo creo que hay varias maneras de hacer lo mismo , deja veo bien el codigo haber si te falto algo simple pero me late que es eso.
Es facil programar "Solo interesate en aprender"
victor5atodogas escribió:Pero yo TODO lo hago con POST; genero la sentenica SQL segun los datos que se hayan seleccionados (lo mismo para UPDATES, INSERT).

¿Entonces como soluciono eso para que nadie pueda borrarlo?

Un saludo

aunque lo hagas con post , puede afectar.

tienes que tener algo asi para evitar codigos de ese tipo:

$mitema = $_POST['mitema'];
//liberamos de codigos maliciosos
$mitema = htmlentities($mitema);
con eso te librarias de muchas cosas aunque no del todo.
Es facil programar "Solo interesate en aprender"
Ok, tranquilo, te dejo tiempo para que lo mires; no obstante, si crees que el problema es el $$ lo cambio; aunque entonces no sabria como meter en un bucle las consultas de insert, etc.

Eemplo:

for....$i
INSERT....nombre = $nombre($i)


Yo lo que hago es:

for....$i
$iinombre = "nombre" .$i
INSERT....nombre = $$iinombre

Las sentencias, datos, etc los hace perfectamente.
Ok, entonces si aunque vaya por $POST puede afectar, para lo que tu me has indicado, que tendria que hacer con la variable $mitema?

Un saludo y muchas gracias

PD: Tendre que incluirlos en los archivos PHP que tengo de los buscadores, etc.

Por cierto, recuerda que yo las variables las genero con extract ($POST) o extract ($_POST) no recuerdo.
pero no logro entender porque salen las dos $ y los ii es algo que enserio no habia visto todos mis problemas que he tenido sobre bucles hace ya mucho tiempo nunca utilize algo de esa forma explicamelo puede que si este bien pero aun asi por mi experiencia recomiendo que no vaya de esa manera y bueno me expliques el funcionamiento de lo que segun haria el doble $ para asi ver otra forma de hacer lo mismo sin eso
Es facil programar "Solo interesate en aprender"
Tambien puede ser que la carpeta de subida no tenga permisos de escritura
Es facil programar "Solo interesate en aprender"
Ok, te lo explico.

Tanto en modificar como en introducir se puede modificar e introducir hasta 20 animales de golpe; y en cuanto a como genero los "name" de los inputs, select etc son de este tipo: "nombre1", "nombre18", etc.

Por lo tanto, a la hora de realizar el bucle para hacer el INSERT o el UPDATE, necesito hacerlo de tal forma que cada vez que haga el INSERT

$sql = "UPDATE mascotas set Nombre = $nombre.....
me lo pille de nombre1, nombre2, etc (me pille lo que lleva esa variable).

Por lo tanto, despues de mucho probar formas que hicieran esto, no se como se me ocurrio probar el $$ y lo aplique tal que asi:


for $i...
$iinombre (ese nombre se lo pongo por poner) = "nombre" .$i;
Con lo anterior consigo guardar en $iinombre el nombre de la variable que se deberia mostrar, cuando vayamos por 5, $iinombre = "nombre5".

Por lo tanto, y ya te digo que no se porque, si tu haces el $$ vendria a ser como mostrar los datos de lo que lleva esa variables; es decir:

$('nombre1') > por ejemplo; pero yo en lugar de eso hago $($iinombre) pero quitando los parentesis.

Espero que entiendas un poco como funciona lo de la $$; no obstante, si quieres que cambiemos eso para asegurarnos, no hay problema; aunque no se me ocurriria como hacer el bucle.
En cuanto a que esa carpeta no tenga permisos de escritura, si que los tiene, aunque si quieres modifico para que vaya a parar a una carpeta "foticos" por ejemplo; aunque te comento (porque lo he probado esta mañana) que el fallo es que no va de antes (no que no la pueda copiar); ya que la variable $tipofoto va vacio.
Bien ahora si , si segun entendi lo que quieres es obtener el numero de todos los campos a actualizar y el que esta en los formularios si es asi te he creado un codigo de prueba que lo puedes utilizar para ver como funciona y si es asi como quieres que funcione para que despues lo puedas adaptar a tu web.

creamos en la bd una tabla que se llame campos y llevara lo siguiente :

-- phpMyAdmin SQL Dump
-- version 3.2.4
-- [url]http://www.phpmyadmin.net[/url]
--
-- Servidor: localhost
-- Tiempo de generación: 10-02-2011 a las 10:20:47
-- Versión del servidor: 5.1.41
-- Versión de PHP: 5.3.1

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;

--
-- Base de datos: `cctw`
--

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla `campos`
--

CREATE TABLE IF NOT EXISTS `campos` (
  `campo_id` int(10) NOT NULL AUTO_INCREMENT,
  `nombre` varchar(100) NOT NULL,
  PRIMARY KEY (`campo_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8mb4 AUTO_INCREMENT=3 ;

--
-- Volcar la base de datos para la tabla `campos`
--

INSERT INTO `campos` (`campo_id`, `nombre`) VALUES
(1, 'aaaaaaaaa'),
(2, 'aaaasdsfsa');

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

ahora creamos el archivo 1.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento sin t&iacute;tulo</title>
</head>

<body>
<form action="1.php" name="miform" method="post">
<input type="text" name="nombre1" />
<input type="text" name="nombre2" />
<input type="text" name="nombre3" />
<input type="text" name="nombre4" />
<input type="text" name="nombre5" />
<input type="text" name="nombre6" />
<input type="text" name="nombre7" />
<input type="text" name="nombre8" />
<input type="text" name="nombre9" />
<input type="text" name="nombre10" />
<input type="submit" value="enviar" />
</form>
<?php

  $conectar = mysql_connect("SERVIDOR","USUARIO","PASSWORD");
  $conectar_bd = mysql_select_db("BD");
  $peticion = mysql_query("SELECT * FROM campos");
  
  $numero_campos = mysql_num_rows($peticion);
  if($numero_campos <= 0)
  {
  echo "No hay ningun campo a actualizar";
  } else {
  for($num_camp = 1; $num_camp <= $numero_campos; $num_camp++)
  {
     $campos = array($num_camp,);
	 }
	 foreach($campos as $n_de_campos)
	 {
	    for($i = $n_de_campos; $i >= 1; $i--)
		{
	   $nombre = $_POST["nombre".$i];
	   $nombre = htmlentities($nombre);
	   $actualizar = mysql_query("UPDATE campos SET nombre='".$nombre."' WHERE campo_id='".$i."'") or die ("Ha ocurrido un error");
	     }
	   }
	  }
	  ?>
</body>
</html>
Y listo tenemos la obtencion de los campos y el actualizamiento solo seria añadirle algo para comprobar que ingrese o llene los datos bueno esas ya son retoques
dime si es asi o estoy equivocado en lo que querias hacer.
Es facil programar "Solo interesate en aprender"
Ok, me he creado la tabla he introducido 2 datos y he intentado modificarlos, y funciona perfectamente.

El problema (creo) es que con el extract ($_POST) automaticamente asigna nombres de variables segun el nombre que llevaba en POST; por lo tanto no se como hare para meterlos en 1 array.

Por cierto, como funciona, borro la tabla y el archivo .php
pues reemplaza la variable extract y escribe unas cuantas lineas mas


mira el code:
<?php

  $conectar = mysql_connect("SERVIDOR","USUARIO","PASSWORD");
  $conectar_bd = mysql_select_db("BD");
  $peticion = mysql_query("SELECT * FROM campos");
 
  $numero_campos = mysql_num_rows($peticion);
  if($numero_campos <= 0)
  {
  echo "No hay ningun campo a actualizar";
  } else {
  for($num_camp = 1; $num_camp <= $numero_campos; $num_camp++)
  {
     $campos = array($num_camp,);
    }
    foreach($campos as $n_de_campos)
    {
       for($i = $n_de_campos; $i >= 1; $i--)
      {
      $nombre = $_POST["nombre".$i];
      $nombre = htmlentities($nombre);
      $actualizar = mysql_query("UPDATE campos SET nombre='".$nombre."' WHERE campo_id='".$i."'") or die ("Ha ocurrido un error");
        }
      }
     }
     ?> 
ahora concentrate en esto:

    foreach($campos as $n_de_campos)
    {
       for($i = $n_de_campos; $i >= 1; $i--)
      {
      $nombre = $_POST["nombre".$i];
     aqui añadimos las demas variables aplicando el mismo formato de la variable nombre
Es facil programar "Solo interesate en aprender"
cabe decir que hay varios posibles problemas en el code ya que primero debes saber si el usuario puede editar todos los campos que hay o el numero de campos que va a editar dando una referencia de seleccion y reemplazamiento asi como lo siguiente :

<?php
  $numero = $_POST['numero'];
  $conectar = mysql_connect("SERVIDOR","USUARIO","PASSWORD");
  $conectar_bd = mysql_select_db("BD");
  $peticion = mysql_query("SELECT * FROM campos WHERE campo_id<='".$numero."'");
 
  $numero_campos = mysql_num_rows($peticion);
  .....

Donde el numero es el ultimo numero del campo a editar asi tambien puedes asignarle al post numero algo asi :
<input type="hidden" name="numero" value="21,40">
ahi asignariamos el numero del cual al cual debe actualizar y a eso le podriamos añadir un explode algo asi

$numero = explode(",",$numero);
$numero[0] esto es igual a el numero al que inicia la actualizacion
$numero[1] esto es igual a el numero que finaliza la actualizacion
asi nos evitariamos varios conflictos y ya no tendriamos que hacer la peticion para obtener el numero de campos si no que ya la tendriamos dada de una mejor manera

para a completar mejor el code recomiendo que ingreses unos cuantos if de comprobacion para ver si el campo que quiere actualizar esta vacio y que le mande un error de que no puede actualizar sin llenar los campos

Saludos
Es facil programar "Solo interesate en aprender"
Ok, ¿pero entonces el que reemplazo?

Son mas de 400 variables las que tendria que recoger.

¿Y con el for ese que tengo que hacer?

No es por nada pero no entiendo en que puede servir cambiar todo eso para solucionar los fallos (no obstante lo hago, para eso estamos)
si pero no lo digo de esa manera

no creo que sean mas de 400 variables serian repetidas de esta manera : nombre 1, nombre2 etc. lo que digo es que tienes cierto numero de variables con un nombre de esta manera:

nombre1..........nombre400 etc.
tamano1..........tamano400 etc.

y asi con las demas variables lo que tendrias que hacer es añadir esas variables de esta forma:
foreach($campos as $n_de_campos)
    {
       for($i = $n_de_campos; $i >= 1; $i--)
      {
      $nombre = $_POST["nombre".$i];
     aqui añadimos las demas variables aplicando el mismo formato de la variable nombre  de esta forma :
  $tamano = $_POST["tamano".$i];
etc.
A ESO me refiero
Es facil programar "Solo interesate en aprender"
Uffff que lio.

Ahora me he perdido al 90%.

Con los datos que yo recibia, realizaba los UPDATES o INSERT si estaba identificado el usuario; lo unico que como tengo 2 o 3 tipos de usuarios, TODOS modifican TODO aunque algunos de los campos ya los obtengo yo de la base de datos.

Ten pongo el ejemplo del UPDATE (por ejemplo), y asi me explico un poco:


<?php
var_dump($_POST);
extract($_POST); 
$ema = $_SESSION['em'];
if ($ema <> ""){
    $numVariables = 21;
if ($v1 == ""  and $v2 == "" and $v3 == "" and $v4 == "" and $v5 == "" and $v6 == "" and $v7 == "" and $v8 == "" and $v9 == "" and $v10 == "" and $v11 == "" and $v12 == "" and $v13 == "" and $v14 == "" and $v15 == "" and $v16 == "" and $v17 == "" and $v18 == "" and $v19 == "" and $v20 == ""){
$accion = "listar";
if ($idmascota1 == ""  and $idmascota2 == "" and $idmascota3 == "" and $idmascota4 == "" and $idmascota5 == "" and $idmascota6 == "" and $idmascota7 == "" and $idmascota8 == "" and $idmascota9 == "" and $idmascota10 == "" and $idmascota11 == "" and $idmascota12 == "" and $idmascota13 == "" and $idmascota14 == "" and $idmascota15 == "" and $idmascota16 == "" and $idmascota17 == "" and $idmascota18 == "" and $idmascota19 == "" and $idmascota20 == ""){
$accion = "listar";    
}
else
{
$accion = "modificar";
}
}
else
{
$accion = "mostrarx";
}
echo "accion=" .$accion;


$conexion = mysql_connect('', '', '');
mysql_select_db('');
	$tablaa = mysql_query("SELECT * FROM Protectoras Where email ='".$ema ."'");
    $totall = mysql_num_rows($tablaa);
    if ($totall == ""){
        $procedenci = 2;
    }
    else
    {
        $tablaa2 = mysql_query("SELECT * FROM Protectoras Where email ='".$ema ."'");
        while ($aa233 = mysql_fetch_array($tablaa2)){ 
        $procedenci = $aa233['email'];
        $lug = $aa233['Nombre'];
        }
    }
$hora = date("d-m-Y H:i:s");
$modificad = $ema;
}
$numVariables = 0;
    if ($accion == "modificar"){
        if (isset($idmascota1)){
            $numVariables = $numVariables + 1;
        }
        if (isset($idmascota2)){
         $numVariables = $numVariables + 1;   
        }
        if (isset($idmascota3)){
            $numVariables = $numVariables + 1;
        }
        if (isset($idmascota4)){
            $numVariables = $numVariables + 1;
        }
        if (isset($idmascota5)){
            $numVariables = $numVariables + 1;
        }
        if (isset($idmascota6)){
            $numVariables = $numVariables + 1;
        }
        if (isset($idmascota7)){
            $numVariables = $numVariables + 1;
        }
        if (isset($idmascota8)){
            $numVariables = $numVariables + 1;
        }
        if (isset($idmascota9)){
            $numVariables = $numVariables + 1;
        }
        if (isset($idmascota10)){
         $numVariables = $numVariables + 1;
        }
        if (isset($idmascota11)){
            $numVariables = $numVariables + 1;
        }
        if (isset($idmascota12)){
            $numVariables = $numVariables + 1;
        }
        if (isset($idmascota13)){
            $numVariables = $numVariables + 1;
        }
        if (isset($idmascota14)){
            $numVariables = $numVariables + 1;
        }
        if (isset($idmascota15)){
            $numVariables = $numVariables + 1;
        }
        if (isset($idmascota16)){
            $numVariables = $numVariables + 1;
        }
        if (isset($idmascota17)){
            $numVariables = $numVariables + 1;
        }
        if (isset($idmascota18)){
            $numVariables = $numVariables + 1;
        }
        if (isset($idmascota19)){
            $numVariables = $numVariables + 1;
        }
        if (isset($idmascota20)){
            $numVariables = $numVariables + 1;
        }
        //$numVariables = $numVariables - 1;
        //echo "num= " .$numVariables;
    for($i = 0; $i < $numVariables; $i++){
$ii = $i +1;
$iinombre = "nombre" .$ii;
$iiestado = "estado" .$ii;
$iisexo = "sexo" .$ii;
$iiesterilizado = "esterilizado" .$ii;
$iiedad = "edad" .$ii;
$iihistoria = "historia" .$ii;
$iiacogido = "acogido" .$ii;
$iiapadrinado = "apadrinado" .$ii;
$iipeso = "peso" .$ii;
$iialtura = "altura" .$ii;
$iivacunas = "vacunas" .$ii;
$iienfermedades = "enfermedades" .$ii;
$iidisponible = "disponible" .$ii;
$iicomunidad = "comunidad" .$ii;
$iiyoutube = "youtube" .$ii;
$iiidmascota = "idmascota" .$ii;
if ($ii > 1){
$iitipo = "paises" .$ii;
$iiraza = "estados" .$ii;
$iitamano = "tamano" .$ii;
}
else
{
$iitipo = "paises";
$iiraza = "estados";
$iitamano = "tamano";
}

 $fotosubida = "fotosubida" .$ii;  
if ($$fotosubida <> ""){
$destino = substr($$iiidmascota, 1, 6);
$tamanofoto = $_FILES [ 'fotosubida' .$ii ][ 'size' ];
$tipofoto =  $_FILES['fotosubida' .$ii]['type'];
if ($tamanofoto < 300000){
$fot = "http://www.eluniversodelperro.com/imagenesanimales/" .$$iiidmascota .".jpg";
}
else{
$fot = "http://www.eluniversodelperro.com/imagenesanimales/0.jpg"; 
}
}
else
{
    $tablaa2 = mysql_query("SELECT * FROM mascotas Where mascota_id =".$$iiidmascota ."");
                while ($aa233 = mysql_fetch_array($tablaa2)){ 
                $fot = $aa233['Foto'];
                } 
}
$aga = substr($$iitipo, 0, 1);
$aga = $aga - 1;
            if ($lug == ""){
                $tablaa2 = mysql_query("SELECT * FROM mascotas Where mascota_id =".$idmascota1 ."");
                while ($aa233 = mysql_fetch_array($tablaa2)){ 
                $lug = $aa233['Lugar'];
                }
            }
            if ($tipofoto <> "image/jpeg"){
                $update = "UPDATE `BBDD`.`mascotas` SET `nombre` = '" .$$iinombre ."', tipo = '" .$aga ."', raza = '" .$$iiraza ."', tamano = '" .$$iitamano ."', estado = '" .$$iiestado ."', sexo = '" .$$iisexo ."', procedencia = '" .$procedenci ."', Esterilizado = '" .$$iiesterilizado ."', edad = '" .$$iiedad ."', Foto = 'http://www.eluniversodelperro.com/imagenesanimales/0.jpg', Lugar ='" .$lug ."', Historia = '" .$$iihistoria ."', acogido = '" .$$iiacogido ."', apadrinado = '" .$$iiapadrinado ."', peso = '" .$$iipeso ."', altura = '" .$$iialtura ."', vacunas = '" .$$iivacunas ."', enfermedades = '" .$$iienfermedades ."', Disponible = '" .$$iidisponible ."', Modificado = '" .$modificad ."', Modificacion = '" .$hora ."', Comunidad = '" .$$iicomunidad ."', youtube = '" .$$iiyoutube ."' WHERE `mascotas`.`mascota_id` = " .$$iiidmascota;
            }
            else{
  $update = "UPDATE `BBDD`.`mascotas` SET `nombre` = '" .$$iinombre ."', tipo = '" .$aga ."', raza = '" .$$iiraza ."', tamano = '" .$$iitamano ."', estado = '" .$$iiestado ."', sexo = '" .$$iisexo ."', procedencia = '" .$procedenci ."', Esterilizado = '" .$$iiesterilizado ."', edad = '" .$$iiedad ."', Foto = '" .$fot ."', Lugar ='" .$lug ."', Historia = '" .$$iihistoria ."', acogido = '" .$$iiacogido ."', apadrinado = '" .$$iiapadrinado ."', peso = '" .$$iipeso ."', altura = '" .$$iialtura ."', vacunas = '" .$$iivacunas ."', enfermedades = '" .$$iienfermedades ."', Disponible = '" .$$iidisponible ."', Modificado = '" .$modificad ."', Modificacion = '" .$hora ."', Comunidad = '" .$$iicomunidad ."', youtube = '" .$$iiyoutube ."' WHERE `mascotas`.`mascota_id` = " .$$iiidmascota;
  }
  $rss = mysql_query($update);
  echo "UPDATE=" .$update;
  $accion = "listar";
  

    // obtenemos los datos del archivo 

if ($tipofoto == "image/jpeg"){
if ($tamanofoto < 300000){
if (move_uploaded_file($_FILES['fotoo' .$ii]['tmp_name'], 'imagenesanimales/' .$destino .'.jpg')) {
} 
else {
echo "La foto correspondiente al IdAnimal: " .$destino ." no se ha  subido correctamente";
}
}
else
{
echo "La foto seleccionada para el animal con Id: " .$destino ." es demasiado grande (Max: 300Kb)";
}
    }
    else
    {
      echo "Solo estan permitidos los archivos .jpg; IdAnimal: " .$destino ." sin foto";  
    }
    }
        }


A lo que me refiero es que SI FUNCIONA PARA QUE CAMBIAR.
Se con certeza (porque lo he comprobado en la BBDD) que TODO lo hace perfecto, pero por lo que sea lo de la foto no funciona, pero el resto si, por eso me extraña cambiar una cosa que funciona
Ahhhh de acuerdo, entonces simplemente es meter dentro de mi bucle este codigo:

$nombre = $_POST["nombre".$i];

lo unico que si ya he extraido las variables, me dejara volver a hacelo?

Si es asi no hay problema, con 2 xorradas lo modifico y lo dejamos como tu dices.
pues tienes razon si funciona para que cambiar, pero ahora que veo es mucho tu codigo y el mio te podria servir para simplificarlo,te sugiero que si lo cambias duplica primero el archivo para que no vayas a hacer una equivocasion y uff ahora si este mas dificil.
Es facil programar "Solo interesate en aprender"
antes de hacer cualquier cosa vayamos directo al grano

en la foto cual es el valor de $destino

en el formulario el input se llama fotoo? , la carpeta existe? cual es el valor de $tipofoto y $tamanofoto porque en tipofoto pones "image/jpeg ???
Es facil programar "Solo interesate en aprender"
En cuanto a lo primero, que conste que si quieres lo guardo y lo modifico, pero bueno, nos metemos en foto que es lo que importa.

Ejecuto y te digo: (INTRODUCIR aunque es igual que MODIFICAR)

el input para subir la foto se llama "fotosubida"

$destino = substr($$iiidmascota, 1, 6); (viene a ser el id del animal, ya que TODAS las fotos se llama: 4523.jpg por ejemplo)

al activar el var_dump para mirar que cosas se pasan y que cosas no, he visto que fotosubida1 no se envia.

el valor de tamanofoto y tipofoto por lo tanto es de vacio.

Pongo lo de "image/jpeg" para que si se ha subido un archivo que no es de tipo imagen muestro error.
si se llama fotosubida

entonces porque pones $_FILES['fotoo' . $ii]

segunda si solo subiras una foto para que añades el $ii

tercera no se podra hacer lo de image/jpeg porque lo toma como string de texto cuarta te recomiendo hacer la comprobacion de imagen como te lo habia puesto antes

y bueno necesito ver algunas cosillas mas dime si estoy mal en algo que te dije

saludos
Es facil programar "Solo interesate en aprender"
Y esto como dices se ha liado un poco pero veraz que obtendremos la respuesta que a lo mejor esta en algo muy simple
Es facil programar "Solo interesate en aprender"
Pues si, creo que sera un tonteria.
Si quieres, puedes probarlo tu con el usuario y pass que he puesto al principio.
Pone fotoo porque al principio se llamaba asi, y como no funcionaba lo cambie, y me faltaba 1 cosa x cambiar, pero ese no es el fallo, porque ya de antes no me obtiene tipo, tamaño ni nada.

Añado e .$ii para que lo haga de forma automatica ya que tanto si introduces como si modificas (15 por ejemplo), introduciras 15 fotos, por eso lo meto dentro del bucle.

En cuanto a lo de hacer la compobacion con "image/jpeg" no hay problema, la hago con otra cosa que digas.

Y en cuanto a la comprobacion de imagen, no entiendo a que te refieres.
Pues si no obtienes ni campo ni nada de nada , es porque puede que este en lo correcto ya que si no obtienes nada es porque es lo mas probable que pongas mal el $_FILES y trates de obtener uno no existente revisa bien eso y pues antes de copyar el archivo subido yntenta de ponerle un echo con el $_FILES despues para ver si si escribe el nombre de la imageny si se obtenga y si no escribe es porque esta mal la obtencion del $_FILES
en cuanto a lo de la imagen yo hize una comprobacion para ver si es jpg o no es la que hize mas antes.
Es facil programar "Solo interesate en aprender"
Me explico mejor, no es que ponga mal lo del $_ffiles, es que no me pasa ese valor.

Es decir, con el var_dump te muestra todo lo que se pasa de un lado a otro por el metodo POST.
Selecciono la foto (el campo se llama "fotosubida"), pero luego cuando la deberia recibir, ese campo desaparece.

Para que lo entiendas mejor, accede a la Zona Personal, introduciendo los datos que te he comentado, ves a Introducir Animales, selecciona un registro para introducir solo 1, y coloca como "Nombre" lo que quieras, y selecciona una Foto.

Veras que cuando le das a continuar y te muestra los valores de los campos, "fotosubida" no aparece.

Un saludo

PD: Ese input esta dentro del FORM