Foros del Web » Programando para Internet » PHP »

subir archibo creando autonumerico...

Estas en el tema de subir archibo creando autonumerico... en el foro de PHP en Foros del Web. Hola, tengo una pagina donde el usuario carga la foto que para enviar al directorio remoto ( una carpeta remota), despues automaticamente se dirige a ...
  #1 (permalink)  
Antiguo 16/06/2008, 10:01
 
Fecha de Ingreso: octubre-2007
Mensajes: 724
Antigüedad: 16 años, 6 meses
Puntos: 4
subir archibo creando autonumerico...

Hola, tengo una pagina donde el usuario carga la foto que para enviar al directorio remoto ( una carpeta remota), despues automaticamente se dirige a la pagina "subir_archibo_persona-restringido.php" para enviar la foto al directorio remoto donde hay el siguiente script que funciona perfectamente, pero queria hacer un autonumérico, es decir que cada foto que se envie, iniciaría el nombre del archibo con el autonumerico, es decir un usuario envia la foto " moto.jpg" que se convirtiera el nombre del archivo a "1moto.jpg" otro usuario envia otra foto con el nombre"moto.jpg" se convertiria en "2moto.jpg" como se hace eso ??( de esta manera nunca duplicaria nombres ) no tengo apenas conocimientos de programacion excepto lo que leo por la red. Agradeceria informacion clara.Gracias..

El script que tengo de "subir_archibo_persona-restringido.php" es el siguiente


<?php
$directorio_archivo = "./subir-fotos-personal/"; // tipo /home/user/public_html/archivos/
$nombre = strtr($_FILES['archivo']['name'], "ñ'ÁÉÍÓÚÀÈÌÒÙáéíóúäëïöüàèìòù123456789012345678 90", "n-AEIOUAEIOUaeiouaeiouaeiou");
$tamanio = $_FILES['archivo']['size'];
$tipo = $_FILES['archivo']['type'];
if(!is_file($directorio_archivo.$nombre)) {
copy($_FILES['archivo']['tmp_name'], $directorio_archivo.$nombre);
echo "Click en el siguiente enlace para finalizar el envio de tu foto <br>";
}
else echo "Este nombre de archibo ya existe.Ya existe una foto con ese nombre.Cambia el nombre del archibo para poder enviar la foto.Gracias.";
?>


que debo modificar para que ocurra eso ???? de autonumerar los archibos que se envian ????

Gracias....

Última edición por jonysi_d; 17/06/2008 a las 04:37
  #2 (permalink)  
Antiguo 16/06/2008, 11:10
Avatar de eft0  
Fecha de Ingreso: junio-2003
Ubicación: Santiago - Chile
Mensajes: 635
Antigüedad: 20 años, 10 meses
Puntos: 9
Respuesta: bubir archibo creando autonumerico...

Segun mi experiencia lo mejor en este caso es utilizar una base de datos, ya que guardas el nombre del archivo original, y ademas renombras la imagen completa, asi nunca se va a repetir el nombre utilizando alguna funcion del tipo time(), pero si lo que necesitas es justamente eso, creo que esto te podria servir:

Código PHP:
<?php
$directorio_archivo 
"./subir-fotos-personal/"// tipo /home/user/public_html/archivos/
$nombre time() . strtr($_FILES['archivo']['name'], "ñ'ÁÉÍÓÚÀÈÌÒÙáéíóúäëïöüàèìòù123456789012345678 90""n-AEIOUAEIOUaeiouaeiouaeiou");
$tamanio $_FILES['archivo']['size'];
$tipo $_FILES['archivo']['type'];
if(!
is_file($directorio_archivo.$nombre)) {
copy($_FILES['archivo']['tmp_name'], $directorio_archivo.$nombre);
echo 
"Click en el siguiente enlace para finalizar el envio de tu foto <br>";
}
else echo 
"Este nombre de archibo ya existe.Ya existe una foto con ese nombre.Cambia el nombre del archibo para poder enviar la foto.Gracias.";
?>
__________________
eft0's stuff! - http://estebanfernandez.net
  #3 (permalink)  
Antiguo 16/06/2008, 14:00
 
Fecha de Ingreso: octubre-2007
Mensajes: 724
Antigüedad: 16 años, 6 meses
Puntos: 4
Respuesta: bubir archibo creando autonumerico...

perfecto, va genial... eres el mejor:

una preguntilla, me genera el archibo con los siguientes numeros:

1213646244moto.jpg
1213646313moto.jpg

sigue alguna directriz numerica ?? o es aleatoria ???
  #4 (permalink)  
Antiguo 17/06/2008, 04:31
 
