Foros del Web » Programando para Internet » PHP »

Como hacer que no se repitan los mensajes

Estas en el tema de Como hacer que no se repitan los mensajes en el foro de PHP en Foros del Web. Hola a todos, estoy subiendo archivos con ajax, ( el código lo saque de este foro) Necesito limitar que no suban mas de 2 archivos, ...
  #1 (permalink)  
Antiguo 13/07/2021, 12:48
Avatar de fedefrankk  
Fecha de Ingreso: agosto-2007
Mensajes: 871
Antigüedad: 16 años, 7 meses
Puntos: 7
Pregunta Como hacer que no se repitan los mensajes

Hola a todos, estoy subiendo archivos con ajax, ( el código lo saque de este foro)

Necesito limitar que no suban mas de 2 archivos, del lado de php ..

del lado de java no lo se hacer...
en PHP he hecho lo siguiente, pero me repite los mensajes por cada foto que subo..

codigo:
Código PHP:
Ver original
  1. <?php
  2.  
  3.     foreach($_FILES['images']['error'] as $key => $error){
  4.         if($error == UPLOAD_ERR_OK){
  5.             $name = $_FILES['images']['name'][$key];
  6.             $cuantas=count($_FILES['images']['name']);
  7.             if ($cuantas>=3){
  8.                 echo "<h2>Hastta 2 artchivos ".$cuantas."</h2>";
  9.                 break;
  10.             }else{
  11.                 move_uploaded_file($_FILES['images']['tmp_name'][$key], 'images/' . $name);
  12.                 echo "<h2>Archivos correctamente subidos ".$cuantas."</h2>";
  13.             }
  14.            
  15.    
  16.            
  17.         }
  18.        
  19.     }
  20.    
  21.  
  22.  
  23.  ?>

Gracias a todos por el tiempo.
saludos. !!
  #2 (permalink)  
Antiguo 13/07/2021, 13:48
Avatar de zerpico_01  
Fecha de Ingreso: enero-2008
Ubicación: Wilde - Avellaneda -
Mensajes: 421
Antigüedad: 16 años, 2 meses
Puntos: 13
Respuesta: Como hacer que no se repitan los mensajes

MM aja no es java , java es otro lenguaje, supongo que se refiere a javascript .. en fin

No sé que código esta empleando, lo recomendable es jquery, yo lo uso por comodidad en una sola linea se puede hacer el upload, pero esta siendo despreciado hasta por bootstrap últimamente

supongamos que su archivo llega correctamente a php y usando su código pruebe algo así:

Código PHP:
    $i 0;
    foreach (
$_FILES['images']['error'] as $key => $error) {
        if (
$error == UPLOAD_ERR_OK) {
            
$name $_FILES['images']['name'][$key];
            
$cuantas count($_FILES['images']['name']);
            if (
$cuantas >= 3) {
                echo 
"<h2>Hastta 2 artchivos ".(int)$cuantas."</h2>";
                break;
            } else {
                
$i++;
                
move_uploaded_file(
                    
$_FILES['images']['tmp_name'][$key],
                    
'images/' .strip_tags($nameENT_QUOTES'UTF-8')
                );
                if (
$i == 3) {
                   echo 
"<h2>Archivos correctamente subidos ".(int)$cuantas."</h2>";
                  break;
            }
        }
    } 
Es una forma, pruebe a ver si le funciona, le corregí un poco el código.
En TEORÍA TENDRÍA QUE FUNCIONAR

De todos modos su lógica no es correcta pues por mas que eso le funcione, no debe hacer un foreach a los errores, lo lógico seria comprobar que no existan errores y luego hacer el movimiento de archivos, YO SOLO LE PUSE UN EJEMPLO USANDO SU CÓDIGO ..

saludos
editado me olvide el break; jajaja
__________________
Es duro fracasar en algo, pero es mucho peor no haberlo intentado. - Si crees todo lo que lees, mejor no leas -

Última edición por zerpico_01; 13/07/2021 a las 14:08
  #3 (permalink)  
Antiguo 14/07/2021, 12:21
Avatar de fedefrankk  
Fecha de Ingreso: agosto-2007
Mensajes: 871
Antigüedad: 16 años, 7 meses
Puntos: 7
Pregunta Respuesta: Como hacer que no se repitan los mensajes

Hola.!! gracias por contestar, he visto que jquery no lo están usando, yo saque un codigo de este foro, ( ahora te lo comparto), del lado de javascript, pude validar que se subieran 2 archivos, copie tu código y me saltaron varios errores
( no es por critica, al contrario, no se mucho y quiero aprender,) los errorres son los siguiente.:

Warning: strip_tags() expects at most 2 parameters, 3 given in C:\xampp\htdocs\SUBIR ARCHIVO_AJAX\01\upload.php on line 15

Warning: move_uploaded_file(): The second argument to copy() function cannot be a directory in C:\xampp\htdocs\SUBIR ARCHIVO_AJAX\01\upload.php on line 15

Warning: move_uploaded_file(): Unable to move 'C:\xampp\tmp\php2D75.tmp' to 'images/' in C:\xampp\htdocs\SUBIR ARCHIVO_AJAX\01\upload.php on line 15

Warning: strip_tags() expects at most 2 parameters, 3 given in C:\xampp\htdocs\SUBIR ARCHIVO_AJAX\01\upload.php on line 15

Warning: move_uploaded_file(): The second argument to copy() function cannot be a directory in C:\xampp\htdocs\SUBIR ARCHIVO_AJAX\01\upload.php on line 15

Warning: move_uploaded_file(): Unable to move 'C:\xampp\tmp\php2D85.tmp' to 'images/' in C:\xampp\htdocs\SUBIR ARCHIVO_AJAX\01\upload.php on line 15



dejo el código javascript.:

Código Javascript:
Ver original
  1. (function(){
  2.     var button=document.getElementById('btnSubmit')
  3.    
  4.     var input = document.getElementById('images'),
  5.         formdata = false;
  6.    
  7.     function mostrarImagenSubida(source){
  8.         var list = document.getElementById('lista-imagenes'),
  9.             li   = document.createElement('li'),
  10.             img  = document.createElement('img');
  11.         img.src = source;
  12.         li.appendChild(img);
  13.         list.appendChild(li);
  14.     }
  15.    
  16.     //Revisamos si el navegador soporta el objeto FormData
  17.     if(window.FormData){
  18.         formdata = new FormData();
  19. //        document.getElementById('btnSubmit').style.display = 'none';
  20.     }
  21.    
  22.     if(input.addEventListener){
  23.         input.addEventListener('change', function(evt){
  24.             var i = 0, len = input.files.length, img, reader, file;
  25.             if (len > 2) {
  26.                 alert('Solo puedes seleccionar 2 imágenes');
  27.                 input.value = '';
  28.                 return false;
  29.             }
  30.             //Si hay varias imágenes, las obtenemos una a una
  31.             for( ; i < len; i++){
  32.                 file = input.files[i];
  33. //                console.log(file);
  34.                 //Una pequeña validación para subir imágenes
  35.                 if(!!file.type.match(/image.*/)){
  36.                     //Si el navegador soporta el objeto FileReader
  37.                     if(window.FileReader){
  38.                         reader = new FileReader();
  39.                         //Llamamos a este evento cuando la lectura del archivo es completa
  40.                         //Después agregamos la imagen en una lista
  41.                         reader.onloadend = function(e){
  42.                             mostrarImagenSubida(e.target.result);
  43.                         };
  44.                         //Comienza a leer el archivo
  45.                         //Cuando termina el evento onloadend es llamado
  46.                         reader.readAsDataURL(file);
  47.                     }
  48.                 }
  49.             }
  50.         }, false);
  51.     }
  52.    
  53.     //Aplicamos la subida de imágenes al evento change del input file
  54.     if(button.addEventListener){
  55.         button.addEventListener('click', function(evt){
  56.             var i = 0, len = input.files.length, img, reader, file;
  57.            
  58.             document.getElementById('response').innerHTML = 'Subiendo...';
  59.            
  60.             //Si hay varias imágenes, las obtenemos una a una
  61.             for( ; i < len; i++){
  62.                 file = input.files[i];
  63. //                console.log(file);
  64.                 //Una pequeña validación para subir imágenes
  65.                 if(!!file.type.match(/image.*/)){
  66.                     //Si el navegador soporta el objeto FileReader
  67. //                    if(window.FileReader){
  68. //                        reader = new FileReader();
  69. //                        //Llamamos a este evento cuando la lectura del archivo es completa
  70. //                        //Después agregamos la imagen en una lista
  71. //                        reader.onloadend = function(e){
  72. //                            mostrarImagenSubida(e.target.result);
  73. //                        };
  74. //                        //Comienza a leer el archivo
  75. //                        //Cuando termina el evento onloadend es llamado
  76. //                        reader.readAsDataURL(file);
  77. //                    }
  78.                    
  79. //                    Si existe una instancia de FormData
  80.                     if(formdata)
  81.                         //Usamos el método append, cuyos parámetros son:
  82.                             //name : El nombre del campo
  83.                             //value: El valor del campo (puede ser de tipo Blob, File e incluso string)
  84.                         formdata.append('images[]', file);
  85.                 }
  86.             }
  87.            
  88.             //Por último hacemos uso del método proporcionado por jQuery para hacer la petición ajax
  89.             //Como datos a enviar, el objeto FormData que contiene la información de las imágenes
  90.             if(formdata){
  91.                 $.ajax({
  92.                    url : 'upload.php',
  93.                    type : 'POST',
  94.                    data : formdata,
  95.                    processData : false,
  96.                    contentType : false,
  97.                    success : function(res){
  98.                        document.getElementById('response').innerHTML = res;
  99.                    }                
  100.                 });
  101.             }
  102.         });
  103.     }
  104. }());

y en php:

Código PHP:
Ver original
  1. <?php
  2.  
  3.     $i = 0;
  4.     foreach ($_FILES['images']['error'] as $key => $error) {
  5.         if ($error == UPLOAD_ERR_OK) {
  6.             $name = $_FILES['images']['name'][$key];
  7.             $cuantas = count($_FILES['images']['name']);
  8.             if ($cuantas >= 3) {
  9.                 echo "<h2>Hastta 2 artchivos ".(int)$cuantas."</h2>";
  10.                 break;
  11.             } else {
  12.                 $i++;
  13.                 move_uploaded_file(
  14.                     $_FILES['images']['tmp_name'][$key],
  15.                     'images/' .strip_tags($name, ENT_QUOTES, 'UTF-8')
  16.                 );
  17.                 if ($i == 3) {
  18.                    echo "<h2>Archivos correctamente subidos ".(int)$cuantas."</h2>";
  19.                   break;
  20.             }
  21.         }
  22.     }
  23. }
  24.    
  25.  
  26.  
  27.  
  28.  
  29.  
  30.  
  31.  
  32.  ?>

No se que estoy haciendo mal..
Cualquier ayuda se agradece.!
Saludos y gracias por su tiempo.
  #4 (permalink)  
Antiguo 17/07/2021, 22:27
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.551
Antigüedad: 12 años, 4 meses
Puntos: 977
Respuesta: Como hacer que no se repitan los mensajes

Te sugiero recorrer directamente el array de archivos y en cada iteración acceder a sus propiedades:

Código PHP:
Ver original
  1. foreach ($_FILES as $index => $file){
  2.     //...
  3. }

En la iteración puedes obtener datos como el nombre del archivo, ruta temporal y el estado de la subida, y almacenarlos en variables para que sea más legible. Además, puedes utilizar un contador para llevar la cuenta (valga la redundancia) de los archivos subidos exitosamente, el cual debes definir antes de iniciar el bucle:

Código PHP:
Ver original
  1. $count = 0;
  2.  
  3. foreach ($_FILES as $index => $file){
  4.     $name = $file['name'];
  5.     $temp = $file['tmp_name'];
  6.     $error = $file['error'];
  7. }

Enseguida, verifica si el archivo ha sido subido con éxito. En caso de ser así, verifica si el valor del contador es menor a 2; si es menor, incrementa el valor del contador en uno y almacena el archivo. Cuando la cuenta ya no sea menor a 2, es decir, igual o mayor, termina el bucle e imprime un mensaje que advierta al usuario sobre la terminación del proceso. Este último paso solo ocurrirá cuando el usuario intente subir más de 2 archivos; cuando la cuenta sea menor o igual a 2, no se llegará a esta parte del código y directamente se terminará el bucle y se imprimirá el mensaje.

Código PHP:
Ver original
  1. $count = 0;
  2.  
  3. foreach ($_FILES as $file){
  4.     $name = $file['name'];
  5.     $temp = $file['tmp_name'];
  6.     $error = $file['error'];
  7.  
  8.     if ($error == UPLOAD_ERR_OK){
  9.         if ($count < 2){
  10.             $count++;
  11.             move_uploaded_file($temp, 'images/' . $name);
  12.         }
  13.         else{            
  14.             break;
  15.         }
  16.     }
  17. }
  18.  
  19. echo 'Los dos archivos han sido subidos satisfactoriamente';

Te sugiero verificar las extensiones de los archivos antes de subirlos para que así evites que el usuario suba archivos potencialmente peligrosos.

__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #5 (permalink)  
Antiguo 17/07/2021, 23:16
Avatar de zerpico_01  
Fecha de Ingreso: enero-2008
Ubicación: Wilde - Avellaneda -
Mensajes: 421
Antigüedad: 16 años, 2 meses
Puntos: 13
Respuesta: Como hacer que no se repitan los mensajes

Cita:
Iniciado por fedefrankk Ver Mensaje
Hola.!! gracias por contestar, he visto que jquery no lo están usando, yo saque un codigo de este foro, ( ahora te lo comparto), del lado de javascript, pude validar que se subieran 2 archivos, copie tu código y me saltaron varios errores
( no es por critica, al contrario, no se mucho y quiero aprender,) los errorres son los siguiente.:

Warning: strip_tags() expects at most 2 parameters, 3 given in C:\xampp\htdocs\SUBIR ARCHIVO_AJAX\01\upload.php on line 15

Warning: move_uploaded_file(): The second argument to copy() function cannot be a directory in C:\xampp\htdocs\SUBIR ARCHIVO_AJAX\01\upload.php on line 15

Warning: move_uploaded_file(): Unable to move 'C:\xampp\tmp\php2D75.tmp' to 'images/' in C:\xampp\htdocs\SUBIR ARCHIVO_AJAX\01\upload.php on line 15

Warning: strip_tags() expects at most 2 parameters, 3 given in C:\xampp\htdocs\SUBIR ARCHIVO_AJAX\01\upload.php on line 15

Warning: move_uploaded_file(): The second argument to copy() function cannot be a directory in C:\xampp\htdocs\SUBIR ARCHIVO_AJAX\01\upload.php on line 15

Warning: move_uploaded_file(): Unable to move 'C:\xampp\tmp\php2D85.tmp' to 'images/' in C:\xampp\htdocs\SUBIR ARCHIVO_AJAX\01\upload.php on line 15



dejo el código javascript.:

Código Javascript:
Ver original
  1. (function(){
  2.     var button=document.getElementById('btnSubmit')
  3.    
  4.     var input = document.getElementById('images'),
  5.         formdata = false;
  6.    
  7.     function mostrarImagenSubida(source){
  8.         var list = document.getElementById('lista-imagenes'),
  9.             li   = document.createElement('li'),
  10.             img  = document.createElement('img');
  11.         img.src = source;
  12.         li.appendChild(img);
  13.         list.appendChild(li);
  14.     }
  15.    
  16.     //Revisamos si el navegador soporta el objeto FormData
  17.     if(window.FormData){
  18.         formdata = new FormData();
  19. //        document.getElementById('btnSubmit').style.display = 'none';
  20.     }
  21.    
  22.     if(input.addEventListener){
  23.         input.addEventListener('change', function(evt){
  24.             var i = 0, len = input.files.length, img, reader, file;
  25.             if (len > 2) {
  26.                 alert('Solo puedes seleccionar 2 imágenes');
  27.                 input.value = '';
  28.                 return false;
  29.             }
  30.             //Si hay varias imágenes, las obtenemos una a una
  31.             for( ; i < len; i++){
  32.                 file = input.files[i];
  33. //                console.log(file);
  34.                 //Una pequeña validación para subir imágenes
  35.                 if(!!file.type.match(/image.*/)){
  36.                     //Si el navegador soporta el objeto FileReader
  37.                     if(window.FileReader){
  38.                         reader = new FileReader();
  39.                         //Llamamos a este evento cuando la lectura del archivo es completa
  40.                         //Después agregamos la imagen en una lista
  41.                         reader.onloadend = function(e){
  42.                             mostrarImagenSubida(e.target.result);
  43.                         };
  44.                         //Comienza a leer el archivo
  45.                         //Cuando termina el evento onloadend es llamado
  46.                         reader.readAsDataURL(file);
  47.                     }
  48.                 }
  49.             }
  50.         }, false);
  51.     }
  52.    
  53.     //Aplicamos la subida de imágenes al evento change del input file
  54.     if(button.addEventListener){
  55.         button.addEventListener('click', function(evt){
  56.             var i = 0, len = input.files.length, img, reader, file;
  57.            
  58.             document.getElementById('response').innerHTML = 'Subiendo...';
  59.            
  60.             //Si hay varias imágenes, las obtenemos una a una
  61.             for( ; i < len; i++){
  62.                 file = input.files[i];
  63. //                console.log(file);
  64.                 //Una pequeña validación para subir imágenes
  65.                 if(!!file.type.match(/image.*/)){
  66.                     //Si el navegador soporta el objeto FileReader
  67. //                    if(window.FileReader){
  68. //                        reader = new FileReader();
  69. //                        //Llamamos a este evento cuando la lectura del archivo es completa
  70. //                        //Después agregamos la imagen en una lista
  71. //                        reader.onloadend = function(e){
  72. //                            mostrarImagenSubida(e.target.result);
  73. //                        };
  74. //                        //Comienza a leer el archivo
  75. //                        //Cuando termina el evento onloadend es llamado
  76. //                        reader.readAsDataURL(file);
  77. //                    }
  78.                    
  79. //                    Si existe una instancia de FormData
  80.                     if(formdata)
  81.                         //Usamos el método append, cuyos parámetros son:
  82.                             //name : El nombre del campo
  83.                             //value: El valor del campo (puede ser de tipo Blob, File e incluso string)
  84.                         formdata.append('images[]', file);
  85.                 }
  86.             }
  87.            
  88.             //Por último hacemos uso del método proporcionado por jQuery para hacer la petición ajax
  89.             //Como datos a enviar, el objeto FormData que contiene la información de las imágenes
  90.             if(formdata){
  91.                 $.ajax({
  92.                    url : 'upload.php',
  93.                    type : 'POST',
  94.                    data : formdata,
  95.                    processData : false,
  96.                    contentType : false,
  97.                    success : function(res){
  98.                        document.getElementById('response').innerHTML = res;
  99.                    }                
  100.                 });
  101.             }
  102.         });
  103.     }
  104. }());

y en php:

Código PHP:
Ver original
  1. <?php
  2.  
  3.     $i = 0;
  4.     foreach ($_FILES['images']['error'] as $key => $error) {
  5.         if ($error == UPLOAD_ERR_OK) {
  6.             $name = $_FILES['images']['name'][$key];
  7.             $cuantas = count($_FILES['images']['name']);
  8.             if ($cuantas >= 3) {
  9.                 echo "<h2>Hastta 2 artchivos ".(int)$cuantas."</h2>";
  10.                 break;
  11.             } else {
  12.                 $i++;
  13.                 move_uploaded_file(
  14.                     $_FILES['images']['tmp_name'][$key],
  15.                     'images/' .strip_tags($name, ENT_QUOTES, 'UTF-8)
  16.                );
  17.                if ($i == 3) {
  18.                   echo "<h2>Archivos correctamente subidos ".(int)$cuantas."</h2>";
  19.                  break;
  20.            }
  21.        }
  22.    }
  23. }
  24.    
  25.  
  26.  
  27.  
  28.  
  29.  
  30.  
  31.  
  32. ?>

No se que estoy haciendo mal..
Cualquier ayuda se agradece.!
Saludos y gracias por su tiempo.
Pues debe usar la lógica que le indica Alexis88

Lo que yo le explique es a la ligera para que logre lo que usted necesita, pero no es lo correcto, eso lo aclaro abajo de mi ejemplo

en el ejemplo que le di da error por que se me escapo un parámetro no va el UTF-8

https://www.php.net/manual/es/function.strip-tags.php

los demás errores se producen por el primero, asi que quite el uft-8 y dejelo así:

cambie esto:
'images/' .strip_tags($name, ENT_QUOTES, 'UTF-8')

por esto:
'images/' .strip_tags($name)

Saludos
__________________
Es duro fracasar en algo, pero es mucho peor no haberlo intentado. - Si crees todo lo que lees, mejor no leas -

Etiquetas: mensaje, mensajes
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 02:24.