Foros del Web » Programando para Internet » PHP »

Problema con uploadify PHP+AJAX+MySQL

Estas en el tema de Problema con uploadify PHP+AJAX+MySQL en el foro de PHP en Foros del Web. Buenas nuevamente, volvi con php pero me acabo de meter en un rollo de aquellos Estoy usando uploadify, logré dimensionar las imagenes y todo, ahora ...
  #1 (permalink)  
Antiguo 17/02/2012, 15:37
Avatar de VbOkonly  
Fecha de Ingreso: julio-2009
Ubicación: San Justo, Buenos Aires, Argentina
Mensajes: 490
Antigüedad: 14 años, 9 meses
Puntos: 5
Problema con uploadify PHP+AJAX+MySQL

Buenas nuevamente, volvi con php pero me acabo de meter en un rollo de aquellos

Estoy usando uploadify, logré dimensionar las imagenes y todo, ahora es momento de guardar la ruta y la id respectiva del usuario para despues obtenerlas cuando sea necesario, pero bien, aca esta mi problema.

Sinceramente probe de todo, desde usar sesiones (uploadify no tolera estas), y hasta llamar a una funcion desde el mismo uploadify.php xD pero nada..

Mi idea es la siguiente, pasar por uploadify(ajax) la variable post id y guardar las rutas de las imagenes en una bd junto con el id del usuario.

Este es la parte de ajax de uploadify

Código Javascript:
Ver original
  1. // <![CDATA[
  2.     $(document).ready(function() {
  3.       $('#file_upload').uploadify({
  4.         'uploader'  : 'dify/uploadify.swf',
  5.         'script'    : 'dify/uploadify.php',
  6.         'scriptData': 'var ID = $(‘input[name="#id_file"]‘).val();',
  7.         'cancelImg' : 'dify/cancel.png',
  8.         'folder'    : '/uploads',
  9.         'buttonText': 'Cambiar Foto',
  10.         'sizeLimit' : '5242880',
  11.         'displayData': 'percentage',
  12.         'fileExt'     : '*.jpg;*.gif;*.png;*jpeg',
  13.         'fileDesc'    : 'Image Files',
  14.         'onComplete'  : function(event, ID, fileObj, response, data) {
  15.         $.post("#id_user",{name: fileObj.name, id_user: $("#id_user").val()}, function(info) {
  16. alert(info); // alert UPLOADED FILE NAME
  17. });
  18.         window.location.reload();
  19.         },
  20.         'auto'      : true
  21.       });
  22.     });
  23.     // ]]>

Esta es la parte HTML:

Código HTML:
Ver original
  1. <input id="file_upload" type="file" name="file_upload" />
  2. <input id="id_user" type="hidden" name="id_user" value="<?php echo $user;?>"/>


Bien, lo que deseo es que con ajax se pueda pasar por post id_user y que ese post termine aca:
uploadify.php
Código PHP:
Ver original
  1. if (!empty($_FILES)) {
  2.  
  3.         class Image {
  4.            
  5.             var $uploaddir;
  6.             var $quality = 100;
  7.             var $ext;
  8.             var $dst_r;
  9.             var $img_r;
  10.             var $img_w;
  11.             var $img_h;
  12.             var $output;
  13.             var $data;
  14.             var $datathumb;
  15.            
  16.             function setFile($src = null) {
  17.                 $this->ext = strtoupper(pathinfo($src, PATHINFO_EXTENSION));
  18.                 if(is_file($src) && ($this->ext == "JPG" OR $this->ext == "JPEG")) {
  19.                     $this->img_r = ImageCreateFromJPEG($src);
  20.                 } elseif(is_file($src) && $this->ext == "PNG") {
  21.                     $this->img_r = ImageCreateFromPNG($src);      
  22.                 } elseif(is_file($src) && $this->ext == "GIF") {
  23.                     $this->img_r = ImageCreateFromGIF($src);
  24.                 }
  25.                 $this->img_w = imagesx($this->img_r);
  26.                 $this->img_h = imagesy($this->img_r);
  27.             }
  28.            
  29.             function resize($w = 100) {
  30.                 $h =  $this->img_h / ($this->img_w / $w);
  31.                 $this->dst_r = ImageCreateTrueColor($w, $h);
  32.                 imagecopyresampled($this->dst_r, $this->img_r, 0, 0, 0, 0, $w, $h, $this->img_w, $this->img_h);
  33.                 $this->img_r = $this->dst_r;
  34.                 $this->img_h = $h;
  35.                 $this->img_w = $w;
  36.             }
  37.            
  38.             function createFile($output_filename = null) {
  39.                 if($this->ext == "JPG" OR $this->ext == "JPEG") {
  40.                     imageJPEG($this->dst_r, $this->uploaddir.$output_filename.'.'.$this->ext, $this->quality);
  41.                 } elseif($this->ext == "PNG") {
  42.                     imagePNG($this->dst_r, $this->uploaddir.$output_filename.'.'.$this->ext);
  43.                 } elseif($this->ext == "GIF") {
  44.                     imageGIF($this->dst_r, $this->uploaddir.$output_filename.'.'.$this->ext);
  45.                 }
  46.                 $this->output = $this->uploaddir.$output_filename.'.'.$this->ext;
  47.             }
  48.            
  49.             function setUploadDir($dirname) {
  50.                 $this->uploaddir = $dirname;
  51.             }
  52.            
  53.             function flush() {
  54.         $tempFile = $_FILES['Filedata']['tmp_name'];
  55.         $targetPath = $_SERVER['DOCUMENT_ROOT'] . $_GET['folder'] . '/';
  56.         $targetFile =  str_replace('//','/',$targetPath) . $_FILES['Filedata']['name'];
  57.                
  58.                 imagedestroy($this->dst_r);
  59.                 unlink($targetFile);
  60.                 //imagedestroy($this->img_r);
  61.                
  62.             }
  63.            
  64.         }  
  65.     $prefijo = substr(md5(uniqid(rand())),0,6);
  66.     $tempFile = $_FILES['Filedata']['tmp_name'];
  67.     $targetPath = $_SERVER['DOCUMENT_ROOT'] . $_REQUEST['folder'] . '/';
  68.     $targetFile =  str_replace('//','/',$targetPath) . $prefijo .'_' . $_FILES['Filedata']['name'];
  69.        
  70.         move_uploaded_file ($tempFile, $targetFile);
  71.        
  72.         $image = new Image();
  73.         $image->setFile($targetFile);
  74.         $image->setUploadDir($targetPath);
  75.         $image->resize(640);
  76.         $image->createFile(md5($tempFile));
  77.         $image->resize(250);
  78.         $image->createFile("s_".md5($tempFile));
  79.         $image->flush();
  80.         }
  81. ?>