Fecha de Ingreso: octubre-2007
Mensajes: 724
Antigüedad: 16 años, 6 meses
Puntos: 4
Respuesta: bubir archibo creando autonumerico...

he creado esto, haver si veis el error, porque lo he provado y no me hace la accion que yo queria:
yo queria que al hacer el envio de la foto al directorio, se conectara a la base de datos para que enviara el nombre ( solo el nombre y la extenxion ) a un campo determinado de mi base de datos( en este caso el campo "foto" ):

<?
// Configurar las dos lineas siguientes
mysql_connect("localhost","root","");
mysql_select_db("nombre-base de datos");
$imagen = addslashes(fread(fopen($imagen, "r"), filesize($imagen)));
$nombre = $_POST["nombre"];
mysql_query("INSERT INTO fotos (foto) VALUES ('$nombre')");
?>
Se ha subido la imagen a la base de datos
<?php
$directorio_archivo = "./subir-fotos-personal/"; // tipo /home/user/public_html/archivos/
$nombre = time() . strtr($_FILES['archivo']['name'], "ñ'ÁÉÍÓÚÀÈÌÒÙáéíóúäëïöüàèìòù123456789012345678 90", "n-AEIOUAEIOUaeiouaeiouaeiou");
$tamanio = $_FILES['archivo']['size'];
$tipo = $_FILES['archivo']['type'];
if(!is_file($directorio_archivo.$nombre)) {
copy($_FILES['archivo']['tmp_name'], $directorio_archivo.$nombre);
echo "Click en el siguiente enlace para finalizar el envio de tu foto <br>";
}
else echo "Este nombre de archibo ya existe.Ya existe una foto con ese nombre.Cambia el nombre del archibo para poder enviar la foto.Gracias.";
?>

si me sube el archivo a la carpeta remotoa, pero el nombre y la extension, no me la envia a la base de datos.
Lo curioso esque no me da error, me sale el mensaje " Se ha subido la imagen a la base de datos Click en el siguiente enlace para finalizar el envio de tu foto "

¿¿¿¿¿ porque ??????
  #5 (permalink)  
Antiguo 17/06/2008, 06:22
Avatar de Marvin
Colaborador
 
Fecha de Ingreso: febrero-2005
Ubicación: global $Chile->Santiago;
Mensajes: 1.991
Antigüedad: 19 años, 3 meses
Puntos: 81
Respuesta: subir archibo creando autonumerico...

Tienes que fijarte que al mover el archivo a la carpeta remota le haces un cambio de nombre:
Código PHP:
$nombre time() . strtr($_FILES['archivo']['name'], "ñ'ÁÉÍÓÚÀÈÌÒÙáéíóúäëïöüàèìòù123456789012345678 90""n-AEIOUAEIOUaeiouaeiouaeiou"); 
Y el nombre que estas guardando en la base de datos es:
Código PHP:
$nombre $_POST["nombre"]; 
Cambialo por esto:
Código PHP:
<?
// Configurar las dos lineas siguientes
mysql_connect("localhost","root","");
mysql_select_db("nombre-base de datos");
$imagen addslashes(fread(fopen($imagen"r"), filesize($imagen)));
$nombre time() . strtr($_FILES['archivo']['name'], "ñ'ÁÉÍÓÚÀÈÌÒÙáéíóúäëïöüàèìòù123456789012345678 90""n-AEIOUAEIOUaeiouaeiouaeiou");
mysql_query("INSERT INTO fotos (foto) VALUES ('$nombre')");
?>
Se ha subido la imagen a la base de datos
<?php
$directorio_archivo 
"./subir-fotos-personal/"// tipo /home/user/public_html/archivos/
$nombre time() . strtr($_FILES['archivo']['name'], "ñ'ÁÉÍÓÚÀÈÌÒÙáéíóúäëïöüàèìòù123456789012345678 90""n-AEIOUAEIOUaeiouaeiouaeiou");
$tamanio $_FILES['archivo']['size'];
$tipo $_FILES['archivo']['type'];
if(!
is_file($directorio_archivo.$nombre)) {
copy($_FILES['archivo']['tmp_name'], $directorio_archivo.$nombre);
echo 
"Click en el siguiente enlace para finalizar el envio de tu foto <br>";
}
else echo 
"Este nombre de archibo ya existe.Ya existe una foto con ese nombre.Cambia el nombre del archibo para poder enviar la foto.Gracias.";
?>
De esta manera te quedaran los nombres de la base de datos tal cual estan los nombres de los archivos y podras manejarlos.

