elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


  Mostrar Mensajes
Páginas: 1 2 3 4 5 6 7 8 9 10 11 12 [13] 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 ... 75
121  Programación / PHP / Re: como aliviar la carga del servidor con muchos datos y requests en: 6 Junio 2016, 01:43 am
Hmm pero eso no es solo si tienes la opción server-side activada? He visto ejemplos en los que se le pasa un objeto con datos (normalmente json) y DT se encarga de todo en el cliente. Es lo mismo si los datos están en una tabla, se hace un select, y se envian todos los datos a DT.

Citar
Y lo de cachear las consultas no te lo recomiendo para nada, porque limitarias el sistema a un solo usuario.

No entiendo a que te refieres con eso? Como se va limitar a un solo usuario?

He estado haciendo pruebas en dos tablas distintas: una tabla normal que recibe todos los datos en la primera petición y he estado viendo el monitor de red (de las herramientas de firefox) y no veo ninguna petición extra a parte de la primera cuando filtro, cambio de pagina, ordeno columnas, etc...

Sin embargo en otra tabla tengo dos botones que actuan como filtros, estos botones si que envian una petición que lo que hacen es cambiar la consulta a la db y por lo tanto devuelve distintos datos (filtrados). Esta tabla si que hace un request cada vez que le doy a uno de los dos botones custom que tengo creados. Pero no cuando quiero ver/filtrar/ordenar los datos que ya tengo cacheados en el cliente.

La primera tabla recibe datos en json de apenas 5.6 KB (algo insignificante) y son 3 páginas de 10 resultados. Serian menos de 20KB 100 resultados. 500 resultados serian apenas 100KB. El cliente puede manejar esa insignificante cantidad de datos perfectamente y el servidor tambien debería ser capaz de servir eso a varios usuarios a la vez sin problemas.

Esta claro que depende de lo que se quiera hacer es mejor usar server-side o cliente-side para manejar datos. No soy ningún experto en este tema, pero lo que digo tiene bastante lógica, ¿no?

Por favor, explica un poco mejor por que piensas que no es buena idea hacer esto. Gracias!
122  Programación / Desarrollo Web / Re: Ejecutar funcion php desde botón "onclick" en: 5 Junio 2016, 21:27 pm
Incluiste la libreria jquery verdad?  ;D Como no dijiste si ya lo estás usando pues por la duda lo pregunto.

Haz un alert al id y comprueba si se muestra el numero. Si eso está bien, comprueba la variable de php y por último solo quedaría comprobar la query a mysql, correla desde la consola o desde el phpmyadmin y mira ver si se ejecuta.

Todo parece estar en orden en el script, a mí por lo menos me funciona id = self.data().id; https://jsfiddle.net/90vr9zma/


EDITO: Ah ya vi un fallo (a menos que ya lo hayas visto y cambiado): El nombre del id de <a id="boton"> pero en el script puse $('#borrar'); Mira a ver si era eso  :P
123  Programación / Desarrollo Web / Re: Ejecutar funcion php desde botón "onclick" en: 5 Junio 2016, 05:47 am
Te estás liando con lo de dentro de php y html. Es todo lo mismo: El output de php y html. Y el manejo de datos en el server (mediante php) es otra cosa. Espero que se entienda.

Un consejo, si estás empezando a aprender programación php, no lo hagas con funciones obsoletas, ya que en la ultima versión fueron eliminadas (incluida la api mysql y todas sus funciones). Como mínimo usa mysqli con sentencias preparadas que añaden un mínimo de seguridad "out of the box".

No es necesario usar ajax, puedes usar el evento submit normal. Todo depende de como lo quieras hacer. Pero si es un boton para eliminar algo si, lo más normal es ajax en estos casos.

Si vas a usar ajax hazlo con jQuery ya que te ahorra mucho tiempo y es muchisimo más facil de usar que javascript vanilla. También te sirve para el resto de tus scripts.

Pon esto en tu archivo scripts.js o crealo:

Código
  1. $(function () {
  2.    $('#borrar').on('click', function () {
  3.        var id = $(this).data().id;
  4.        $.post( '/tu_archivo.php', { id: id } );
  5.    });
  6. });

Dentro de $(function () {}; puedes poner todos tus scripts jquery.

Y el archivo php, le he hecho unos arreglos, espero que no te importe  ;)

Código
  1. include('conexion.php');
  2.  
  3. $borrar = isset($_POST['id']) ? (int) $_POST['id'] : 0;
  4.  
  5. if ($borrar > 0) {
  6.    mysql_query('DELETE FROM prueba1 WHERE id = ' . $borrar);
  7. }
  8.  
  9. //consulta todos los videos
  10. $sql = mysql_query('SELECT * FROM prueba1', $con);
  11.  
  12. //muestra los datos consultados
  13. $filas = mysql_num_rows($sql);
  14.  
  15. if ($filas === 0){
  16.    echo 'No hay programación';
  17. }
  18. else {
  19.  
  20.    while ($row = mysql_fetch_array($sql)) {
  21.        echo '<p>', $row['video'], ' - ', $row['dia'], ' - ', $row['hora'], ' - ', $row['duracion'], '</p><br /><a id="boton" data-id="', $row['id'], '" href="#">Borrar</a><br /><br />';
  22.    }
  23. }