Bien, la parte de php es una clase que redimensiona, me la encontre en san google y me parecio algo innovador en mis conocimientos porque de otro modo lo haria en 3000 lineas a mi manera xD, bien esta clase me redimensiona las imagenes, la cuestion que a la vez que recibo los parametros de uploadify, tambien reciba a id_user, cosa que no logro.

En cuanto a PHP, necesito guardar el id junto a las rutas de las imagenes(en total dos imagenes, una es thumb que mide 250 de w y otra normal que mide 640 de w), pero sinceramente nunca trabaje con una clase y no se como hacer para extraerle las dos rutas, intente de mil maneras, posteo el codigo "sano" porque hace 2 horas que le estoy buscando la vuelta y era un desastre..

Código PHP:
Ver original
  1. $image = new Image();
  2.         $image->setFile($targetFile);
  3.         $image->setUploadDir($targetPath);
  4.         $image->resize(640);
  5.         $image->createFile(md5($tempFile));
  6.         $image->resize(250);
  7.         $image->createFile("s_".md5($tempFile));
  8.         $image->flush();

Lo posteo en PHP porque creo que la mayoria sabe manipular estos dos lenguajes, digamos que tambien ajax y JS...

Bueno. eso es todo creo jaja, saludos y espero respuestas, ya me duele la cabeza :P
__________________
Mi primera web: http://www.mascoteame.com
  #2 (permalink)  
Antiguo 17/02/2012, 16:24
Avatar de referenteweb  
Fecha de Ingreso: febrero-2012
Ubicación: Chile
Mensajes: 22
Antigüedad: 12 años, 2 meses
Puntos: 4
Respuesta: Problema con uploadify PHP+AJAX+MySQL

Uploadify le puedes enviar datos de tipo javavascript y además PHP al back-end, la funcionalidad seria la siguiente

Cada vez que se sube una imagen debes pasarle la variable usuario, mediante el mismo ajax que posee uploadify, en el siguiente enlace sale como pasar variables al back-end, http://www.uploadify.com/documentation/options/scriptdata/

Es muy similar al ajax nativo de jQuery.

Otro punto tu script data lo tienes con = y es con el siguiente formato: 'scriptData' : {'firstName':'Ronnie','age':30}, aparece en el enlace que te señale

Saludos
  #3 (permalink)  
Antiguo 17/02/2012, 16:27
Avatar de VbOkonly  
Fecha de Ingreso: julio-2009
Ubicación: San Justo, Buenos Aires, Argentina
Mensajes: 490
Antigüedad: 14 años, 9 meses
Puntos: 5
Respuesta: Problema con uploadify PHP+AJAX+MySQL

Ahora lo pruebo, gracias!
__________________
Mi primera web: http://www.mascoteame.com
  #4 (permalink)  
Antiguo 17/02/2012, 16:37
Avatar de VbOkonly  
Fecha de Ingreso: julio-2009
Ubicación: San Justo, Buenos Aires, Argentina
Mensajes: 490
Antigüedad: 14 años, 9 meses
Puntos: 5
Respuesta: Problema con uploadify PHP+AJAX+MySQL

te juro que estoy llorando, me funcionoooo!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

esta es la solucion:

Código Javascript:
Ver original
  1. <script type="text/javascript">
  2.         // <![CDATA[
  3.     $(document).ready(function() {
  4.       $('#file_upload').uploadify({
  5.         'uploader'  : 'dify/uploadify.swf',
  6.         'script'    : 'dify/uploadify.php',
  7.         'cancelImg' : 'dify/cancel.png',
  8.         'folder'    : '/uploads',
  9.         'buttonText': 'Cambiar Foto',
  10.         'sizeLimit' : '5242880',
  11.         'scriptData'  : {'fid':<?php echo $getUsuario;?>},
  12.         'displayData': 'percentage',
  13.         'fileExt'     : '*.jpg;*.gif;*.png;*jpeg',
  14.         'fileDesc'    : 'Image Files',
  15.         'onComplete'  : function(event, ID, fileObj, response, data) {     
  16.         window.location.reload();
  17.         },
  18.         'auto'      : true
  19.       });
  20.     });
  21.     // ]]>
  22.     </script>

Bien, ahora me falta solo la parte de PHP donde tengo la clase esa, no se como obtener las dos rutas de las imagenes, como puedo hacerlo?, este es el script:

Código PHP:
Ver original
  1. <?php
  2. /*
  3. Uploadify v2.1.4
  4. Release Date: November 8, 2010
  5.  
  6. Copyright (c) 2010 Ronnie Garcia, Travis Nickels
  7.  
  8. Permission is hereby granted, free of charge, to any person obtaining a copy
  9. of this software and associated documentation files (the "Software"), to deal
  10. in the Software without restriction, including without limitation the rights
  11. to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  12. copies of the Software, and to permit persons to whom the Software is
  13. furnished to do so, subject to the following conditions:
  14.  
  15. The above copyright notice and this permission notice shall be included in
  16. all copies or substantial portions of the Software.
  17.  
  18. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  19. IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  20. FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  21. AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  22. LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  23. OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  24. THE SOFTWARE.
  25. */
  26. if (!empty($_FILES)) {
  27.  
  28.         class Image {
  29.            
  30.             var $uploaddir;
  31.             var $quality = 100;
  32.             var $ext;
  33.             var $dst_r;
  34.             var $img_r;
  35.             var $img_w;
  36.             var $img_h;
  37.             var $output;
  38.             var $data;
  39.             var $datathumb;
  40.            
  41.             function setFile($src = null) {
  42.                 $this->ext = strtoupper(pathinfo($src, PATHINFO_EXTENSION));
  43.                 if(is_file($src) && ($this->ext == "JPG" OR $this->ext == "JPEG")) {
  44.                     $this->img_r = ImageCreateFromJPEG($src);
  45.                 } elseif(is_file($src) && $this->ext == "PNG") {
  46.                     $this->img_r = ImageCreateFromPNG($src);      
  47.                 } elseif(is_file($src) && $this->ext == "GIF") {
  48.                     $this->img_r = ImageCreateFromGIF($src);
  49.                 }
  50.                 $this->img_w = imagesx($this->img_r);
  51.                 $this->img_h = imagesy($this->img_r);
  52.             }
  53.            
  54.             function resize($w = 100) {
  55.                 $h =  $this->img_h / ($this->img_w / $w);
  56.                 $this->dst_r = ImageCreateTrueColor($w, $h);
  57.                 imagecopyresampled($this->dst_r, $this->img_r, 0, 0, 0, 0, $w, $h, $this->img_w, $this->img_h);
  58.                 $this->img_r = $this->dst_r;
  59.                 $this->img_h = $h;
  60.                 $this->img_w = $w;
  61.             }
  62.            
  63.             function createFile($output_filename = null) {
  64.                 if($this->ext == "JPG" OR $this->ext == "JPEG") {
  65.                     imageJPEG($this->dst_r, $this->uploaddir.$output_filename.'.'.$this->ext, $this->quality);
  66.                 } elseif($this->ext == "PNG") {
  67.                     imagePNG($this->dst_r, $this->uploaddir.$output_filename.'.'.$this->ext);
  68.                 } elseif($this->ext == "GIF") {
  69.                     imageGIF($this->dst_r, $this->uploaddir.$output_filename.'.'.$this->ext);
  70.                 }
  71.                 $this->output = $this->uploaddir.$output_filename.'.'.$this->ext;
  72.             }
  73.            
  74.             function setUploadDir($dirname) {
  75.                 $this->uploaddir = $dirname;
  76.             }
  77.            
  78.             function flush() {
  79.         $tempFile = $_FILES['Filedata']['tmp_name'];
  80.         $targetPath = $_SERVER['DOCUMENT_ROOT'] . $_GET['folder'] . '/';
  81.         $targetFile =  str_replace('//','/',$targetPath) . $_FILES['Filedata']['name'];
  82.                
  83.                 imagedestroy($this->dst_r);
  84.                 unlink($targetFile);
  85.                 //imagedestroy($this->img_r);
  86.                
  87.             }
  88.            
  89.         }  
  90.     $prefijo = substr(md5(uniqid(rand())),0,6);
  91.     $tempFile = $_FILES['Filedata']['tmp_name'];
  92.     $targetPath = $_SERVER['DOCUMENT_ROOT'] . $_REQUEST['folder'] . '/';
  93.     $targetFile =  str_replace('//','/',$targetPath) . $prefijo .'_' . $_FILES['Filedata']['name'];
  94.        
  95.         move_uploaded_file ($tempFile, $targetFile);
  96.        
  97.         $image = new Image();
  98.         $image->setFile($targetFile);
  99.         $image->setUploadDir($targetPath);
  100.         $image->resize(640);
  101.         $image->createFile(md5($tempFile));
  102.         $image->resize(250);
  103.         $image->createFile("s_".md5($tempFile));
  104.         $image->flush();
  105.         }
  106.         $userrr = $_REQUEST['fid'];
  107.         include('conexion.php');
  108.         mysql_query('INSERT fotos SET pertenecea_foto = "'.$userrr.'"',$db);
  109. ?>

La ultima consulta es una prueba para ver si recibia la variable de ajax, bien, lo que deseo ahora es obtener las dos rutas de las dos imagenes, lo malo es que obtengo la ruta de la original y no la de las redimensionadas..

$targetFile es la ruta original, no se de que manera obtener las de las redimensionadas, en total se almacenan 3 imagenes(la original, thumb y otra que esta redimensionada a 640)
__________________
Mi primera web: http://www.mascoteame.com
  #5 (permalink)  
Antiguo 18/02/2012, 10:04
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 13 años, 11 meses
Puntos: 23
Respuesta: Problema con uploadify PHP+AJAX+MySQL

esta es la parte que te obtiene la ruta

$_SERVER['DOCUMENT_ROOT']

yo lo hago asi:

Código PHP:
$root $_SERVER['DOCUMENT_ROOT']; //guardo la ruta absoluta en variable
$conn_mysql conecta_db(); //conexion a la base de datos