Tambien te recomiendo que veas si las consultas a la base de datos son positivas... algo como esto:
Código PHP:
$conexion mysql_connect("localhost","root","") or die('Error mysql: '.mysql_error());
mysql_select_db("nombre-base de datos");
$imagen addslashes(fread(fopen($imagen"r"), filesize($imagen)));
$nombre time() . strtr($_FILES['archivo']['name'], "ñ'ÁÉÍÓÚÀÈÌÒÙáéíóúäëïöüàèìòù123456789012345678 90""n-AEIOUAEIOUaeiouaeiouaeiou");
if(
mysql_query("INSERT INTO fotos (foto) VALUES ('$nombre')")){
    echo 
'Se ha subido la imagen a la base de datos';
}else{
    echo 
'Error al subir el nombre de imagen a la base de datos: '.mysql_error();

Suerte!
__________________
El que dice "Solo sé que nada sé", esta asumiendo que sabe algo.
Lea las FAQ's!
  #6 (permalink)  
Antiguo 17/06/2008, 07:31
 
Fecha de Ingreso: octubre-2007
Mensajes: 724
Antigüedad: 16 años, 6 meses
Puntos: 4
Respuesta: subir archibo creando autonumerico...

solucionado, ers un maestro amigo....
el unico problema que havia esra que se tenia que borrar lo siguiente:
$imagen = addslashes(fread(fopen($imagen, "r"), filesize($imagen)));

ahora bien, te explico el problema que me ha generado:
primero, el usuario ( mediante un formulario POST inserta una serie de datos como (nombre,descripcion, etc...) una vez rellenado el formulario, an clickar en "enviar" se dirige a la pagina donde carga el archibo para enviar al directorio remoto,una vez seleccionado el archibo a enviar le da al boton "enviar" y lo que hace és: envia la foto a la carpeta remota y despues envia el nombre del archibo a la base de datos, hasta ahy perfecto, pero lo que hace és en la Base de Datos, crear otro registro solo con el nombre del archibo enviado, es decir, no lo envia al registro el cual habia enviado el formulario.

No se si me he explicado bien...

Última edición por jonysi_d; 17/06/2008 a las 07:45
  #7 (permalink)  
Antiguo 17/06/2008, 09:41
 
Fecha de Ingreso: octubre-2007
Mensajes: 724
Antigüedad: 16 años, 6 meses
Puntos: 4
Respuesta: subir archibo creando autonumerico...

ayuda porfavor... no se que hacer...
  #8 (permalink)  
Antiguo 17/06/2008, 16:49
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: subir archibo creando autonumerico...

Hola jonysi_d,

Para eso debes de enviar un comando UPDATE, no un comando INSERT.

Saludos.
  #9 (permalink)  
Antiguo 18/06/2008, 03:26
 
Fecha de Ingreso: octubre-2007
Mensajes: 724
Antigüedad: 16 años, 6 meses
Puntos: 4
Respuesta: subir archibo creando autonumerico...

Podiras guiarme un poco, no se ni como empezar con INSERT ( soy novato en programacion ) no se si tu podrias guiarme modificando el PHP ???

<?php
// Configurar las dos lineas siguientes
mysql_connect("localhost","root","");
mysql_select_db("mi base de datos");
$nombre = time() . strtr($_FILES['archivo']['name'], "ñ'ÁÉÍÓÚÀÈÌÒÙáéíóúäëïöüàèìòù123456789012345678 90", "n-AEIOUAEIOUaeiouaeiouaeiou");
mysql_query("INSERT INTO fotos (foto) VALUES ('$nombre')");
?>

<?php
$directorio_archivo = "./subir-fotos-personal/"; // tipo /home/user/public_html/archivos/
$nombre = time() . strtr($_FILES['archivo']['name'], "ñ'ÁÉÍÓÚÀÈÌÒÙáéíóúäëïöüàèìòù123456789012345678 90", "n-AEIOUAEIOUaeiouaeiouaeiou");
$tamanio = $_FILES['archivo']['size'];
$tipo = $_FILES['archivo']['type'];
if(!is_file($directorio_archivo.$nombre)) {
copy($_FILES['archivo']['tmp_name'], $directorio_archivo.$nombre);
echo "Click en el siguiente enlace para finalizar el envio de tu foto <br>";
}
else echo "Este nombre de archibo ya existe.Ya existe una foto con ese nombre.Cambia el nombre del archibo para poder enviar la foto.Gracias.";
?>
  #10 (permalink)  
Antiguo 18/06/2008, 05:11
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 2 meses
Puntos: 52
Respuesta: subir archibo creando autonumerico...

Hola jonysi_d

primero, cuando insertas los datos del usuario, en que tabla lo haces en la tabla fotos?

si es asi, habras de saber que usuario es el que esta subiendo el archivo, lo puedes hacer con sesiones o ir pasando el nombre del user mediante POST y despues, en vez de hacer el insert, haz lo que te dijo GatorV, un UPDATE
mas o menos asi, pero usando bien los nombres de tus variables y nombres de campos de la BD


UPDATE fotos SET foto = '$nombre' WHERE nombre_user = $user

Un saludo
  #11 (permalink)  
Antiguo 18/06/2008, 07:06
 
Fecha de Ingreso: octubre-2007
Mensajes: 724
Antigüedad: 16 años, 6 meses
Puntos: 4
Respuesta: subir archibo creando autonumerico...

esto es lo que tengo que modificar ????

<?php
// Configurar las dos lineas siguientes
mysql_connect("localhost","root","");
mysql_select_db("si sitio");
$nombre = time() . strtr($_FILES['archivo']['name'], "ñ'ÁÉÍÓÚÀÈÌÒÙáéíóúäëïöüàèìòù123456789012345678 90", "n-AEIOUAEIOUaeiouaeiouaeiou");
mysql_query("INSERT INTO fotos (foto) VALUES ('$nombre')");
?>

y combiarlo por eso ?? voy a provar,....

UPDATE fotos SET foto = '$nombre' WHERE nombre_user = $user
  #12 (permalink)  
Antiguo 18/06/2008, 07:21
 
Fecha de Ingreso: octubre-2007
Mensajes: 724
Antigüedad: 16 años, 6 meses
Puntos: 4
Respuesta: subir archibo creando autonumerico...

lo he provado, y el formulario de la 1ª pagina si me sube a la Base de Datos y la foto al directorio remoto, pero no hace nada de lo que yo queria , que era que el nombre de la foto se colocara en la base de datos tambien en dentro del registro el cual habia enviado anteriormente con el formulario.
es decir:
nombre tabla: fotos
campos: fotosid ( int / auto_increment),nombre(vanchar/noto_null),usuario(,vanchar_not_null),lugarfoto(va nchar/not_null),,descripcion(longtext/not_null),foto(vanchar /null).

el 1er formulario se rellena con un campo oculto, que es el de "foto", para una vez introducido los datos, se dirije a otra pagina para cargar el archibo i enviarlo a la carpeta remota, pero quiero que tambien la envie a la linea "foto" del anterior formulario enviado.

es possible ????
  #13 (permalink)  
Antiguo 18/06/2008, 07:32
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 2 meses
Puntos: 52
Respuesta: subir archibo creando autonumerico...

mira a ver asi:

UPDATE fotos SET foto = '$nombre' WHERE usuario = $user

Y mira bien una cosa,

La variable $user, ha de ser la que viene por post del form, si pusieras mas codigo, me seria mas facil explicartelo, pero no enseñas como recoges del form las variables.

Un saludo
  #14 (permalink)  
Antiguo 18/06/2008, 08:10
 
Fecha de Ingreso: octubre-2007
Mensajes: 724
Antigüedad: 16 años, 6 meses
Puntos: 4
Respuesta: subir archibo creando autonumerico...

este es el form( formulario)
<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")
{
$theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;

$theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

switch ($theType) {
case "text":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "long":
case "int":
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
break;
case "double":
$theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL";
break;
case "date":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "defined":
$theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
break;
}
return $theValue;
}
}

$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
$editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {
$insertSQL = sprintf("INSERT INTO fotos (nombre, usuario, lugarfoto, descripcion, foto) VALUES (%s, %s, %s, %s, %s)",
GetSQLValueString($_POST['nombre'], "text"),
GetSQLValueString($_POST['usuario'], "text"),
GetSQLValueString($_POST['lugarfoto'], "text"),
GetSQLValueString($_POST['descripcion'], "text"),
GetSQLValueString($_POST['foto'], "text"));

mysql_select_db($database_misitio, $misitio);
$Result1 = mysql_query($insertSQL, $misitio) or die(mysql_error());

$insertGoTo = "enviar-fotos-paso2_personal_restringido.php";
if (isset($_SERVER['QUERY_STRING'])) {
$insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
$insertGoTo .= $_SERVER['QUERY_STRING'];
}
header(sprintf("Location: %s", $insertGoTo));
}
--------------------------------------------------

<form method="post" name="form1" action="<?php echo $editFormAction; ?>">
<table align="center">
<tr valign="baseline">
<td nowrap align="right">Nombre:</td>
<td><input type="text" name="nombre" value="" size="32"></td>
</tr>
<tr valign="baseline">
<td nowrap align="right">Usuario:</td>
<td><input type="text" name="usuario" value="<?php echo $_SESSION['MM_Username']; ?>" size="32"></td>
</tr>
<tr valign="baseline">
<td nowrap align="right">Lugarfoto:</td>
<td><input type="text" name="lugarfoto" value="" size="32"></td>
</tr>
<tr valign="baseline">
<td nowrap align="right">Descripcion:</td>
<td><input type="text" name="descripcion" value="" size="32"></td>
</tr>
<tr valign="baseline">
<td nowrap align="right">&nbsp;</td>
<td><input type="submit" value="Insertar registro"></td>
</tr>
</table>
<input type="hidden" name="foto" value="">
<input type="hidden" name="MM_insert" value="form1">
</form>

este es la carga del archibo:


<form action="subir_archivo_personal-restringido.php" method="POST" enctype="multipart/form-data" name="form1">
<p align="center">
<input name="archivo" type="file" id="archivo" onMouseOver="MM_showHideLayers('Layer11','','show' );MM_showHideLayers('Layer11','','show')" value="" size="32" />
<input type="submit" name="Submit" value="Enviar" />
</p>
<div class="Estilo83" id="Layer11" onfocus="MM_showHideLayers('Layer11','','show')">< span class="Estilo85">Los nombres de los archivos deben constar de letras y numero tansolo.</span> <span class="Estilo73 Estilo84">El archibo o foto que vas a enviar no puede tener caracteres especiales ( no reconoce los signos &quot;()!?&iquest;_-&amp;%$ entre otros, ) </span></div>
<p align="center">&nbsp;</p>
<p align="center">&nbsp;</p>
<p align="center">
<label>nombre
<input type="text" name="textfield" />
</label>
</p>
<p align="center" class="Estilo79">LAS FOTOS NO PUEDEN SER DE MAS DE 1 MEGA DE PESO Y DIMENSIONES DE 1000*800 maximo </p>
<p align="center" class="Estilo79"> (si quereis enviar fotos con mas capacidad, enviarmela por e-mail, yo me ocupare de colocarla en la web)</p>
<p align="center">&nbsp; </p>
<p align="center">
<input name="radiobutton" type="radio" value="radiobutton" checked>
Enviando la foto nos das permiso para que podamos publicar la imagen<em><strong> en nuestra web</strong></em>. </p>
<p align="center">
<label></label>
<label></label>
&nbsp;</p>
</form>

este es el codigo de subir archibo:

<?php
// Configurar las dos lineas siguientes
mysql_connect("localhost","root","");
mysql_select_db("nombre base de datos....");
$nombre = time() . strtr($_FILES['archivo']['name'], "ñ'ÁÉÍÓÚÀÈÌÒÙáéíóúäëïöüàèìòù123456789012345678 90", "n-AEIOUAEIOUaeiouaeiouaeiou");
mysql_query("UPDATE fotos SET foto = '$nombre' WHERE nombre_user = '$user')");
?>
Se ha subido la imagen a la base de datos
<?php
$directorio_archivo = "./subir-fotos-personal/"; // tipo /home/user/public_html/archivos/
$nombre = time() . strtr($_FILES['archivo']['name'], "ñ'ÁÉÍÓÚÀÈÌÒÙáéíóúäëïöüàèìòù123456789012345678 90", "n-AEIOUAEIOUaeiouaeiouaeiou");
$tamanio = $_FILES['archivo']['size'];
$tipo = $_FILES['archivo']['type'];
if(!is_file($directorio_archivo.$nombre)) {
copy($_FILES['archivo']['tmp_name'], $directorio_archivo.$nombre);
echo "Click en el siguiente enlace para finalizar el envio de tu foto <br>";
}
else echo "Este nombre de archibo ya existe.Ya existe una foto con ese nombre.Cambia el nombre del archibo para poder enviar la foto.Gracias.";
?>

es este el codigo que necesitavas ????

Última edición por jonysi_d; 18/06/2008 a las 08:23
  #15 (permalink)  
Antiguo 18/06/2008, 10:02
 
Fecha de Ingreso: octubre-2007
Mensajes: 724
Antigüedad: 16 años, 6 meses
Puntos: 4
Respuesta: subir archibo creando autonumerico...

alguien tiene algun respuesta '??' gracias...
  #16 (permalink)  
Antiguo 19/06/2008, 02:41
 
Fecha de Ingreso: octubre-2007
Mensajes: 724
Antigüedad: 16 años, 6 meses
Puntos: 4
Respuesta: subir archibo creando autonumerico...

alguna respuesta ??? alguien puede orientarme ???
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.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:41.