Foros del Web » Programando para Internet » PHP »

Guardar la ruta en la bd al subir la imagen.

Estas en el tema de Guardar la ruta en la bd al subir la imagen. en el foro de PHP en Foros del Web. Código PHP: <?php include_once( "../conex/conex.php" ); include_once( "../conex/ses.php" ); $link = Conectarse ();  if (isset( $_POST [ 'submit' ])) {      if( is_uploaded_file ( $_FILES [ 'fichero' ][ ...
  #1 (permalink)  
Antiguo 28/07/2006, 23:39
 
Fecha de Ingreso: diciembre-2004
Ubicación: Cordoba - Argentina
Mensajes: 503
Antigüedad: 19 años, 4 meses
Puntos: 1
Guardar la ruta en la bd al subir la imagen.

Código PHP:
<?php
include_once("../conex/conex.php");
include_once(
"../conex/ses.php");
$link=Conectarse(); 

if (isset(
$_POST['submit'])) { 
    if(
is_uploaded_file($_FILES['fichero']['tmp_name'])) { // verifica haya sido cargado el archivo
        
$ruta '../users_imgs' ;
        if(
move_uploaded_file($_FILES['fichero']['tmp_name'], $ruta '/' $_FILES['fichero']['name'])) { // se coloca en su lugar final
        
$img_ruta "../users_imgs".$_FILES['fichero']['name'];
        
//Ejecucion de la sentencia SQL
        
mysql_query("insert into usuarios (img_ruta) values ('$img_ruta') where id='$_SESSION[Admin]'");
                    echo 
"<b>Upload exitoso!. Datos:</b><br>";
            echo 
"Nombre: <i><a href=\"../users_imgs/".$_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>
Bueno, todo funciona ok, a exepecion de que la consulta sql no inserta el valor de la url en la base de datos, alguna idea?

Y otra problema que no se como solucionar, es como lograr que en caso de que se suba una imagen con un nombre repetido, le cambie el nombre, ya que si bien pueden tener el mismo nombre, no necesariamente tienen que ser iguales.

Saludos.

Última edición por jam1138; 30/07/2006 a las 02:52
  #2 (permalink)  
Antiguo 29/07/2006, 02:59
Avatar de ZiTAL  
Fecha de Ingreso: marzo-2004
Ubicación: Bermio (Bizkaia)
Mensajes: 1.545
Antigüedad: 20 años, 1 mes
Puntos: 62
puedes mostrar la descripcion de la tabla usuarios?

puede ser que en vez de insert deba ser un update ya que supongo que algunos campos seran clave.

Otra cosita, no pondria $_SESSION['Admin'], antes meteria en otra variable, ejemplo:

$admin=$_SESSION['Admin'];

y luego en el sql pones '$admin'.

Suerte!!!

;)
__________________
http://zital.no-ip.org
____________________

Euskerie ahuen eta bijotzan
  #3 (permalink)  
Antiguo 29/07/2006, 07:10
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 7 meses
Puntos: 381
Buenas

yo... por decir algo, prueba a decírselo así con la sentencia sql

mysql_query("insert into usuarios (img_ruta) values ('$img_ruta') where id='{$_SESSION[Admin]}'");
  #4 (permalink)  
Antiguo 29/07/2006, 07:26
 
Fecha de Ingreso: diciembre-2005
Mensajes: 7
Antigüedad: 18 años, 3 meses
Puntos: 0
pregunta

Me puedes decir como subes las imagenes al servidor???

yo cuando intento subir un archivo al servidor ftp me sale el siguiente problema

Fatal error: Call to undefined function: ftp_connect() in /data/members/free/tripod/es/b/s/s/xdato/htdocs/xarchivo.php on line 7

alguien me puede decir como solucionarlo
  #5 (permalink)  
Antiguo 29/07/2006, 12:25
 
Fecha de Ingreso: diciembre-2004
Ubicación: Cordoba - Argentina
Mensajes: 503
Antigüedad: 19 años, 4 meses
Puntos: 1
Cita:
puedes mostrar la descripcion de la tabla usuarios?

puede ser que en vez de insert deba ser un update ya que supongo que algunos campos seran clave.

Otra cosita, no pondria $_SESSION['Admin'], antes meteria en otra variable, ejemplo:

$admin=$_SESSION['Admin'];

y luego en el sql pones '$admin'.

Suerte!!!

;)
No me funciono , por cierto la tabla usuarios esta compuesta por los campos id(PK), nick, img_ruta, entre otros.

Cita:
mysql_query("insert into usuarios (img_ruta) values ('$img_ruta') where id='{$_SESSION[Admin]}'");
Tampoco funciono.

Quedo asi: (no se lien con el nombre de la sesion, que lo cambie a usuario ya que es para los usuarios.)

Lo que me parece extraño, es que es la unica consulta sql que no funciona, aparte de eso el explorador no tira ningun error.

Código:
<?php
include_once("../conex/conex.php");
include_once("../conex/ses.php");
$link=Conectarse(); 

if (isset($_POST['submit'])) { 
    if(is_uploaded_file($_FILES['fichero']['tmp_name'])) { // verifica haya sido cargado el archivo
    	$ruta = '../users_imgs' ;
        if(move_uploaded_file($_FILES['fichero']['tmp_name'], $ruta . '/' . $_FILES['fichero']['name'])) { // se coloca en su lugar final
        $img_ruta = "../users_imgs".$_FILES['fichero']['name'];
        //Ejecucion de la sentencia SQL
        $usuario=$_SESSION['Usuario'];
		mysql_query("update usuarios (img_ruta) values ('$img_ruta') where id='$usuario'");
                    echo "<b>Upload exitoso!. Datos:</b><br>";
            echo "Nombre: <i><a href=\"../users_imgs/".$_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>
  #6 (permalink)  
Antiguo 29/07/2006, 12:29
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 7 meses
Puntos: 381
mmm y $_SESSION['Usuario'] ¿qué tipo de valor devuelve? ¿es un string? es el mismo tipo de dato que se guarda en el campo id?
  #7 (permalink)  
Antiguo 29/07/2006, 12:32
 
Fecha de Ingreso: diciembre-2004
Ubicación: Cordoba - Argentina
Mensajes: 503
Antigüedad: 19 años, 4 meses
Puntos: 1
en el index.php (loguin) cuando el usuario accede, solo le doy el valor de la id:

Código:
if ($cant>0) {
	        $r=mysql_fetch_array($res);
		session_name( 'usuario' );
		session_start();
		$_SESSION["Usuario"] = $r[id];
  #8 (permalink)  
Antiguo 29/07/2006, 12:53
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 7 meses
Puntos: 381
¿Has probado a hacer un echo "update usuarios (img_ruta) values ('$img_ruta') where id='$usuario'" a ver qué devuelve?
  #9 (permalink)  
Antiguo 29/07/2006, 13:03
 
Fecha de Ingreso: diciembre-2004
Ubicación: Cordoba - Argentina
Mensajes: 503
Antigüedad: 19 años, 4 meses
Puntos: 1
Sip, si te fijas arriba, esa es la sentencia que utilize.

Saludos.
  #10 (permalink)  
Antiguo 29/07/2006, 13:09
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 7 meses
Puntos: 381
Yap, pero si le pides que te lo escriba con un echo ¿qué le llega al navegador?
  #11 (permalink)  
Antiguo 29/07/2006, 13:18
Avatar de Riven-Ward  
Fecha de Ingreso: julio-2006
Mensajes: 33
Antigüedad: 17 años, 8 meses
Puntos: 0
Cita:
Iniciado por tunait
Yap, pero si le pides que te lo escriba con un echo ¿qué le llega al navegador?
Lo mejor en este caso es ponerle un or die (mysql_error()) para ver asi cuál es el error que devuelve el MySQL mismo.

Algo asi:

Código PHP:
$sql mysql_query ("QUERY") or die ("Error: ".mysql_query()); 
Y lo que pasa con tu código es que en las querys con mysql_query no se aceptan ese tipo de variables, véase $_POST[], $_GET[], etc... (Yo creo que el $_ o el [] no le gusta al SQL), entonces lo que se hace (o porlomenos yo lo hago xD) y bien hiciste tu es poner ese valor del array superglobal hacia una variable de "nombre normal" y luego haces la query.

Código PHP:
$var $_SESSION["algo"]; 
Salu2!
  #12 (permalink)  
Antiguo 29/07/2006, 14:58
 
Fecha de Ingreso: diciembre-2004
Ubicación: Cordoba - Argentina
Mensajes: 503
Antigüedad: 19 años, 4 meses
Puntos: 1
Cita:
Yap, pero si le pides que te lo escriba con un echo ¿qué le llega al navegador?
Esto le llega:

Cita:
(update usuarios (img_ruta) values ('../users_imgsdvdx3ny.gif') where id='30')Upload exitoso!. Datos:
Cita:
Lo mejor en este caso es ponerle un or die (mysql_error()) para ver asi cuál es el error que devuelve el MySQL mismo.
Me devuelve lo siguiente: (por cierto no van comillas, si no '')

Cita:
ErrorYou have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(img_ruta) values ('../users_imgsvn_10_1024x768.jpg') where id='30'' at line 1
Alguna idea?
  #13 (permalink)  
Antiguo 30/07/2006, 03:19
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 7 meses
Puntos: 381
Uf, seré béstia de no haberme fijado antes ... se está usando una sintaxis para insertar y no para actualizar, pídeselo así y nos cuentas

mysql_query("update usuarios set img_ruta)'$img_ruta' where id='$usuario'");

un saludo
  #14 (permalink)  
Antiguo 30/07/2006, 03:23
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 8 meses
Puntos: 102
Tu problema, como bien indica el error devuelto, no es con PHP sino con SQL... simplemente la sintaxis de un UPDATE no es así --¿seguro que actualizarás?--, debería de ser algo como:

UPDATE usuarios SET img_ruta='../users_imgsdvdx3ny.gif' WHERE id='30'

http://dev.mysql.com/doc/refman/5.0/en/update.html


Un par de comentarios:

- Utilizas dos variables para lo mismo ($img_ruta y $ruta), o al menos veo terminan con el mismo valor, lo cuál entiendo es lo correcto; una indica donde mueves el archivos, la otra es para almacenar esa ruta en la BD... si bien esta varible representa lo mismo, o deben ser lo mismo, ¿no pueden ser la misma --una sola--?. Esto puede generarte posteriores errores al querer modificar tu script y un error de optimización actual.

- El que ejecutes la función mysql_query() no te asegura dicha query haya sido ejecutada correctamente (tal es el caso ahora). Te sugiero crees un bloque para preveer ese caso...

- Plantea bien las situaciones: ahora estás actualizando un dato que supones ya existe (actualizas).

En fin, comentarios así por encimita... El único par de 4 . Saludos!

PD: Básico... separa las cosas SQL (querys, bases de datos...) es totalmente independiente de PHP...
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #15 (permalink)  
Antiguo 30/07/2006, 03:26
 
Fecha de Ingreso: diciembre-2004
Ubicación: Cordoba - Argentina
Mensajes: 503
Antigüedad: 19 años, 4 meses
Puntos: 1
No hubo forma, hice un echo y me tiro esto:

update usuarios set img_ruta)'../users_imgs518239257.gif' where id='30'Upload exitoso!. Datos:

  #16 (permalink)  
Antiguo 30/07/2006, 03:46
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 7 meses
Puntos: 381
Cita:
Iniciado por Snake nS
No hubo forma, hice un echo y me tiro esto:

update usuarios set img_ruta)'../users_imgs518239257.gif' where id='30'Upload exitoso!. Datos:

Uf, está mal puesta la línea que te dejé, me salió un ) en vez de un =

mysql_query("update usuarios set img_ruta='$img_ruta' where id='$usuario'");
  #17 (permalink)  
Antiguo 30/07/2006, 04:53
Avatar de omega2122  
Fecha de Ingreso: julio-2006
Ubicación: My Home
Mensajes: 76
Antigüedad: 17 años, 9 meses
Puntos: 0
Creo que ya se cual es el problema, creo que es que no te estas conectando con la Base de Datos porque no pruebas con esto:

Código PHP:
mysql_query("update usuarios set img_ruta='$img_ruta' where id='$usuario'",$link); 
Me imagino que por el valor que estas dandole a la variable $link, estas usando este script para conectarte a la Base de datos:

Código PHP:
function Conectarse()
{
if (!(
$link=mysql_connect("localhost","usuario","Password")))
{
echo 
"Error conectando a la base de datos.";
exit();
}
if (!
mysql_select_db("base_datos",$link))
{
echo 
"Error seleccionando la base de datos.";
exit();
}
return 
$link;

Por lo que veo creo que el error que tienes en el upload es este.

Estas llamando al Script cuando le determinas el valor a la variable $link.... pero no estas usando esa variable....
__________________
=P jaja..
  #18 (permalink)  
Antiguo 30/07/2006, 08:54
 
Fecha de Ingreso: mayo-2004
Ubicación: Ciudad de la Habana
Mensajes: 85
Antigüedad: 19 años, 11 meses
Puntos: 0
Hola Snake nS mira eso es un problema sencillo te voy a dar un ejemplo de lo que yo hice para que tú saques de ahí la idea de lo que quieres a ver si te resuelve.

Código PHP:
<?php 
//Recogemos los valores de los campos del formulario 
$lang1$_POST['lang'];
$clasif $_POST['clasif'];
$tit $_POST['tit'];
$desc $_POST['desc'];
$not $_POST['not'];
$fte $_POST['fte'];
$fpub date('Y-m-d');
$hpub date('H:i:s');
$tamano $_POST['MAX_FILE_SIZE'];
$destino ='img/'.$clasif.'/';

// sacamos nombre completo del archivo y lo mostramos

$name $_FILES['image']['name'];

//sacamos la extension y la mostramos
$ok false;
$ext explode('.',$name);
$nr count($ext);
$exte $ext[$nr-1];
if (
$exte == 'jpg' || $exte == 'gif'){
$ok true;
}
//sacamos el tamaño y lo mostramos
$tam $_FILES['image']['size'];

//chequeamos si la extension es admitida y si cumple con el tama;o maximo y procesamos el archivo.
 
if (!move_uploaded_file($_FILES['image']['tmp_name'], $destino.$_FILES['image']['name'])){
 echo 
'error al subir el archivo';
 } else { 
 echo 
'<table width="437" height="68" border="0" align="center" cellpadding="0" cellspacing="0" class="avisos">
  <tr>
    <td height="68" valign="top"><p class="avisosin Estilo1">La informaci&oacute;n ha sido insertada en la base de datos, ya est&aacute; disponible para su visualizaci&oacute;n por los usuarios desde Internet y desde la Internet de Cuba.</p>    </td>
  </tr>
</table>'
;
$destino =$destino.$name;
}

//guardar la direccion donde estara el archivo para tenerlo dentro de la base de datos
//conectamos a la base
$connect=mysql_connect('localhost','manuel','kimeramarukun');
//Seleccionamos la base
mysql_select_db("jc",$connect);
//insertamos los registros almacenados en las variables
mysql_query("insert into noticias(lang, clasif, tit, descr, notic, fuente, f_pub, h_pub, inot) values('$lang','$clasif','$tit','$desc','$not','$fte','$fpub','$hpub','$destino')",$connect) or die(mysql_error());
header("location: actua.php");
?>
  #19 (permalink)  
Antiguo 30/07/2006, 09:04
 
Fecha de Ingreso: julio-2006
Mensajes: 96
Antigüedad: 17 años, 9 meses
Puntos: 2
hola la consulta seria asi mira:

mysql_query("insert into usuarios (img_ruta) values ("".$img_ruta."") where id='$_SESSION[Admin]'");

proba asi o sin las comilaas y que los campos existan che.

Saludos
  #20 (permalink)  
Antiguo 30/07/2006, 09:24
Avatar de alcamadi  
Fecha de Ingreso: marzo-2006
Mensajes: 45
Antigüedad: 18 años, 1 mes
Puntos: 0
si es para insertar es asi:

mysql_query("INSERT INTO usuarios (img_ruta) VALUES ('$img_ruta') ");

si es para actualizar es asi:
$usuario=$_SESSION["Usuario"];
mysql_query("UPDATE usuarios SET img_ruta='$img_ruta' where id='$usuario'");
  #21 (permalink)  
Antiguo 30/07/2006, 14:26
 
Fecha de Ingreso: diciembre-2004
Ubicación: Cordoba - Argentina
Mensajes: 503
Antigüedad: 19 años, 4 meses
Puntos: 1
Muchas Gracias a todos,

Cita:
Creo que ya se cual es el problema, creo que es que no te estas conectando con la Base de Datos porque no pruebas con esto:
probablemente tengas razon, pero me tira un error de sintaxis:

ErrorYou have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'where id='30'' at line 1
  #22 (permalink)  
Antiguo 30/07/2006, 15:02
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 8 meses
Puntos: 102
Cita:
Creo que ya se cual es el problema, creo que es que no te estas conectando con la Base de Datos
No es ese el problema, si te das cuenta sí hay respuesta por parte de MySQL (devuelve el error de sintaxis), si hubiere problemas con la conexión el mensaje sería otro (resourse no válido).

Cita:
probablemente tengas razon, pero me tira un error de sintaxis:
¿con qué query??... un INSERT "no lleva" WHERE, presiento por ahí vá tu error, no se puede asegurar si no muestras la query con la que trabajas.

Volver a insistir (espero hayas visto mi mensaje y el enlace que dejé) que tu problema es con SQL y lo que importa aquí es la estructura de la queri final, por ello el consejo de Tunait () de que imprimas dicha consulta.

En mi anterior mensaje dejé el cómo debería de quetarte la query para una actualización tomando datos que enteriormente habías proporcionado, alcamadi hace lo mismo utilizando variables PHP e incluye también el cómo debería de ser la query para el caso de un INSERT...

Un INSERT agrega un nuevo dato, un UPDATE cambia un dato anteriormente guardado, no es lo mismo, ojo...

__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #23 (permalink)  
Antiguo 30/07/2006, 16:29
 
Fecha de Ingreso: diciembre-2004
Ubicación: Cordoba - Argentina
Mensajes: 503
Antigüedad: 19 años, 4 meses
Puntos: 1
uhhh se me habia pasado tu mensaje, te cuento que utilizando tu ejemplo pude resolverlo, gracias idolo!

Ahora te hago un par de preguntas:

1) el campo en si estaba vacio, ya que no se modifica hasta que el usuario no sube la imagen, en caso de que suba otra imagen nuevamente ahi seria un update, pero llevandolo a la practica tambien funciona como insert al comienzo.

2)
Cita:
Utilizas dos variables para lo mismo ($img_ruta y $ruta),
Sip, lo que hice fue lo siguiente para solventar eso, pienso que es la forma adecuada:

Código:
$ruta = '../users_imgs' ;
        if(move_uploaded_file($_FILES['fichero']['tmp_name'], $ruta . '/' . $_FILES['fichero']['name'])) { // se coloca en su lugar final
        $ruta = "../users_imgs".$_FILES['fichero']['name'];
que al final tome la ruta mas el nombre del archivo para que en la parte html destine correctamente a la foto.

Cita:
Te sugiero crees un bloque para preveer ese caso...
Que es un bloque?

Cita:
PD: Básico... separa las cosas SQL (querys, bases de datos...) es totalmente independiente de PHP...
Separarlas de que forma?

Saludos y gracias.
  #24 (permalink)  
Antiguo 01/08/2006, 00:01
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 19 años, 8 meses
Puntos: 102
Cita:
Que es un bloque?
Un conjunto de sentencias.
Cita:
Separarlas de que forma?
De conceptos. Que entiendas que son cosas diferentes.

__________________
٩(͡๏̯͡๏)۶
» 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.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:14.