if (!empty($_FILES)) {
    
    
$nombre $_POST['nombre']; 
    
$tempFile $_FILES['Filedata']['tmp_name'];
    
$targetPath $root.'uploadify/images/uploads/'.$nombre.'/'armo la ruta a donde quiero que guarde las imagenes
    $fileName 
$_FILES['Filedata']['name'];
        
$targetFile $targetPath.$fileName//aca se concatena la ruta + el nombre del archivo
        
    
move_uploaded_file($tempFile,$targetFile);

    
$sql_insert="Insert into imagenes (nombre_img, ruta_img) values ('$nombre', '$targetFile')"//insertas el nombre y la ruta de la imagen en la bd
    
mysql_query($sql_insert) or die('Error en la inserci&oacuten: '.mysql_error());
    echo 
"OK";
    exit();


En mi caso no he logrado pasar la variable nombre, si me inserta la ruta en la base pero el nombre queda vació

mi script es este:

Código:
$(document).ready(function() {
  $('#file_upload').uploadify({
    'uploader'  	: '../images/images_opiniones/uploadify.swf',
	'buttonText'  	:'Examinar...',
	'cancelImg' 	: '../images/images_opiniones/cancel.png',
    'script'    	: 'upload/uploadify.php',
	'scriptData'  	: { 'nombre': $('#autor_opinion').val()}, //esta linea no esta funcionando
    'folder'    	: '../images/images_opiniones/uploads',
    'auto'      	: false,
	'fileDesc'    	: 'Tipo de imágenes permitidas (.JPG, .GIF, .PNG)',
	'fileExt'     	: '*.jpg;*.jpeg;*.gif;*.png',
	'sizeLimit'   	: 2097152, //default bytes *2MB* --1MB 1048576---
	'method'    	: 'post',
	'multi'       	: true,
        'onAllComplete' : function(data)
        {
            alert( 'Todas las imágenes han sido agregadas correctamente' );
        }
  });
});
el html:

Código HTML:
<div id="form_opinion">
	<input id="file_upload" type="file" name="file_upload" />
	<br />
	nombre <input type="text" id="autor_opinion" /><div id="error_autor_op"></div>
	<br />
	<input type="button" value="Enviar" onclick="$('#file_upload').uploadifyUpload()" />
</div>
<div id="status"></div> 
  #6 (permalink)  
Antiguo 18/02/2012, 20:06
 
Fecha de Ingreso: septiembre-2007
Ubicación: PyRoot
Mensajes: 1.515
Antigüedad: 16 años, 7 meses
Puntos: 188
Respuesta: Problema con uploadify PHP+AJAX+MySQL

Acabo de mirar este post, bastante tarde lamentablemente. Yo los hubiera podido ayudar en lo que sea referente al maravilloso uploadify, jejeje.

Bueno por si todavías les sirve.

'scriptData' : { 'nombre': $('#autor_opinion').val()}, //esta linea no esta funcionando

La Linea anterior no cogerá el valor del campo cuyo id es autor_opinion si el valor de este fue seteado despues que la carga completa de la página web ha sucedido.

Si quieres transferir información desde inputs de formulario al script PHP que efectua el cargamento del archivo en el servidor puedes valerte de las sesiones PHP.

Antes de subir el archivo setea alguna variable de sesión, das valores cualesquiera y consultar en el script php como corresponda.

Es así como se soluciona la única problemática que presente esta clase.
__________________
Si quieres agradecer el triangulo obscuro de la parte derecha debes presionar +.
  #7 (permalink)  
Antiguo 20/02/2012, 09:43
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 13 años, 11 meses
Puntos: 23
Respuesta: Problema con uploadify PHP+AJAX+MySQL

Hola iovan

Gracias por contestar, eres el unico que me ha dado esperanza hasta el momento, y no aun no es tarde, todavia no logro pasar la variable

no entiendo que quieres decir con:

Cita:
si el valor de este fue seteado despues que la carga completa de la página web
Lo que me gustaría es que el usuario pueda ingresar sus datos (nombre, apellidos, etc) y añadir imágenes y que al presionar un botón, envié las variables juntas (incluyendo las imagenes) al php

Cita:
Es así como se soluciona la única problemática que presente esta clase.
Entonces para que sirve el 'scriptData' según yo para eso es, en los ejemplos que he visto hay a quienes si les a funcionado, incluso probé así:

'onSelect' : function(){
$('#file_upload').uploadifySettings('scriptData' , { 'nombre': $('#autor_opinion').val() });
},

Cita:
Antes de subir el archivo setea alguna variable de sesión, das valores cualesquiera
Tendrás algún ejemplo del uso de sesiones (específicamente con uploadify)? Es confiable usar de esta forma las sesiones?

Te agradezco mucho tu ayuda
  #8 (permalink)  
Antiguo 21/02/2012, 12:02
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 13 años, 11 meses
Puntos: 23
Respuesta: Problema con uploadify PHP+AJAX+MySQL

hola iovan

Si he optado por usar la variables de session, pero tengo un poblema, no la estoy recibiendo en uploadify.php

te explico,

tengo mi pagina publicar.php

esta este script:
Código HTML:
$(document).ready(function() {
	$('#file_upload').uploadify({
    	        'uploader'  	: '../images/images_opiniones/uploadify.swf',
		'buttonText'  	:'Examinar...',
		'cancelImg' 	: '../images/images_opiniones/cancel.png',
    	        'script'    	: 'uploadify.php',
    	        'folder'    	: '../images/images_opiniones/uploads',
    	        'auto'      	: false,
		'fileDesc'    	: 'Tipo de imágenes permitidas (.JPG, .GIF, .PNG)',
		'fileExt'     	: '*.jpg;*.jpeg;*.gif;*.png',
		'sizeLimit'   	: 2097152, //default bytes *2MB* --1MB 1048576---
		'method'    	: 'post',
		'multi'       	: true,
  	});
});
y el formulario, donde en el botton sumit ejecuto una funcion ajax que me valida los campos y los envia a procesar_publicacion.php

en procesar_publicacion.php

empiezo con session_start(), almaceno las variables y recupero el id que se acaba de crear para la publicación y lo guardo en una variable de sesión:

$_SESSION['id_publicacion']=$id_publicacion;
le hago un echo y si lo esta guardando bien

luego, pregunto al usuario si desea agregar fotos a su publicación y ahí se ejecuta el uploadify, que manda al uploadify.php:

Código PHP:
<?php
session_start
();

include(
'../conexion_mysql/conecta_db.php');
$root $_SERVER['DOCUMENT_ROOT'];
$conn_mysql conecta_db();

if (!empty(
$_FILES)) {
    
    
$id_publicacion $_SESSION['id_publicacion']; //acá no esta llegando la session

    
$tempFile $_FILES['Filedata']['tmp_name'];
    
$targetPath $root.'buzonxalapa/images/images_opiniones/uploads/';
    
$fileName $_FILES['Filedata']['name'];
    
    
$targetFile $targetPath.$fileName;

    
move_uploaded_file($tempFile,$targetFile);
    
    
$sql_insert="Insert into imagenes (nombre_img, ruta_img, id_publicacion) values ('$fileName', '$targetFile', '$id_publicacion')";
    
mysql_query($sql_insert) or die('Error en la inserci&oacuten: '.mysql_error());
    
    
//session_destroy();
    
    
echo "ok";
    exit();
}
?>
Me sale un error de undefine index id_publicacion
Ya no hayo que hacer, llevo 2 semanas peleándome en diferentes formas con uploadify, por favor ayuda
  #9 (permalink)  
Antiguo 21/02/2012, 15:04
 
Fecha de Ingreso: septiembre-2007
Ubicación: PyRoot
Mensajes: 1.515
Antigüedad: 16 años, 7 meses
Puntos: 188
Respuesta: Problema con uploadify PHP+AJAX+MySQL

Hola amigo. Ando muy ocupado no he podido responderte. En un ratito libre que tenga en la noche te respondo con más esmero.

por lo mientras:

1.- Asegurate de iniciar sesion session_start() tanto el el archivo donde tienes el formulario como en el archivo uploadify.php esto es necesario para que recibas el valor de la session.


2.- Si deseas enviar datos desde inputs al momento de subir tu archivo, lo que te conviene hacer es lo siguiente.


Crea un botón, del tipo que quieras "vale un enlace", y primeramente vas a recibir los valores de los imputs utilizando javascript o jquery como te acomodes, despues enviaras estos valores utilizando json hacia un archivo PHP desde el cual debes setear estos valores utilizando sesiones PHP.

2.- Despues de haber hecho esta actividad y de la misma manera respondiendo con json---- regresando al script javascript ejecutas la funcion uploadify

$('#someId').uploadify(options)

http://www.uploadify.com/documentati...ods/uploadify/


Entonces comenzaras a ver que el archivo comienza a cargarse en el servidor, y desde el archivo uploadify.php ya estarán disponibles el valor para las sesiones


Saludos.
__________________
Si quieres agradecer el triangulo obscuro de la parte derecha debes presionar +.
  #10 (permalink)  
Antiguo 21/02/2012, 17:02
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 13 años, 11 meses
Puntos: 23
Respuesta: Problema con uploadify PHP+AJAX+MySQL

ok esperare tu respuesta, ahora tratare de explicar lo más breve y detalladamente posible como funciona mi aplicación para que veas porque no recibo la sesión (pondré solo el código relevante):

tengo publicar_opinion.php

Código HTML:
<!--al inicio-->
session_start();
<!--entre el head-->
<script type="text/javascript">
// <![CDATA[
$(document).ready(function() {
	$('#file_upload').uploadify({
    	        'uploader'  	: '../images/images_opiniones/uploadify.swf',
		'buttonText'  	:'Examinar...',
		'cancelImg' 	: '../images/images_opiniones/cancel.png',
    	        'script'    	: 'uploadify.php',
        	'folder'    	: '../images/images_opiniones/uploads',
        	'auto'      	: false,
		'fileDesc'    	: 'Tipo de imágenes permitidas (.JPG, .GIF, .PNG)',
		'fileExt'     	: '*.jpg;*.jpeg;*.gif;*.png',
		'sizeLimit'   	: 2097152, //default bytes *2MB* --1MB 1048576---
		'method'    	: 'post',
		'multi'       	: true,
  	});
});
// ]]>
</script>
<!--entre el body-->
<table align="center">
                        	<tr>
                                <td>Su nombre</td>
                                <td><input class="input_type_text" type="text" id="autor_opinion" name="autor_opinion" maxlength="100" onkeypress="return letras(event)" /><div id="error_autor_op" class="error" style="display:none"></div></td>
                            </tr>
                            <tr>
                                <td>*Su email</td>
                                <td><input class="input_type_text" type="text" id="email_opinion" name="email_opinion" maxlength="100" /><div id="error_email_op" class="error" style="display:none"></div></td>
                            </tr>
                            <!--mas campos-->
                            <tr>
                            	<td colspan="2" align="center"><input type="button" id="enviar" value="Enviar" onclick="procesar_opinion()" /></td>
                            </tr>
     </table> 
ahora el botón llama la función ajax procesar_opinion(), esta función valida los campos y los envía a procesar_opinion.php:

Código PHP:
session_start();
include(
'../conexion_mysql/conecta_db.php');
$conn_mysql conecta_db();

//recibo variables
$autor_opinion=trim($_GET['autor_opinion']);
//...demas variables

//inserto a la bd
$sql_insert="Insert into opiniones (autor_op, x, x, x, x, x, x, x) values ('$autor_opinion', '$x', '$x', '$x', '$x', '$x', '$x', '$x')";
mysql_query($sql_insert) or die('Error en la inserci&oacuten: '.mysql_error());
//aca saco el id que se acaba de generar y lo guardo en la sesion, es la unica variable que me interesa pasar
$id_opinion mysql_insert_id();
$_SESSION['id_op']=$id_opinion;
echo 
$_SESSION['id_op'];//le hago un echo para comprobar que esta guardando el valor y si lo hace 
una vez que la funcion ajax regresa a publicar_opinion.php, le pregunto al usuario si desea agregar fotos, entonces en publicar_opinion.php, despues del formulario tengo esto:

Código HTML:
<input id="file_upload" type="file" name="file_upload" />
<input type="button" class="fin_add_img" id="upload" value="Subir" onclick="$('#file_upload').uploadifyUpload();"/> 
aca llama todo el rollo del uploadify que envia a uploadify.php, donde estoy tratando de recuperar la variable de sesion:

Código PHP:
session_start();

include(
'../conexion_mysql/conecta_db.php');
$conn_mysql conecta_db();

$id_opinion=$_SESSION['id_op']; echo "recibi id: ".$id_opinion//echo vacio
    
$root $_SERVER['DOCUMENT_ROOT'];
$tempFile $_FILES['Filedata']['tmp_name'];
$targetPath $root.'/images/images_opiniones/uploads/';
$fileName $_FILES['Filedata']['name'];
    
$targetFile $targetPath.$fileName;
move_uploaded_file($tempFile,$targetFile);
    
$sql_insert="Insert into imagenes (nombre_img, ruta_img, id_opinion) values ('$fileName', '$targetFile', '$id_opinion')";
mysql_query($sql_insert) or die('Error en la inserci&oacuten: '.mysql_error());
        
echo 
"ok";
exit(); 
Pues el motivo de querer recuperar el id_opinion es que las imágenes deben estar relacionas con la opinión, entonces en mi tabla imágenes tengo de llave foránea el id_opinion

El uploadify.php me devuelve error, dice undefine index id_op

pues así esta mi relajo

Gracias infinitamente por tu ayuda

Última edición por catpaw; 21/02/2012 a las 17:19
  #11 (permalink)  
Antiguo 22/02/2012, 00:09
 
Fecha de Ingreso: septiembre-2007
Ubicación: PyRoot
Mensajes: 1.515
Antigüedad: 16 años, 7 meses
Puntos: 188
Respuesta: Problema con uploadify PHP+AJAX+MySQL

Hola amigo. Voy llegando a casa... XD

Bueno vamos a ver. Lo de sesiones con PHP no tiene porque no funcionarte. Es lo que yo más he utilizado por el echo que me gusta recibir todos los datos antes de cargar los archivos y así validar ... etc...

Pero, si lo que quieres es salir del problema ya de una vez por todas existe un medio rápido y viene incluido en la propia uploadify, este es un método llamado "uploadifySettings"

Yo imagino que ya lo has probado y no te funciono.

--> Si tu hiciste algo como esto:

Código Javascript:
Ver original
  1. ("#boton").click(.............
  2.  
  3. (#inputfile).uploadifySettings('scriptData',{'jsonvar':$(#campo).val(),true);
  4.  
  5. )};

o algo como esto:


Código Javascript:
Ver original
  1. $('#fileInput').uploadify({
  2.             'uploader'  : 'uploadify.swf',
  3.             'script'    : 'uploader.php',
  4.             'cancelImg' : 'cancel.png',
  5.             'auto'      : true,
  6.             'folder'    : 'uploads',
  7.             'scriptData' : {'variable':$("#mitexto").val()},
  8.            
  9.             'onComplete': function(event, queueID, fileObj, response, data) {
  10.                
  11.                 alert(response);
  12.             }
  13.         });
  14.  
  15. });

