Foros del Web » Programando para Internet » PHP »

Pequeño problema al guardar de formulario PHP y MySQL

Estas en el tema de Pequeño problema al guardar de formulario PHP y MySQL en el foro de PHP en Foros del Web. Hola amigos! Este código lo que hace es subir un archivo al servidor conectado por FTP usando PHP y tengo la intension de guardar los ...
  #1 (permalink)  
Antiguo 11/07/2009, 21:08
 
Fecha de Ingreso: septiembre-2007
Ubicación: PyRoot
Mensajes: 1.515
Antigüedad: 16 años, 7 meses
Puntos: 188
Pequeño problema al guardar de formulario PHP y MySQL

Hola amigos!

Este código lo que hace es subir un archivo al servidor conectado por FTP usando PHP y tengo la intension de guardar los datos como la url y el nombre del archivo.

Código PHP:
<?php
//Primero voy a subir por FTP el file
$ftp_user "user";
$ftp_pass "pass";

$ftp_connect ftp_connect('localhost');
$ftp_login ftp_login($ftp_connect"$ftp_user","$ftp_pass");

    
//Verificamos si se ha establesido la coneccion por FTP
    
if ( (!$ftp_connect) || (!$ftp_login) ) {
    echo 
"Fallo la coneccion con el servidor FTP";
    die;
    } else {
    echo 
"Conectado con el servidor FTP!";
    }

    
//Cambiamos a modo pasivo
    
ftp_pasv ($ftp_connecttrue);
    echo 
"Cambio a modo pasivo";
    
    
//Subimos el archivo
    
$local $_FILES['archivo']['name'];
    
$temp $_FILES['archivo']['tmp_name'];
    
$size $_FILES['archivo']['size'];
    echo 
"<br>Nombre: $local <br>";
    echo 
"Desde: $temp <br>";
    
    
// Juntamos la ruta del servidor con el nombre real del archivo
    
$ruta "D:/_root/AppServ/www/scripts/phpalbum/photos/".$_POST['album']."/" $local;
        
        
// Verificamos si ya se subio el archivo temporal
        
if (is_uploaded_file($temp)){
            
copy($temp$ruta);    
            echo 
"Se ha subido con exito, <br> Ruta: <a href='http://localhost/scripts/phpalbum/photos/".$_POST['album']."/".$local."'>click aqui para ver</a>";    
        }
        else {
            echo 
"no se pudo subir el archivo " $local;
        }
    
    
    
//cerramos la conexión FTP
    
ftp_close($ftp_connect);

//Despues voy a subir el url del file a la base de datos
  //conectar
  
$coneccion mysql_connect('localhost','root','mipass') or die('No se ha podido conectar el servidor de datos');
 
mysql_connect('localhost','root','mipass') or die('No se ha podido conectar el servidor de datos');
  
mysql_select_db('imagesfinal') or die('La base de datos es inexistente');

  
// recogemos los datos del formulario
  
$img_name $_POST['nombreimg'];
  
$img_url "<a href='http://localhost/scripts/phpalbum/photos/".$_POST['album']."/".$local."'>click para ver $img_name</a>";

  
//Insertando en la base de datos 
 
mysql_query("INSERT * INTO imagenes (name,url) VALUES ('$img_name','$img_url')");
?>
¿Como puedo subir el nombre del file y la ulr de la ubicacion del archivo en el server a la base de datos?

Porque mi codigo Mysql no funciona pero todo lo demás si, como puedo guardar las variables $img_name y $img_url en la base de datos.

