Foros del Web » Programando para Internet » PHP »

Guardar a un directorio específico

Estas en el tema de Guardar a un directorio específico en el foro de PHP en Foros del Web. tengo un directorio de carpetas en un server donde una de ellas es IMG(imagenes) y ahí debo guardar imagenes proveniente desde un form. Averiguando en ...
  #1 (permalink)  
Antiguo 23/10/2005, 10:54
 
Fecha de Ingreso: abril-2005
Mensajes: 491
Antigüedad: 12 años, 8 meses
Puntos: 1
Guardar a un directorio específico

tengo un directorio de carpetas en un server donde una de ellas es IMG(imagenes) y ahí debo guardar imagenes proveniente desde un form.

Averiguando en el foro me han dado a entender que esas imagenes deberian tener un tipo de id algo así como 001Lago.jpg ¿Estoy en lo correcto?
y lo segundo es:

¿cómo hago para llevar esa imagen a la carpeta deseada y luego cómo la recupero ?? ya que en mi bd sólo guardaré el nombre de la imagen

Agradezco su asesoria
PD: Si es que ya hubiese estado posteado en otro lado mil disculpas

Última edición por under_ground; 23/10/2005 a las 19:44
  #2 (permalink)  
Antiguo 23/10/2005, 17:54
Avatar de jc_moty  
Fecha de Ingreso: septiembre-2005
Ubicación: Usulután, El Salvador
Mensajes: 477
Antigüedad: 12 años, 2 meses
Puntos: 1
De acuerdo RE: Guardar a un directorio específico

Segun entiendo, lo que queres hacer es subir las imagenes a un servidor desde un formulario; y en una bd de Mysql guardar la ruta de la imagen..fijate que yo he hecho algo similar...asi que sin mas bla, bla, bla
Pasemos al codigo

El html (frmsubir.html):
Código HTML:
<FORM ENCTYPE="multipart/form-data" METHOD="POST" ACTION="subir.php">
<TABLE BORDER=0 ALIGN="CENTER">
<TR>
<TD>Archivo a Adjuntar:</TD>
<TD><INPUT TYPE="file" NAME="archivo"></TD>
</TR>
</TABLE>
<INPUT TYPE="submit" VALUE="Enviar" name="upload">
</FORM> 
El php (subir.php)
Código PHP:
<?php
$cnx 
mysql_connect("servidor""usuario""clave");
mysql_select_db("nombre_de_la_base_de_datos"$cnx);
if(
$_FILES['archivo']['name'])
{
    
$local $_FILES['archivo']['name'];
    
$remoto $_FILES['archivo']['tmp_name'];
    
$extension explode("."$local);
    
$n count($extension)-1;
    
$miext="jpg";
    if(!
strcasecmp($extension[$n], $miext))
    {
        
// La variable para la BD
        
$ruta "imgs/" $local;
        if(
is_uploaded_file($remoto))
        {
            if(
move_uploaded_file($remoto$ruta))
                echo 
"Imagen subida correctamente";
            else
                echo 
"Error al Mover el archivo";
        }
        else
            echo 
"Error al subir el archivo";
        
mysql_query("INSERT INTO nombretabla VALUES('$ruta')");
    }
    else
        echo 
"<b>El Archivo debe ser exclusivamente .jpg</b>";
}
else
    echo 
"<b>Por favor seleccione un Archivo</b>";
?>
Como te daras cuenta no hay necesidad de ponerle ningun tipo de id a la imagen; simplemente se mueve con su nombre original al directorio y con ese mismo nombre se almacena en la base de datos.

Espero te sirva
Saludos!!!
  #3 (permalink)  
Antiguo 23/10/2005, 20:14
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 13 años, 4 meses
Puntos: 101
Código PHP:
if(!strcasecmp($extension[$n], $miext)) 
Una validación por extención NO ES SEGURA.
Código PHP:
            echo "Error al subir el archivo";
        