Explico un poco lo que quieres hacer, que es algo muy sencillo:

Para conseguir esto usando jquery ajax, se crea un script que escuche el evento click de tu elemento <a>, coger la id del atributo data-id y finalmente hacer la petición a tu archivo php por post, enviando la variable id. El archivo php está esperando una variable id a través de post, cuando llegue simplemente manda una query a mysql solicitando la eliminación del registro indicado.

No te olvides de dejar de usar php mysql y empezar a usar php mysqli con sentencias preparadas.  :rolleyes:

Otra vez editando ;D Se me olvidó mencionarte como hacer para eliminar del DOM:

Extendiendo jquery post con done():

Código
  1. $('#borrar').on('click', function () {
  2.    var self = $(this),
  3.        id = self.data().id;
  4.  
  5.    $.post( '/tu_archivo.php', { id: id } )
  6.        .done(function() {
  7.            self.prev('p').remove();
  8.            self.remove();
  9.        });
  10. });

Esto solo vale para el html actual, si cambias el html también tendrás cambiar tu script. Sería más facil si metieras <p> y <a> dentro de un <div>. Así simplemente haces:

Código
  1. self.parent().remove();

Así si quieres mejorar tu diseño, no tendrás que cambiar tu script. A menos que pongas <a> dentro de otro elemento  ;D
124  Programación / PHP / Re: subida de archivos con nombre numerico del array en: 4 Junio 2016, 06:22 am
Ah claro ya entiendo, si tiene sentido.

Gracias!
125  Programación / PHP / Re: como aliviar la carga del servidor con muchos datos y requests en: 4 Junio 2016, 06:14 am
Las clases ya las ví pero la verdad es que prefiero usar mi propio código (me gusta que el código sea familiar).

Aunque si que le dí una oportunidad a usar server-side, que básicamente es calcular el número de resultados, el número de páginas, y coger solamente el número de elementos de la página actual. El problema de esto creo que es que el buscador solo buscaría entre los elementos de la página actual y no todos (perder esta característica es algo a tener en cuenta). Por eso decidí mandarlo todo.

Se me olvido mencionar que no era toda la tabla, si no todas las filas que pertenecen al usuario. Y la verdad dudo mucho que nadie llegue a tener 500 filas. Además, ¿cuanto puede pesar la información de una sola fila? Unos cuantos bytes? A ojo he calculado entre 70-100 bytes, son simples palabras, ¿cuantas filas así podría manejar un cliente?

Teniendo en cuenta los datos anteriores 500 filas serían apenas 50 kb.... Ahora no me lo creo ni yo, confirma si esto es cierto  :laugh:

Hay otra zona de la web en la que si tengo que limitar las filas por página, ya que se incluye una imagen y unas cuantas columnas.

Luego habría que ver cuantos usuarios hay online accediendo a la misma zona y pidiendo cada uno sus datos. Pero para este proyecto pienso contratar un dedicado, asi que no creo que vaya a tener problemas.

Entonces, ¿crees que vale la pena hacer algo como cachear o simplemente lo dejo como está?
126  Programación / PHP / Re: subida de archivos con nombre numerico del array en: 4 Junio 2016, 05:29 am
Vale pero md5_file se lo hago al tmp_name y al nombre? Son dos cosas distintas. No sería md5 a name y md5_file a tmp_name?
127  Programación / PHP / Re: subida de archivos con nombre numerico del array en: 3 Junio 2016, 18:38 pm
Si, ya habia leido en alguna parte lo de usar md5, mientras sea una opción segura. La única pega es que el output es un poco largo para mi gusto, pero bueno supongo que no es relevante (yo y mis manías  :P)

El array $_FILES con más de un archivo tiene la siguiente estructura:

Código
  1. array(1) {
  2.  ["file"]=>
  3.  array(5) {
  4.    ["name"]=>
  5.    array(3) {
  6.      [0]=>
  7.      string(6) "01.jpg"
  8.      [1]=>
  9.      string(6) "01.jpg"
  10.      [2]=>
  11.      string(6) "01.jpg"
  12.    }
  13.    ["type"]=>
  14.    array(3) {
  15.      [0]=>
  16.      string(10) "image/jpeg"
  17.      [1]=>
  18.      string(10) "image/jpeg"
  19.      [2]=>
  20.      string(10) "image/jpeg"
  21.    }
  22.    ["tmp_name"]=>
  23.    array(3) {
  24.      [0]=>
  25.      string(14) "/tmp/phpRBV68j"
  26.      [1]=>
  27.      string(14) "/tmp/phpjuvvG9"
  28.      [2]=>
  29.      string(14) "/tmp/phpJpxmoZ"
  30.    }
  31.    ["error"]=>
  32.    array(3) {
  33.      [0]=>
  34.      int(0)
  35.      [1]=>
  36.      int(0)
  37.      [2]=>
  38.      int(0)
  39.    }
  40.    ["size"]=>
  41.    array(3) {
  42.      [0]=>
  43.      int(74357)
  44.      [1]=>
  45.      int(74357)
  46.      [2]=>
  47.      int(74357)
  48.    }
  49.  }
  50. }

Si, recibe varios a la vez.Estoy usando el plugin dropzone con la opción de multiples archivos.
128  Programación / PHP / subida de archivos con nombre numerico del array en: 3 Junio 2016, 16:59 pm
Estoy teniendo problemas para extender un código existente que guarda imágenes.

Los usuarios pueden subir imagenes y también tienen que poder actualizarlas (eliminar y subir nuevas). Lo primero es lo que tengo terminado, pero lo segundo tengo dudas ya que no quiero guardar las imagenes con su nombre original y en su lugar uso el número del array:

Código
  1. $tmp_name   = $_FILES['file']['tmp_name'];
  2.  
  3. for($i = 0; $i < count($tmp_name); $i++) {
  4.  
  5.    $img_name   = '/' . ($i + 1) . '.jpg';
  6.  
  7. }

Por lo tanto si uso este código la segunda vez que suba imágenes, las que ya existen serán reemplazadas. No me importa si el orden se pierde (pero si es posible prefiero algo limpio):

1.jpg, 2.jpg, 3.jpg ---> 1.jpg, 2.jpg, 3.jpg, 4.jpg, 5.jpg

¿Conoceis alguna manera más limpia de hacer esto? No me importa el nombre que tengan, no es de ningún uso.

Podría usar la hora de subida, algo así, pero me gustaría saber vuestras opiniones y como lo haríais vosotros.

Esta es la función completa, ¿podria mejorarse para que fuera más eficiente?

Código
  1. public function UploadImages($files, $test = '') {
  2.  
  3.    $imagesPath     = '../static.website.com/images/property/' . $this->id;
  4.    $thumbnailsPath = '../static.website.com/images/property/' . $this->id . '/thumbnails';
  5.  
  6.    $log = 'Logging Images Upload:' . "\n\n";
  7.    $upload_err = FALSE;
  8.  
  9.    if ($test == 'new') {
  10.  
  11.        // Will be any problem with $thumbnailsPath?
  12.        if (!mkdir($imagesPath) && !mkdir($thumbnailsPath)) {
  13.  
  14.            return array($upload_err, 'Upload Error: mkdir().');
  15.  
  16.        }
  17.  
  18.    }
  19.  
  20.    $imagesPath     = realpath($imagesPath);
  21.    $thumbnailsPath = realpath($thumbnailsPath);
  22.  
  23.    // Is it ok to only check for the child directory?
  24.    if ( FALSE !== $thumbnailsPath && is_dir($thumbnailsPath) ) {
  25.  
  26.        if (isset($files['file'])) {
  27.  
  28.            $tmp_name   = $files['file']['tmp_name'];
  29.            $img_size   = $files['file']['size'];
  30.  
  31.            // At least 1 image
  32.            if ($test == 'new' && $tmp_name[0] == '') {
  33.  
  34.                $upload_err = TRUE;
  35.                return array($upload_err, '¡La primera imagen es necesaria!');
  36.  
  37.            }
  38.  
  39.            for($i = 0; $i < count($tmp_name); $i++) {
  40.  
  41.                if ($tmp_name[$i] != '') {
  42.  
  43.                    if ($img_size[$i] <= 7340032) {
  44.  
  45.                        $img_name       = '/' . ($i + 1) . '.jpg';
  46.                        $thumbnail_name = '/thumbnail_' . ($i + 1) . '.jpg';
  47.  
  48.                        list($width, $height) = getimagesize($tmp_name[$i]);
  49.  
  50.                        if ($width >= 1100 && $height >= 650) {
  51.  
  52.                            $img    = imagecreatefromjpeg($tmp_name[$i]);
  53.                            $img_p  = imagecreatetruecolor(1100, 650);
  54.                            imagecopyresampled($img_p, $img, 0, 0, 0, 0, 1100, 650, $width, $height);
  55.                            imagedestroy($img);
  56.                            $img_t  = imagecreatetruecolor(180, 180);
  57.                            imagecopyresampled($img_t, $img_p, 0, 0, 0, 0, 180, 180, 1100, 650);
  58.  
  59.                            if (!imagejpeg($img_p, $imagesPath . $img_name, 70) || !imagejpeg($img_t, $thumbnailsPath . $thumbnail_name, 70)) {
  60.  
  61.                                $upload_err = TRUE;
  62.                                return array($upload_err, 'Error al subir la imagen (' . $files['file']['name'][$i] . ')');
  63.  
  64.                            } else $log .= 'IMG: ' . $img_name . ' (original name: ' . $files['file']['name'][$i] . ') uploaded successfully.' . "\n";
  65.  
  66.                            imagedestroy($img_p);
  67.                            imagedestroy($img_t);
  68.  
  69.                        } else {
  70.                            $upload_err = TRUE;
  71.                            return array($upload_err, 'La imagen: ' . $files['file']['name'][$i] . ' debe tener como mínimo 1100px de ancho y 650px de alto.');
  72.                        }
  73.                    } else {
  74.                        $upload_err = TRUE;
  75.                        return array($upload_err, 'La imagen (' . $files['file']['name'][$i] . ') pesa más de 7 MB.');
  76.                    }
  77.                }
  78.            }
  79.        } else return array($upload_err, '$files[\'file\'] is not set:' . "\n" . var_dump($files['file']) . "\n" . 'Property ID: ' . $this->id);
  80.    } else return array($upload_err, '$thumbnailsPath is false and/or not a dir: ' . $thumbnailsPath . '". Property ID: ' . $this->id);
  81.  
  82.    return $log;
  83.  
  84. }