*Creo que el problema puede estar en mi base de datos
Base de datos
Código PHP:
CREATE TABLE `imagenes` (
  `
idint(11NOT NULL auto_increment,
  `
namevarchar(255NOT NULL,
  `
urltext NOT NULL,
  
UNIQUE KEY `id` (`id`)
ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=

Muchas gracias.
__________________
Si quieres agradecer el triangulo obscuro de la parte derecha debes presionar +.
  #2 (permalink)  
Antiguo 11/07/2009, 23:21
Avatar de jaao_death  
Fecha de Ingreso: abril-2009
Ubicación: Murcia/españa
Mensajes: 229
Antigüedad: 15 años
Puntos: 6
Respuesta: Pequeño problema al guardar de formulario PHP y MySQL

Bueno, antes de responder algo solo quiero llamarte la atención en una cosa:

Te das cuenta de que nunca utilizas la conexión ftp?

Pues eso es porque no la necesitas!!!

el archivo ya ha sido enviado y el motor de php tiene una copia del mismo: $_FILE['archivo']['tmp_name']; que posterior mente copias a tu carpeta...
__________________
Mucha seguridad nunca es suficiente.... Por una red segura
El señor ilustre obscurece nuestras mentes
Usas Linux? http://www.dudalibre.com/gnulinuxcounter
  #3 (permalink)  
Antiguo 11/07/2009, 23:36
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Pequeño problema al guardar de formulario PHP y MySQL

efectivamente el uso de FTP no es necesario... y definitivamente no tiene sentido emplearlo...

además, en lugar de copy() debes usar la función move_uploaded_file(), ya que esta ultima función fue diseñada para eso...
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #4 (permalink)  
Antiguo 11/07/2009, 23:38
Avatar de jaao_death  
Fecha de Ingreso: abril-2009
Ubicación: Murcia/españa
Mensajes: 229
Antigüedad: 15 años
Puntos: 6
Respuesta: Pequeño problema al guardar de formulario PHP y MySQL

Código PHP:
<?php
    
//Subimos el archivo
    
$local $_FILES['archivo']['name'];
    
$temp $_FILES['archivo']['tmp_name'];
    
$size $_FILES['archivo']['size'];
    echo 
"<br>Nombre: $local <br>";
    echo 
"Desde: $temp <br>";

    
$temp explode('.'$local);// AÑADIDO
    
$num count($temp)-1;// AÑADIDO
    
$ext $temp[$num];// AÑADIDO
    
$name $temp[0].time();// AÑADIDO
    
$name md5($name).'.'$ext;// AÑADIDO
    
    // Juntamos la ruta del servidor con el nombre real del archivo
    
$ruta "D:/_root/AppServ/www/scripts/phpalbum/photos/".$name;
        
        
// Verificamos si ya se subio el archivo temporal
        
if (is_uploaded_file($temp)){
            
move_uploaded_file($temp$ruta);    
    
        }
        else {
            echo 
"no se pudo subir el archivo " $_FILES['archivo']['name']; //MODIFICADO
        
}
    
//Despues voy a subir el url del file a la base de datos
  //conectar
  
$coneccion mysql_connect('localhost','root','mipass') or die('No se ha podido conectar el servidor de datos');
 
mysql_connect('localhost','root','mipass') or die('No se ha podido conectar el servidor de datos');
  
mysql_select_db('imagesfinal') or die('La base de datos es inexistente');

  
// recogemos los datos del formulario
  
$img_name $_POST['nombreimg'];
  
$img_url $ruta;
  
$album addslashes($_POST['album']);

  
//Insertando en la base de datos 
 
mysql_query("INSERT * INTO imagenes (name,url, album) VALUES ('$img_name','$img_url', '$album')");
?>
y la db

Código PHP:
CREATE TABLE `imagenes` (
  
id int(11NOT NULL auto_increment,
  
name varchar(32NOT NULL,
  
url varchar(225NOT NULL,
  
album varchar(32NOT NULL,// aunque lo mejor es crear una tabla Album y luego enlazarlos mediante ID
  
UNIQUE KEY `id` (`id`)
ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=
__________________
Mucha seguridad nunca es suficiente.... Por una red segura
El señor ilustre obscurece nuestras mentes
Usas Linux? http://www.dudalibre.com/gnulinuxcounter
  #5 (permalink)  
Antiguo 11/07/2009, 23:49
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Pequeño problema al guardar de formulario PHP y MySQL



Código PHP:
$name md5($name).'.'.$ext;// falta concatenar correctamente 

además, la consulta INSERT no debe llevar un comodín

Código:
INSERT INTO tabla ...

usar rutas absolutas (como $ruta) es pésima idea, pero no es mi problema...

o bien, sería bueno usarlas pero usando solo PHP, no directamente....

Código PHP:
$ruta dirname(dirname(dirname(__FILE__))); // ../../../
$ruta .= DIRECTORY_SEPARATOR $nombre
--
PDTA: personalmente estoy en contra de "corregir" los códigos, nadie esta obligado a hacerlo.... incluso, peor si es a través de copy+paste
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #6 (permalink)  
Antiguo 12/07/2009, 00:02
Avatar de jaao_death  
Fecha de Ingreso: abril-2009
Ubicación: Murcia/españa
Mensajes: 229
Antigüedad: 15 años
Puntos: 6
Respuesta: Pequeño problema al guardar de formulario PHP y MySQL

jeje, pateketrueke tiene razon, solo que stoy muy cansado pues no he dormido nada y sn las 07:59AM , por eso pase por alto estos errores, lo del dir absoluto yo tampoco lo suelo hacer, pero al no conocer la estructura de la web no sabría que hacer... XD

pero en algo muy importante si me has hecho recapasitar.... NO TENGO QUE CORREGIR EL CÓDIGO jeje ;-P
__________________
Mucha seguridad nunca es suficiente.... Por una red segura
El señor ilustre obscurece nuestras mentes
Usas Linux? http://www.dudalibre.com/gnulinuxcounter
  #7 (permalink)  
Antiguo 12/07/2009, 02:41
 
Fecha de Ingreso: septiembre-2007
Ubicación: PyRoot
Mensajes: 1.515
Antigüedad: 16 años, 7 meses
Puntos: 188
De acuerdo Respuesta: Pequeño problema al guardar de formulario PHP y MySQL

Hola amigos mios tuve problemas con mi internet y me quede sin coneccion desde las 5Pm mas o menos, ahorita les respondo agradeciendoles enormemente su ayuda.

jeje hoy me encuentro tremendamente feliz porqu por fin logre terminar mi primer script en PHP usando MySQL despues de 1 semana de intentarlo y gracias a su ayuda.

A continuacion posteo el script, se que no es del todo experto pero bueno, es mi primer script en PHP y me ha costado mucho trabajo ya que hace 1 semana no sabía ni para que servia el dichosos "PHP" jaja....

Bueno hay lo tienen, NOTA: no he podido añadirle una funcion que valide los formularios de la forma "Si se preciona el boton enviar tratar de ejecutar las funciones para subir archivo al directorio y guardar ruta en DB siempre y cuando los campos de formulario no este basios"

Y por que quiero que se ejecute solo al presionar el boton? Por que cuando ingreso al archivo php desde mi navegador ya me estan saliendo los errores de que los campos estan basios, esto es ovio ya que apenas entre a la pagina.... jajaja

Bueno sabran a lo que me refiero... Podrian ayudarme diciendome como puedo poner una funcion para q ejecute las demas funciones cuando se presione el boton enviar... Gracias...


A continuacion el SCRIPT
Caracteristicas:

Crea directorios mediante formulario PHP.
Inserta el nombre de los directorios en una tabla de la DB.

Muestra los directorios en un select de formulario.
Sube archivos al directorio seleccionado.
Guarda la ruta del archivo y el nombre en una tabla de la DB.

index.php
Código PHP:
<?php
//Crear directorios usando PHP y FTP
   // $dir será el nombre del directorio y $_POST['album'] recogeremos el nombre
   // que indicamos en el formulario
   
$dir $_POST['album'];
   
// Conectamos con el servidor por FTP
   
$ftp_server='localhost'// direccion del servidor
   
$user="user"// nombre de usuario
   
$pass="pass"// password
   
$ftp_connect ftp_connect($ftp_server); 
   
$connect ftp_login($ftp_connect$user$pass); 

  
// Seleccionamos el directorio donde crearemos directorios si usamos "/" por default será en
  // el directorio raiz de nuestro sitio
  
ftp_chdir($ftp_connect,"/"); // Cualquier directrio que utilizes debe empezar con "/" y terminar con "/" ej: "/foro/photos/"

//Validamos formulario 1 FTP
if (isset($_POST[crear]) && $_POST[album] != "")
{
////////////////////////
if(@ftp_mkdir($ftp_connect,$_POST['album'])) 
{
  
$echo_do_album_dir_ftp "El directorio ha sido creado con exito";
  } else {
  
$error_do_album_dir_ftp "No se pudo crear el directorio";
  }
////////////////////////   
} else {
$error_album_name "Defina un nombre a su album";

ftp_close($ftp_connect); 
// Finaliza el PHP para crear drectorios usando PHP y FTP
//Ahora guardaremos el nombre de los directorios en la base de datos
    //Conectamos a la base de datos
     
$conexion mysql_connect("localhost","root","password");
    
// seleccionamos la tabla
     
mysql_select_db("imagesend"$conexion);
    
// Programamos variables
    
$album_name $_POST['album']; 
    
//Validamos formulario 1 MySQL
    
if (isset($_POST[crear]) && $_POST[album] != "")
    {
    
// Insertamos el nombre de los albums en la base de datos
   
$sql "INSERT INTO albums (album_name) VALUES ('$album_name')";
   
$result mysql_query($sql);
   
$echo_do_album_dir_mysql "El album se ha insertado en la base de datos";
   
///////////////////////////////
   
} else { $error_do_album_dir_mysql "No se ha insertado el album en la base de datos"; }
//Hasta aqui el codigo para insertar el nombre de los albums en la base de datos

########################################################

//Ahora  el codigo para subir las imagenes al servidor
      //Primero voy a conectarme al servidor por FTP
      
$ftp_user "user";
      
$ftp_pass "pass";
      
$ftp_connect ftp_connect('localhost');
      
$ftp_login ftp_login($ftp_connect"$ftp_user","$ftp_pass");
      
      
//Verifico si se ha conectado
      
if ( (!$ftp_connect) || (!$ftp_login) ) {
      
$error_seis "Fallo la coneccion con el servidor FTP";
      die;
      } else {
      
$error_siete "Conectado con el servidor FTP!";
      }
      
      
// Definir si usamos modo pasivo -- Sirve para indicar al servidor que suba los files solo cuando le indiquemos por medio de este formulario
      
ftp_pasv ($ftp_connecttrue);
      
$error_ocho "Modo pasivo activado";
      
      
// Subimos el archivo
      
$local $_FILES['archivo']['name'];
      
$temp $_FILES['archivo']['tmp_name'];
      
      
// Juntamos la ruta del servidor con el nombre real del archivo importante
         //seleccionar la ruta correcta de nuestro directorio en el server
      
$ruta "D:/_root/AppServ/www/scripts/phpalbum/photos/".$_POST['select_album']."/" $local;
      
      
//Verificamos formulario 2 FTP
      
if (isset($_POST[enviar]) && $_POST['archivo'] != "")
      {
      
// Verificamos si el archivo se ha subido con exito
      // Verificamos si ya se subio el archivo temporal
      
if (is_uploaded_file($temp)){
            
copy($temp$ruta);    
            
$echo_upload_file_ftp "Se ha subido con exito, <br> Ruta: <a href='http://localhost/scripts/phpalbum/photos/".$_POST['select_album']."/".$local."'>click aqui para ver</a>";    
        }
        else {
            
$error_upload_file_ftp "no se pudo subir el archivo " $local;
        } 
    } else { 
$error_form2_empty_ftp "EL formulario 2 tiene campos vacios"; }    
      
      
//cerramos la conexión FTP
      
ftp_close($ftp_connect);
      
//Hasta aqui termina el codigo para subir los files a un directorio especifico
      
      // Ahora ingresemos el nombre, ruta y directorio al que pertenece nuestro archivo en la base de datos
      //conectar a la base de datos
      
$conexion mysql_connect("localhost""root""password");
      
mysql_select_db("imagesend"$conexion);
   
      
//definimos variables
      
$img_name $_POST['nombreimg'];
      
$img_url "http://localhost/scripts/phpalbum/photos/".$_POST["select_album"]."/".$local;
      
$album_name $_POST['select_album'];
         
         
         
//validamos formulario 2
         
if (empty($_POST[enviar]) && $_POST['archivo'] != "")
      {
      
//Insertamos los datos del archivo (nombre, ruta y directorio) en la base de datos
      
$sqlfile "INSERT INTO images (name,album,url) VALUES ('$img_name','$album_name','$img_url')";
      
$result mysql_query($sqlfile);
      
$echo_upload_file_mysql "Se han añadido los datos en la DB";
      } else { 
$error_form2_empty_mysql "No se ha añadio nada del formulario 2 a la base de datos"; }
      
// Hasta aqui termina el codigo para ingresar los datos del file en la base de datos
########################################################


// Ahora consultaremos los directorios que tenemos en la base de datos y los colocaremos en un select de forumulario para idicar
// el destino al que queremos mandar cada archivo
        //Conectamos a base de datos
        
mysql_connect("localhost","root","password");
        
// seleccionamos tabla
        
$sql="SELECT * FROM imagesend.albums ORDER BY id";
        
$res=mysql_query($sql);
        
// Hasta aqui el codigo para consultar los directorios de la base de datos

##########################################################

?>
<b>Seccion de avisos</b>
<?php echo "$echo_do_album_dir_ftp"; echo "$error_do_album_dir_ftp -"; echo "- $error_album_name"?><br />
<?php echo "$echo_do_album_dir_mysql"; echo "$error_do_album_dir_mysql";?><br />
<?php echo "$echo_upload_file_ftp"; echo "$error_upload_file_ftp"; echo "$error_form2_empty_ftp";?><br />
<?php echo "$echo_upload_file_mysql"; echo "$error_form2_empty_mysql";?><br />

<hr>
<b>Formulario para crear directorios:</b><br /><br />
<form method="post">
Nombre del directorio:  <input type="text" name="album" />
  <input type="submit" name="crear" value="Crear" />
</form>
<br />
<hr />
<br />
<b>Formulario para subir archivos a los directorios</b>
<br />
<form method="post" enctype="multipart/form-data">
  <input type="file" name="archivo" /><br />
  <input type="text" name="nombreimg" /><br />
  <select name="select_album">
<!-- Con el siguiente codigo PHP mostramos los albums que hay en la base de datos -->
  <?php while($registro=mysql_fetch_array($res)) { echo "<option value='".$registro['album_name']."'>".$registro['album_name']."</option>"; } ?>
  </select><br />
  <input type="submit" name="enviar" value="enviar">
</form>

Base de datos "imagesend"
tabla 1
Código PHP:
CREATE TABLE `albums` (
  `
idint(11NOT NULL auto_increment,
  `
album_namemediumtext NOT NULL,
  
UNIQUE KEY `id` (`id`)
ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=

tabla 2
Código PHP:
CREATE TABLE `images` (
  `
idint(11NOT NULL auto_increment,
  `
namemediumtext NOT NULL,
  `
albummediumtext NOT NULL,
  `
urlmediumtext NOT NULL,
  
UNIQUE KEY `id` (`id`)
ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=

Hay lo tienen amigos.

P.D: Por ahi en el codigo hay variables que dicen $error_doce y parecidas, son parte de uno de mis intentos para validar los formularios pero se me paso borrarlos y me acabo de dar cuenta....

Para los noobs : No es necesario borrarlos pero si sabes como eliminarlos sin echar a perder el codigo hazlo!.

Jajaja estoy feliz ... mi primer script ... jeje
Saludos!
__________________
Si quieres agradecer el triangulo obscuro de la parte derecha debes presionar +.
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 03:54.