mysql_query("INSERT INTO nombretabla VALUES('$ruta')"); 
No es el lugar correcto para ejecutar guardar ese dato en la BD... ve que lo estás haciendo cuando el archivo no es subido. El lugar indicado es después de que te hayas asegurado que el archivo es colocado en donde corresponde:
Código PHP:
if(move_uploaded_file($remoto$ruta))
// aquí... 
Aconsejo se revize las FAQ y se busque en el foro.
FAQ: http://www.forosdelweb.com/showthrea...389#post249389


Cita:
Averiguando en el foro me han dado a entender que esas imagenes deberian tener un tipo de id algo así como 001Lago.jpg ¿Estoy en lo correcto?
... Sí y no. El nombre del archivo es irrelevante para PHP pero puede no serlo para tí. Quizá quieras darle un nombre que de alguna manera sea "descriptivo", por ejemplo: usuario.jpg, fecha.jpg, idasociativo_nombre.jpg, etc, etc, etc... también toma en cuenta que, sí el archivo existe (si corresponde el mismo nombre y ruta) se sustituirá, por ese lado quizá quieras asegurarte dare un nombre que no se repita.

Cita:
¿cómo hago para llevar esa imagen a la carpeta deseada y luego cómo la recupero ?? ya que en mi bd sólo guardaré el nombre de la imagen
Es con la función move_uploaded_file() con la que determinas el destino final del archivo (lease la FAQ). Para hacer uso de la BD no hay más que guardar el valor de la ruta relativo al archivo el cuál leerá --posteriormente-- la imágen ó emplear rutas absolutas ó algún sistema de "rutas dinámicas"; sólo tómese en cuenta.
Código PHP:
$ruta"carpeta/".$_FILES['archivo']['name']; // se define el archivo estará dentro de "carpeta"
move_uploaded_file($_FILES['archivo']['tmp_name'], $ruta); // se mueve

// se conecta y demás
mysql_query("INSERT INTO tabla(imagen) VALUES('$ruta')"); // se guarda el dato en la BD

// ahora podemos consultarlo
$consultamysql_query("SELECT imagen FROM tabla");
while(
$row=mysql_fetch_assoc($consulta)) {
     echo 
"<img src='".$row['imagen'].."'><br>";
    
// salida: <img src='carpeta/nombre_de_la_imagen.jpg'><br>

Es tema común y un método muy manejado en el foro. Un simple ejemplo: http://www.forosdelweb.com/f18/subir-fotos-carpeta-mediante-formulario-281287/
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"

Última edición por jam1138; 23/10/2005 a las 20:55
  #4 (permalink)  
Antiguo 23/10/2005, 22:21
 
Fecha de Ingreso: abril-2005
Mensajes: 491
Antigüedad: 12 años, 8 meses
Puntos: 1
Jam como siempre formidable aclaración...aplicando los conocmientos y consejos
  #5 (permalink)  
Antiguo 24/10/2005, 11:46
Avatar de jc_moty  
Fecha de Ingreso: septiembre-2005
Ubicación: Usulután, El Salvador
Mensajes: 477
Antigüedad: 12 años, 2 meses
Puntos: 1
A ver Jam, antes que nada gracias por las correcciones al codigo, pero dices que una comprobacion por extension no es segura; entonces que me recomiendas..
Código PHP:
if(!strcasecmp($extension[$n], $miext)) 
  #6 (permalink)  
Antiguo 24/10/2005, 12:01
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 13 años, 4 meses
Puntos: 101
Yep... no puedes fiarte de la extención. Simplemente:
- archivo.exe.jpg << sería válido
- ejecutable.jpg << sería válido (donde el código corresponde a un ejecutable)

Lo he dicho mucho últimamente... jejeje .

Lo que debes hacer es validar por el valor obtenido de $_FILES['el_archivo']['type'], osease, por el MIME-TYPE. En la FAQ que dejé se menciona eso ... Como sea, el MIME-TYPE se obtiene directamente del código fuente por lo que la validación es segura.

Y no son correciones , son comentarios, que no es lo mismo .

Paz!
PD: Estoy probando Flock desde recién un par de minutos jejeje...
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 10:56.