y no te funcionó!, bueno no te preocupes que realmente eso no funciona y jamás funcionará. No es tanto que exista un error con uploadify si no que es ya un problema del propio jquery, este cuando carga en totalidad el documento con su $(document).ready(function() tiene problemas con sincronizar recogiendo valores desde campos.

En resumen pasa esto: Jquery carga la página, todos los campos de formulario que estaban vacios los va a considerar como vacios (si no se actualiza la página) hasta el fin de los tiempos aunque estos campos dejen de ser vacios en cierto momento....

La solución viene propuesta por uploadify y es la siguiente:

jeje ya se que estás ansioso de verlo pero antes dejame disculparme no había leido todos tus posts, por lo que me siento culpable que no hayas dormido en esas semanas... bueno sin mas rodeos lo que debes utilizar es el método onSelectOnce

Ahora te pongo un ejemplo:

Código Javascript:
Ver original
  1. $(document).ready(function() {
  2.    
  3.     $('#fileInput').uploadify({
  4.             'uploader'  : 'uploadify.swf',
  5.             'script'    : 'uploader.php',
  6.             'cancelImg' : 'cancel.png',
  7.             'auto'      : true,
  8.             'folder'    : 'uploads',
  9.             'onSelectOnce': function(event,data){
  10.                 $('#fileInput').uploadifySettings('scriptData',{'variable':$("#mitexto").val()},true);
  11.             },
  12.             'onComplete': function(event, queueID, fileObj, response, data) {
  13.  
  14.                 alert(response);
  15.             }
  16.         });
  17.    
  18.    
  19. });

el script php dice:

Código PHP:
Ver original
  1. <?php
  2.  
  3. print_r($_POST);
  4.  
  5. ?>

y el formulario

Código HTML:
Ver original
  1. <input type="text" size="25" name="mitexto" id="mitexto"/>
  2. <input type="file" name="fileInput" id="fileInput" />


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

Es todo amigo, un saludo
__________________
Si quieres agradecer el triangulo obscuro de la parte derecha debes presionar +.
  #12 (permalink)  
Antiguo 22/02/2012, 09:55
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 13 años, 11 meses
Puntos: 23
Respuesta: Problema con uploadify PHP+AJAX+MySQL

wow! gracias iovan por tu explicación,

veras ya deje atrás la pelea de tratar de pasar variables, me rendí la verdad y en serio me gustaría probar lo que me acabas de proponer, pero pasa que se me acaba el tiempo (aunque lo intentare en un futuro),

en lo que estoy ahora y lo único que si me interesa es recuperar la sesión que creo en procesar_opinion.php y pasarla a uploadify.php

en procesar_opinion.php la creo después de insertar a la bd:

Código PHP:
//inserto a la bd
$sql_insert="Insert into opiniones (autor_op, x, x, x, x, x, x, x) values ('$autor_opinion', '$x', '$x', '$x', '$x', '$x', '$x', '$x')";
mysql_query($sql_insert) or die('Error en la inserci&oacuten: '.mysql_error());
//aca saco el id que se acaba de generar y lo guardo en la sesion, es la unica variable que me interesa pasar
$id_opinion mysql_insert_id();
$_SESSION['id_op']=$id_opinion;
echo 
$_SESSION['id_op'];//le hago un echo para comprobar que esta guardando el valor y si lo hace 
y la trato de recuperar en uploadify.php así:
Código PHP:
$id_opinion=$_SESSION['id_op']; echo "recibi id: ".$id_opinion//echo vació 
ambos archivos inician con session_start();

entre todo lo que leí, vi por ahí que decían que el uploadify no manda las cokies por eso es que no se puede recuperar las sesiones, aunque si existe una solución, que nunca la pude entender totalmente.

y es que como podrás ver intento pasar la sesión de un php a otro php sin pasar por el uploadify.js nada ya que la pagina en la que hago todo nunca se recarga.

Gracias por tu ayuda
  #13 (permalink)  
Antiguo 22/02/2012, 10:57
 
Fecha de Ingreso: septiembre-2007
Ubicación: PyRoot
Mensajes: 1.515
Antigüedad: 16 años, 7 meses
Puntos: 188
Respuesta: Problema con uploadify PHP+AJAX+MySQL

Hola, no por que te rindes ? jejej :D

Bueno, verás si es verdad que uploadify no pasa las cookies, pero las Sesiones de PHP no son cookies, estas sesiones van a depender del servidor y no del cliente así que uploadify no tiene juridiccion en ellas, por lo que se tiene que aguantar a lo que le diga el servidor.

Si nosotros creamos una session está estará disponible en todos los archivos PHP del sitio web siempre y cuando exista una propagación de dicha sesion (session_start() ) y se refiera a la variable de session desde el mismo $_SERVER['DOCUMENT_ROOT']

Estas son las 2 condiciones para propagar correctamente un valor de session.

================================================

Ahora bien, para que comprendas el funcionamiento te voy a hacer un ejemplo y lo voy a probar para asegurarme que funcione....



Código HTML:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  4. <title>Documento sin título</title>
  5. <script type="text/javascript" src="http://code.jquery.com/jquery-1.7.1.js"></script>
  6. <script type="text/javascript" src="http://localhost/uploadify/jquery.uploadify.v2.1.0.min.js"></script>
  7. <script type="text/javascript" src="http://localhost/uploadify/swfobject.js"></script>
  8. <script language="javascript">
  9.  
  10. $(document).ready(function(){
  11.    
  12.     $('#botonSubmit').click(function(){
  13.        
  14.         $.ajax({
  15.             type: 'POST',
  16.             url: 'procesar.php',
  17.             data: {'nombre':$('#input1').val(),'opinion':$('#input2').val()},
  18.             success: function(data){
  19.                 if(data=='yes') {
  20.                     alert("SI ESTAN SETEADAS LAS SESIONES");
  21.                     $('#fileInput').uploadifySettings('script','uploader.php');
  22.                     $('#fileInput').uploadifyUpload();
  23.                 }
  24.                 else alert("NO ESTAN SETEADAS LAS SESIONES");  
  25.             }
  26.            
  27.         });
  28.     });
  29.  
  30.     //UPLOADIFY
  31.     $('#fileInput').uploadify({
  32.             'uploader'  : 'http://localhost/uploadify/uploadify.swf',
  33.             'script'    : '',
  34.             'cancelImg' : 'cancel.png',
  35.             'auto'      : false,
  36.             'folder'    : 'uploads',
  37.             'onComplete': function(event, queueID, fileObj, response, data) {
  38.                 alert(response);
  39.             }
  40.         });
  41.    
  42. });
  43.  
  44.  
  45.  
  46. </head>
  47.  
  48. <a href="destruir.php">destruir sesiones y probar de nuevo</a>
  49.  
  50.  
  51. <p>NOMBRE: <input type="text" id="input1" /></p>
  52. <p>OPINION: <input type="text" id="input2" /></p>
  53. <input type="file" name="fileInput" id="fileInput" />
  54.  
  55. <input type="button" id="botonSubmit" value="Enviar" />
  56. </body>
  57. </html>


procesar.php
Código PHP:
Ver original
  1. <?php
  2.  
  3.  
  4. $_SESSION['name'] = $_POST['nombre'];
  5. $_SESSION['opinion'] = $_POST['opinion'];
  6.  
  7. if(isset($_SESSION['name']) AND isset($_SESSION['opinion']) AND !empty($_SESSION['name']) AND !empty($_SESSION['opinion']))
  8.      echo "yes";
  9. else "NO";
  10.  
  11.  
  12. ?>

destruir.php
Código PHP:
Ver original
  1. <?php
  2.  
  3.  
  4.  
  5. header("location: index.php");
  6. ?>

uploader.php
Código PHP:
Ver original
  1. <?php
  2.  
  3.  
  4. print_r($_SESSION);
  5.  
  6. ?>

=============

Muy bien, bueno amigo me despido un saludo.
__________________
Si quieres agradecer el triangulo obscuro de la parte derecha debes presionar +.
  #14 (permalink)  
Antiguo 22/02/2012, 11:10
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 13 años, 11 meses
Puntos: 23
Respuesta: Problema con uploadify PHP+AJAX+MySQL

que tal iovan, me rindo porque ya casi no tengo tiempo, pero lo volvere a intetar en un futuro

mira mi problema es que yo no puedo enviar el id_opinion por aquì:

data: {'nombre':$('#input1').val(),'opinion':$('#input2' ).val()},

porque al momento de enviar el formulario todavía no conozco que id tendrá, lo conoceré después que llegue a procesar.php, que inserte los campos a la bd y que lo recupere de la inserción que se acaba de hacer, es cuando lo guardo en la variable de session.

Que si no ponemos a ver es casi lo mismo que me pones, entonces no se porque no me llega a uploader.php

por ejemplo en procesar.php esta linea $_SESSION['name'] = $_POST['nombre']; yo la tengo asi: $_SESSION['name'] = $name;

y en uploader la recibo asi:

$name = $_SESSION['name'];
le hago un echo y me sale vacio

no se que pueda estar pasando
  #15 (permalink)  
Antiguo 22/02/2012, 11:51
 
Fecha de Ingreso: septiembre-2007
Ubicación: PyRoot
Mensajes: 1.515
Antigüedad: 16 años, 7 meses
Puntos: 188
Respuesta: Problema con uploadify PHP+AJAX+MySQL

jeje, mmm yo creo que hay algunos errores conceptuales.

Me imagino que lo que buscas en realidad es relacionar el archivo que sube el usuario con el id de su publicación?

A bueno, pues mira yo suelo hacer esto de 5 formas distintas.


1.- Subo todo, tanto formulario como archivo en una sola acción.
>>> utilizando uploadifySettings en conjunto con onSelectOnce le paso por JSON los datos del formulario al archivo upload.php, desde el cual guardo en base de datos, subo la imagen y ya acabe.

2.- subo primero la imagen colocando la propiedad 'auto':true desde el archivo upload.php respondo un id al que llamaremos id_post, el cual genero aleatoriamente una cadena de numeros,letras y algunos simbolos, etc...

el cual lo voy a escribir en un campo tipo hidden del formulario usando javascript, finalmente cuando el usuario pulse el boton submit, se envia el formulario cuyo id_post tendrá un valor, de esta manera asocio la publicación con el archivo y ya acabe.

3.- Utilizo ajax en conjunto con la propiedad serialize y el evento submit propio de jquery.

Para lo cual, hago la propiedad de uploadify auto:false.
El boton submit ejecuta una funcion en jquery conocidad como .submit, le paso un evento y digo que ignore su comportamiento "submit", entonces procedo a utilizar ajax de 5 maneras distintas, podrías utilizar .load(), pasarle los parametros serialize y ejecutar desde el mismo el metodo uploadifyupload() propio de uploadify, entonces sucede que estas enviando la imagen, respondes un id lo recibes en el javascript y despues envias todo el formulario serializado por load haces la asociación y ya terminaste.

4.- Otra forma que utilizo la que estamos discutiendo, usando las variables de session, pero esto tiene un inconveniente. El que requerimos de una correcta configuración del servidor. por lo que veo no te está funcionando así que es culpa de tu configuración. La verdad es que yo he metido mano en la conf de mi servidor desde tiempos inmemoriables así que no se que decirte para que modifiques y te funcione. XD

5.- La mas difícil que he usado es valiendome de CURL, pero eso es otra historia y bueno.... En realidad supongo que hay muchas maneras de lograr esto pero seguramente serán rebuscadas.


==============================

LA QUE YO TE RECOMIENDO ES SIN DUDA LA PRIMERA

http://www.forosdelweb.com/4124883-post11.html

Saludos
__________________
Si quieres agradecer el triangulo obscuro de la parte derecha debes presionar +.
  #16 (permalink)  
Antiguo 22/02/2012, 11:59
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 13 años, 11 meses
Puntos: 23
Respuesta: Problema con uploadify PHP+AJAX+MySQL

Si en principio tenia toda la intención de hacerlo como el método1 y se ve interesante el método 3 pero definitivamente me falta mucho camino por recorrer con jquery

Tratare de implementar el método1, ya con la información que me has proporcionado debo ser capaz de implementarlo

te agradezco mucho tu ayuda iovan

Etiquetas: html, imagenes, uploadify, variables, usuarios
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 17:10.