Cualquier surgerencia es bienvenida. Gracias!
129  Programación / PHP / Re: Logins seguros en: 31 Mayo 2016, 14:34 pm
En el siguiente articulo se pueden encontrar una serie de pasos a seguir para almacenar las contraseñas de manera segura, es algo avanzado y requiere un mínimo de conocimientos.

Pero creo que es igual o más importante el como se envian:

A mí por ejemplo no me gusta que las contraseñas salgan del cliente en texto plano, por eso las hasheo con javascript. Ya sé que hay tablas, por eso, el hash también se puede saltear, aunque estoy pensando en una una manera segura de conseguir hacer esto (de que no se sepa el salt que uso en el cliente). Cuanto más largo el salt, más cuesta saltear las tablas (yo lo hasheo así ambos, hash y salt, tienen 128 caracteres).

Una vez solucionado el anterior problema, ya nadie conoceria la contraseña del usuario, pero, en caso de robarle el hash podria loguear... Este es el segundo problema que surge a la hora de proteger las contraseñas. Y el primero en caso de no hashear en el cliente. No tengo en cuenta ssl porque esto es un "worst-case scenario"  ;D.

Se aceptan sugerencias  :rolleyes:
130  Programación / PHP / Re: ajax recibir daros en: 29 Mayo 2016, 20:36 pm
A ver por partes:

Si el script que he hecho no funcionase bien, no funcionaria en ninguna parte, sin embargo está funcionando (menos lo del scroll) perfectamente:

- La función se activa ya sea cuando le das a intro o click al boton <a>. En ningún otro momento se debería activar (a menos que la llames desde otra parte).
- Se puede comprobar en la demo.

¿Por qué dices entonces que no funciona bien? Si no está funcionando en tu página, eso es algo a parte y no es culpa mia. Habrá que encontrar el fallo.

Si cada vez que entras al chat se envia un mensaje vacio, revisa bien que estás haciendo porque el código que yo he escrito no hace nada de eso.

El problema del scroll ya te lo dije en tu otra pregunta y que esperes a que alguien sepa como arreglarlo. No es necesario que me lo recuerdes...

Ahora hay que tratar de localizar que es lo que está provocando que al entrar al chat se envie un mensaje en vacio.

Para no permitir enviar mensajes vacios:

Código
  1. if (mensaje == '') {
  2.    alert('Debes escribir un mensaje!');
  3.    return false;
  4. }

En el link a la demo de esta respuesta se incluye esto, incluyelo en la función y mira si se sigue enviando el mensaje en blanco. Si sigue ocurriendo entonces es algo totalmente ajeno a la función, pero si ya no ocurre entonces quiere decir que en algún lado de tu página estás llamando a la función myFunction().

Haz un poco de debug y descubrirás que está ocurriendo en tu página. Si no logras descubrir donde está el fallo, muestranos todo el código y se intentará localizar el fallo y solucionarlo.


Edito: Se me olvido comentarte: A parte de la comprobación de mensaje vacio también hay otro cambio al actualizar el div, en la demo lo verás, cambia la linea que tienes por $('#final').before( content ); Esto lo que hace es mostrar los mensajes en el orden correcto.
Páginas: 1 2 3 4 5 6 7 8 9 10 11 12 [13] 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 ... 75
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines