Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - Leguim

#1
tengo dos inputs, email y contraseña... el punto es que apenas carga la página ya me deja estos inputs con datos y no quiero permitir eso.. hay algo como autocomplete="off"? pero para estos casos donde ya al cargar tiene los datos escritos ...
#2
Hola,

en un tema de hace un par de meses había publicado https://foro.elhacker.net/php/pregunta_comportamiento_de_las_session-t511300.0.html;msg2246971#msg2246971 para que vayan entendiendo el contexto.

El punto es que al usar session_regenerate_id(); me sale "Session ID cannot be regenerated after headers have already been sent"

Lo estoy usando en el login:

Código (php) [Seleccionar]

                 


Buscando soluciones terminé más confundido que al principio...
#3
Hola,

bueno estoy teniendo un problema medio raro que la verdad no estoy seguro de si es un problema o algo normal. Por lo menos en las aplicaciones web más conocidas no les pasa.

Cuando inicio sesión ingresando a "mipagina.com" se guarda la sesión y todo bien.. me redirige a donde me tiene que mandar y me bloquea aquellas partes donde se necesita no tener la sesión iniciada.

Ahora, escribe en la url "https://www.mipagina.com" y no tiene la sesión que se generó anteriormente, es como si fuera una "ventana de incógnito" en cuanto al tratamiento que se le da a la sesión. En esta url me deja volver a iniciar sesión y puedo hacerlo con otra cuenta exactamente igual que en las ventanas de incógnito.

¿Alguna idea?
#4
Es decir:
Código (php) [Seleccionar]

function F($dato)
{
      if($dato viene de una variable)
      {
             echo 'el parámetro viene de una variable';
      }
      else
      {
            echo 'el parámetro viene de una constante';
      }
}


Ejecuciones:
Código (php) [Seleccionar]

F(700); // el parámetro viene de una constante

$variable = 700;
F($variable); // el parámetro viene de una variable


¿Cómo harían esto?
#5
Hola,

tengo un campo "id_admin" (tabla x) que está referenciado con un campo "id_usuario" (tabla de usuarios)

Pero id_admin admite dos tipos de valores, podría tener el valor NULL o el valor de id_usuario, entonces tengo la siguiente consulta:
Código (php) [Seleccionar]

SELECT X.campo_1, X.id_admin, X.campo_3, U.id_usuario, U.nombre, U.avatar FROM tabla_x X INNER JOIN usuarios U ON X.id_admin = U.id_usuario;


Justo en donde dice ON X.id_admin = U.id_usuario yo quería saber si hay forma de que haga esa referencia INNER JOIN si y sólo si el id_admin is not null.
#6
Hola,

estaba tratando de hacer esto:
Código (javascript) [Seleccionar]

let string = 'form_x.input_1.value, form_x.input_2.value, form_x.input_3.value, form_x.input_4.value';

// si yo hago..
eval([string]); // esto va a crear un arreglo donde solamente agregará el último elemento, es decir el valor del input 4... Los demás no me aparecen.
[code]
[/code]
#7
¿Está mal esta forma de llamar a los archivos que están alojados en mi propio servidor?

Código (php) [Seleccionar]

define('HTTP_PROTOCOL', 'http'); // http protocol
define('ROOT_URL', (HTTP_PROTOCOL).'://'.($_SERVER['HTTP_HOST']).'/myApp'); // donde myApp es el nombre x de la aplicación


Entonces en mi html yo llamo así..
Código (php) [Seleccionar]

// como llamo a un archivo .css
<link rel="stylesheet" type="text/css" href="<?php echo(ROOT_URL); ?>/css/fonts.css<?php echo(VERSION_LAST); ?>">

// como llamo a un script js
<script type="text/javascript" src="<?php echo(ROOT_URL); ?>/javascript/highcharts.js<?php echo(VERSION_LAST); ?>"></script>

// como llamo a una imagen
<img src="<?php echo(ROOT_URL); ?>/images/myPhoto.jpg<?php echo(VERSION_LAST); ?>">


Hay constantes que ya tiene listas PHP creo que una es __DIR__ o algo así, el punto es que estaba pensando y una cosa es acceder por directorio pero yo estoy accediendo por una URL, quizás sea menos óptimo hacerlo como hago yo.

¿Qué les parece?

#8
¿Por qué si yo uso ratchet tengo que usar un vps en producción?
EDIT: Me refiero por ejemplo en el caso de node.js, ya si usas node.js necesitas un vps.. básicamente la pregunta es esa... por qué al usar estas "extensiones" me obligan a tener que usar un vps y no un hosting cualquiera.
#9
Básicamente te deja una carpeta en la aplicación que se llama "vendor" con una lista de archivos donde cualquiera podría acceder a ellos mediante la url, y ver lo que contienen estos archivos.

¿Algo de qué preocuparme?
#10
Estaba ejecutando (primera vez que hago esto) un archivo php desde el CMD

"cd: C:\xampp\php"
"php C:\xampp\daemons\socket_server.php"

Pero ya varias veces se me está borrando de la nada y cuando trato de crearlo otra vez me dice que necesito permisos, solamente me deja crear el archivo si le pongo otro nombre.

¿Se debe a algo que tuviera el código .php? (si es necesario lo paso)


Encontré a otra persona que tuvo este problema pero solamente recibió una respuesta y esa respuesta decía que podía ser el anti virus pero yo ya lo desactivé y me sigue pasando.
#11
Hola, estoy teniendo problemas para pasar de minusculas a mayúsculas con javascript pero usando expresión regular.

Más que nada lo que me complica es .replace('x') porque nosé como hago que x sea la mayúscula de z letra.
#12
Hola

estaba viendo la lista de los keyCode y según pude ver "delete" es 46 pero cuando lo uso no me lo toma, estoy tratando de borrar un caracter en un input.

Ahora hice un alert y me manda que delete es 8.

Entonces?
Delete es 8 o 46?
#13
Hola, soy un poco nuevo en esto de las expresiones regulares pero me pasa que estaría necesitando una expresión regular para reemplazar las comillas dobles "x" por "x"
y 'y' por 'y'.

Ahora esto de reemplazar ya lo tenía con:
Código (php) [Seleccionar]

$result = str_replace("'", "'", $data);
$result = str_replace('"', '"', $result);


Lo que estoy buscando es reemplazar (preg_replace) pero de una forma más elegante, quiero que cuando tenga 'X' me reemplace 'X' y cuando tenga "Y" me reemplace "Y" pero con el código que tengo ahora lo único que hace es... 'X' me reemplaza 'X', "Y" me reemplaza "Y".

Hice la siguiente expresión regular pero no me convence del todo porque CREO me salió a la primera en javascript.

Código (javascript) [Seleccionar]

/'+[\A-Z]+'/gi


¿Cómo lo harían en PHP?  :huh:
#14
Hola,

estoy teniendo problemas con lo siguiente:
Código (php) [Seleccionar]

$text = Limpiar($_POST['input_text']); // limpio el dato (escapo html)
echo '<br>'.$text.'<br>';

?>
<h3><?php echo($text); ?></h3>
<textarea><?php echo($text); ?></textarea>
<script type="text/javascript">
alert('<?php echo($text); ?>'); // acá vienen los problemas
</script>
<?php


Si el texto fuera: "mi texto ' es este" esto me daría problemas en la línea de alert(); ya que no se está escapando las comillas simples, por lo que estaba pensando que entonces tendría que hacer uso de addslashes para escapar estas comillas simples o dobles si lo fueran cuando se va a poner como parametro de alguna función de javascript.

No estoy seguro si esta es una manera efectiva, estuve viendo algunos vídeos pero lo que ellos hacen es usar addslashes antes de guardar ese dato a la bd. El problema que encuentro con esto es que cada vez que yo vaya a querer mostrar esa cadena por pantalla me va a salir... "mi texto \' es este".

Y tendría que usar stripslashes (para sacar los escapes a las comillas) cada que yo quiero usar ese dato mientras no sea en una función javascript como parámetro.

Esto me parece muy tedioso que a cada rato tenga que estar usando stripslashes, redondeando no estoy seguro si el enfoque correcto es este o debería sólo usar addslashes cuando ese dato se va a usar como parámetro en una función javascript y nada más.

Estoy algo perdido.
#15
Hola!

Tengo un archivo .php el cual contiene "código" html el cuál será expulsado a un elemento x.

Código (javascript) [Seleccionar]

$.ajax// blah blah blah

.done(function(results) // al momento de finalizar la ejecución del archivo .php
{
       $('#elemento').html(results);
})


Ahora yo quisiera que sólo ejecute .html en el caso en que results tenga datos, no esté vacio. Hice esto pero lo percibo un poco más lento a la ejecución:

Código (javascript) [Seleccionar]

$.ajax// blah blah blah

.done(function(results) // al momento de finalizar la ejecución del archivo .php
{
       if($.trim(results))
       {
               $('#elemento').html(results);
       }
})


Muchas gracias.
#16
Hola,

me refiero a "cifrar" el código fuente, aquel que los usuarios pueden visualizar con Click derecho -> ver código fuente.

Si veo en facebook, el nombre de las clases son cualquier cosa, tienen nombres irrazonables.
#17
Cuando uso .prepend(); para agregar un fragmento de HTML lo que pasa es que me modifica las posiciones del elemento.

Es decir:

HTML
Código (html) [Seleccionar]

<div id="elementos"></div>


javascript/JQUERY
Código (javascript) [Seleccionar]

$('#elementos').prepend('<div class="elemento">ELEMENTO 1</div>'); // esperaría que esto tuviera la posición 0

$('#elementos').prepend('<div class="elemento">ELEMENTO 2</div>'); // esperaría que esto tuviera la posición 1

$('#elementos').prepend('<div class="elemento">ELEMENTO 3</div>'); // esperaría que esto tuviera la posición 2


Pero si accedo a los elementos ocurre que va desde el 0 hasta el 2 y no desde el 2 hasta el 0, entonces no hay manera de evitar que vaya agregando estas posiciones de menor a mayor y sí de mayor a menor?

Código (javascript) [Seleccionar]

document.querySelectorAll('.elemento')[0].style.opacity = 0.5; // esperaría que modifique al ELEMENTO 1 pero modificará al ELEMENTO 3
#18
Hola, tengo  una idea de lo que es un  socket a nivel teórico, pero me está costando mucho buscar información sobre la aplicación práctica del mismo. Más todavía si es con PHP, todo es nosé js socket io pero yo quiero aprender websockets con PHP.

Lo mismo para poder crear un servidor de websockets propio, si ustedes saben de estos temas me podrían decir cómo fue que aprendieron. Quizás nosé buscar correctamente estos temas..

EDIT: No me acordaba que ya había hecho una pregunta como esta: https://foro.elhacker.net/desarrollo_web/pregunta_websockets-t501829.0.html

Nose si deba cerrar este tema Ya que si quieren responder cualquier dato extra me sirve.
#19
Lo ideal sería una función pero voy a tratar de hacerlo yo, más que nada no sé como puedo a partir de un número...

Código (php) [Seleccionar]

$x = 1700;


...obtener x cantidad de los primeros dígitos... por ejemplo si yo quiero obtener los primeros 1,2,3, n digitos de X numero.

Le digo que quiero obtener los primeros 2 digitos de ese numero:

Código (php) [Seleccionar]

$x = 1700; // devolvería 17


Yo sé que me dirían que use substr_ o mb_substr (para multy bites) pero esto sería un "parche" porque si ese numero es negativo o tiene decimales traerían problemas y no sería preciso.

¿Alguna idea?
#20
En relación a su tiempo de vida las sesiones en php me están dando un problema y es que a veces de la nada me cierra la sesión y me manda para el index.

Código (php) [Seleccionar]

ini_set('session.cookie_lifetime', 43200); // (12 hours)
ini_set('session.gc_maxlifetime', 43200); // (12 hours)


¿Será que el comportamiento sería que cuando una $_SESSION es inicializada desde ese punto hasta 12 horas INDEPENDIENTEMENTE de si cierro sesión va a esperar 12 horas para destruirla y por eso me está sacando sin que yo le diga? Pensaba que al cerrar sesión ese tiempo de vida quedaba inutilizable porque ya cerraba sesión, se eliminaban las sesiones.

En la parte del código cuando hago logout tengo unset($_SESSION['x']); y más abajo session_destroy();

EDIT: Se me pasó que esto va al foro de PHP
#21
Hola,

Digamos que las formas tradicionales como .HTML de jquery lo que se requiera es en formato cadena por así decirlo el "código" HTML.

Código (javascript) [Seleccionar]

$('#elemento').html('<h1>titular</h1>');


Pero lo que busco es que no necesite insertar ese "código" HTML entre comillas (formato cadena) sino como si fuera HTML "puro" por así decirle. Algo como esto:

Código (javascript) [Seleccionar]

$('#elemento').html(<h1>titular</h1>
<!-- Muchos más "códigos" HTML -->
);
#22
Básicamente una lista de funciones que pueden insertar HTML, como podrían ser .html de jQuery, .append de jquery y el método .innerHTML de javascript puro.. cual otras hay?
#23
Básicamente tengo el siguiente código que uso pero para codificar:
Código (javascript) [Seleccionar]

        function Escape_HTML(string)
{
var map = {
    '&': '&amp;',
    '<': '&lt;',
    '>': '&gt;',
    '"': '&quot;',
    "'": '&#039;'
  };

  return string.replace(/[&<>"']/g, function(m) { return map[m]; });
}


¿Cómo podría hacer el decode? estuve buscando pero alguno de los pocos métodos que encuentro son un choclo que me parece hasta innecesario y otros te hacen crear un elemento en el DOM.
#24
Digamos las técnicas de limpieza que son usadas para evitar ataques XSS, ¿sería conveniente usarlas tanto cuando se obtienen los datos de un formulario y hay que guardarlos en la base de datos como también cuando esos datos que están en la base de datos son solicitados y mostrados (echo)?

#25
Because a cookie's SameSite attribute was not set or is invalid, it defaults to SameSite=Lax, which prevents the cookie from being sent in a cross-site request. This behavior protects user data from accidentally leaking to third parties and cross-site request forgery.
Resolve this issue by updating the attributes of the cookie:
Specify SameSite=None and Secure if the cookie should be sent in cross-site requests. This enables third-party use.
Specify SameSite=Strict or SameSite=Lax if the cookie should not be sent in cross-site requests.

"Debido a que el atributo SameSite de una cookie no se configuró o no es válido, su valor predeterminado es SameSite = Lax, lo que evita que la cookie se envíe en una solicitud entre sitios. Este comportamiento protege los datos del usuario contra la filtración accidental a terceros y la falsificación de solicitudes entre sitios.
Resuelva este problema actualizando los atributos de la cookie:
Especifique SameSite = None y Secure si la cookie debe enviarse en solicitudes entre sitios. Esto permite el uso de terceros.
Especifique SameSite = Strict o SameSite = Lax si la cookie no debe enviarse en solicitudes entre sitios. "

Por ahí leí que no es un error pero es para optimizar el sitio, como una recomendación...
#26
Hola, quería saber si un dominio está siendo utilizado pero no quiero ir a una página x en el que tenga que escribirlo para que después me lo diga (ya no confío en estas "cutreadas").

Gracias.
#27
Hola, hace poco publiqué un tema para optimizar la tabla de notificaciones de la siguiente manera: https://foro.elhacker.net/desarrollo_web/dilema_la_manera_mas_eficaz_y_optima-t510769.0.html

Básicamente lo que hace este sistema es preguntar si la cantidad de notificaciones del usuario es mayor a 50 y si ese es el caso entonces eliminará todas las notificaciones entre el rango LIMIT 50 (posición inicial, cuenta el cero), quantity (cantidad de registros que hay que tomar, sería N (infinito) hasta llegar abajo de todo)

Ahora ya estoy escribiendo pero estoy teniendo un problema que me tiene un poco perdido:
$quantity_not; (cantidad total de notificaciones que tiene el usuario x)
:fecha_restada; (la fecha de hoy - 7 días)
unix_created; (fecha en que se creó este registro/notificación)

Código (php) [Seleccionar]

if($quantity_not > 50)
{
       $quantity = $quantity_not - 50; // cantidad de registros que tomará en LIMIT
       $consulta = $conexion->prepare('DELETE FROM notificaciones WHERE id_usuario = :id_usuario AND :fecha_restada >= unix_created ORDER BY id_notificacion DESC LIMIT 50, :quantity'); // en LIMIT no pongo 51 porque cuenta el cero también, por eso se pone 50
}


Pero esto va a tener un problema y es que el conjunto de datos que me va a devolver será en base a las 2 condiciones (id_usuario = :id_usuario) y (:fecha_restada >= unix_created) por tanto los rangos que se ponen en LIMIT 50, :quantity no va a iniciar en la notificación cuya posición es 50 (51 contando el cero) de forma global sino que será en la posición 50 (51 contando el cero) de aquellas que tengan ya la vigencia (:fecha_restada >= unix_created).

Por ahí no se me entendió muy bien.
Una solución que se me ocurre así rápido sería usar id inferior y id superior donde el id inferior será el id de notificación que tendrá en la posición 50 (51 contando el cero) pero solamente para la condición (id_usuario = :id_usuario) y después obtener el id superior (el id notificacion más antiguo)

En base a esas 2 id inferior y superior entonces poner:
Código (php) [Seleccionar]

if($quantity_not > 50)
{
       $consulta = $conexion->prepare('DELETE FROM notificaciones WHERE id_usuario = :id_usuario AND :fecha_restada >= unix_created AND (id_notificacion BETWEEN :ID_INFERIOR AND :ID_SUPERIOR) ORDER BY id_notificacion DESC');
}


Más que nada comento esto último para que se entienda mejor lo que quiero hacer, preferiblemente sin tener que llegar hacer esto de las id. Capas haya alguna palabra reservada o algo que no conozca.
Espero haberme dado a entender.
#28
Hola,

básicamente estaba por implementar un mini sistema que me permita optimizar una tabla de mi base de datos, hace ya un tiempo había hecho un tema en el foro sobre eso. La tabla es de notificaciones entonces cuando el usuario llegue a 51 notificaciones (o más) se evaluarían los registros (con registros me refiero a notificaciones) desde 51 hasta N (N es hasta las que tenga)
entonces aquellas notificaciones que tengan una vigencia de 7 días serán eliminadas.

Para que se entienda mejor, hice este dibujo:


El dilema, se me presentan 2 formas de poder hacer esto. La primer forma sería por medio de un algoritmo que se ejecutará cada vez que el usuario está por mirar sus notificaciones. La segunda forma sería con una consulta CRON.

Ahora en materia de que es más eficaz sería una consulta CRON que se ejecute cada 1 minuto, pero en materia de que es más óptimo (creo yo) sería con el primer método. No sé que opinen ustedes...
#29
Anda medio perdido esto porque muy poca veces me da este error pero generalmente no, así que está engualichado seguramente.

Código (php) [Seleccionar]

PHP Warning:  session_start(): open(C:\xampp\tmp\sess_48c6pila4324i7ldajcvd61dfc, O_RDWR) failed: Permission denied (13)


Código (php) [Seleccionar]

session_start();


Es raro, generalmente no me da problemas pero pocas veces sí.

Una aclaración al pasar y es que tengo PHP 7, todavía no actualicé a PHP 8. (antes no me daba este problema)
#30
Imaginemos un sistema para organizar competencias de X juego (algo como e-sports) y que se lucrara con eso, existe la posibilidad de alguna demanda de la empresa desarrolladora del juego?

No estoy muy al tanto de derecho y esas cosas.
#31
Software / Sublime text 4
1 Junio 2021, 08:12 AM
Hola, alguno sabe si sublime text 4 es "gratis" como en sublime text, quiero decir.. escuché que te dan un periodo de prueba y ya después tenés que pagar. A diferencia, sublime text 3 lo podes usar siempre pero si no pagaste, periódicamente te aparece una alerta que la podes minimizar e igualmente seguir usando el editor. Sublime text 4 también es así?
#32
tengo el campo 'id_x' que es un índice (tiene la llave plateada), ese campo en algún registro puede tomar el valor null?
#33
Hola!
Básicamente estoy escribiendo una consulta donde va a eliminar registros que ya son muy antiguos pero estoy teniendo problemas para que además elimine otros registros (están en otras tablas) que están relacionados de alguna manera.

Hice este dibujo para que me entiendan mejor:


Sino me pude dar a entender lo puedo volver a explicar, es un poco engorroso..
#34
Hola,

No sabía donde era mejor este tema, si en la sección base de datos o en esta sección de PHP.
Estoy no teniendo problemas pero sí dudas, hasta ahora todo este sistema funciona excelente. Lo que me permite hacer es lo siguiente, desbloquear usuarios que fueron bloqueados de forma temporal hasta x fecha, marcar como desconectados usuarios que ya no hicieron acciones en la aplicación por un periodo de x minutos, eliminar algunos registros de x tabla que ya son demasiado viejos, etc.

Mi función para marcar como desconectados a usuarios que no hicieron acciones por x periodo de minutos por lo que se los considera desconectados:
Código (php) [Seleccionar]

static function Marcar_Desconectados()
{
$unix_grace = strtotime('-x minutes', time());
$con = Conectar_BD(nombre_usuario, contrasena);
$query = $con->prepare('UPDATE users SET connected = 0 WHERE connected = 1 AND :unix_grace >= unix_activity');
$query->bindValue(':unix_grace', $unix_grace, PDO::PARAM_INT);
$query->execute();
}


Cada vez que se realice una petición al servidor, se envía un formulario, se carga una página (por ejemplo se ingresa a index.php), se ejecuta un código php con ajax, etc.. se va a ejecutar la funcion..

Código (php) [Seleccionar]

x::Marcar_Desconectados();


Realmente no sé si es óptimo considerando muchos usuarios en esta aplicación web. Aunque si eventualmente no hay usuarios que marcar como desconectados, no hay registros viejos que eliminar, no hay usuarios bloqueados temporalmente que desbloquear, es decir ejecutaría estas consultas pero no modificaría nada ni haría ninguna accion DELETE, UPDATE, etcétera.

Aunque estaría haciendo las consultas igual, por eso no estoy seguro.
#35
Básicamente tengo una tabla en mi base de datos que almacenará todas las notificaciones que pudiera llegar a tener cada usuario.
Se me ocurrió una idea para optimizar esta tabla en específico que sería que al llegar a las 1.000 notificaciones ya no pueda seguir almacenando más por lo menos para ese usuario.

Quiero decir, tengo 1.000 notificaciones y cuando se agregue una nueva notificación se va a eliminar la más vieja. Seguiremos con 1.000 notificaciones, independientemente si estén vistas o no.

Personalmente me parece un poco exagerado 1.000 registros, yo haría 300 o 150. ¿Qué opinan?
#36
Es algo trivial pero estoy teniendo problemas, no encuentro una función para saber si es ENTERO o FLOTANTE un número.
Estuve viendo pero no la encuentro, ya sé que existe is_int e is_float pero quiero que sea como is_numeric.

Quiero decir, is_numeric si le das como valor '3500' (cadena pero con numero dentro) devolverá true pero si pongo is_float('3500.78') esto me va a dar false porque no interpreta el numero que está en la cadena. Lo mismo pasa si fuera is_int('3500').

Pasa que como ya sabrán todo los datos que envía un formulario los devuelve en cadena.
¿No hay una función para eso?

EDIT:
Se me ocurrió algo "cutre" por así decirlo, y es que podría preguntar si dicha cadena tiene punto y si tiene punto quiere decir que en principio es un decimal entonces uso floatval('x');

IS_NUMERIC(x)
      TIENE_PUNTO(x)
             FLOATVAL(x)
      NO TIENE PUNTO
             INTVAL(x)

Por ahora tengo esto.
#37
Estoy mejorando todas mis consultas, antes usaba este método:

Código anterior (siempre use esto y funciona correctamente), como "dato curioso" en esta consulta sino concateno '.($by).' no me devuelve datos, es decir que no puedo usar :by en la consulta. No entiendo por qué (si me pudieran ayudar con eso también)
Código (php) [Seleccionar]

$con = Connection(USERNAME, PASSWORD);
$query = $con->prepare('SELECT id_album FROM albums WHERE '.($by).' = :by_value');
$query->execute(array(':by_value' => $by_value));
$results = $query->fetchAll();


Pero viendo un poco parece ser que hacerlo de la siguiente manera es más eficiente y seguro:
Pero me dice "Uncaught Error: Call to a member function bindParam() on bool" busqué el error pero veo ninguna relación con lo que escribí, lo ví varias veces pero parece que todo está correcto.
Código (php) [Seleccionar]

$con = Connection(USERNAME, PASSWORD);
$query = $con->prepare('SELECT id_album FROM albums WHERE :by = :by_value');
$query = $con->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$query->bindParam(':by', $by);
$query->bindParam(':by_value', $by_value);
$query->execute();
$results = $query->fetchAll();
#38
Hola,

bueno la anterior consulta ya la hace correctamente ahora tengo problemas con esta otra que es muy similar. Para este caso ya no va a eliminar las tentativas de un usuario si este llego a 6 sino que las va a eliminar si son 1 o 5 tentativas pero las eliminará si la fecha (unix) de creación tiene una antiguedad de 12 horas o más. (pero solo se evalua la más reciente)

Es decir, como son los unix no son mas que numeros enteros lo que hago para evaluar la mas reciente y ver si tiene esa antiguedad de 12 horas es tomar dentro de todos los registros/tentativas del usuario el unix mas grande.

Es decir:
Código (php) [Seleccionar]

$query = $con->prepare('DELETE FROM attempts WHERE id_user IN (SELECT A.id_user, MAX(A.unix_date) FROM attempts A INNER JOIN users U ON A.id_user = U.id_user WHERE (:unix_grace_delete_attempts >= MAX(A.unix_date)) AND U.login_banned = 0 GROUP BY A.id_user HAVING COUNT(*) >= 1 AND COUNT(*) <= 5');
$query->execute(array(':unix_grace_delete_attempts' => $unix_grace_delete_attempts));


Siempre uso BETWEEN en vez de hacer COUNT(*) >= 1 AND COUNT(*) <= 5 pero mientras mas simple de entender la consulta mejor para todos.

En relación a sobre qué es $unix_grace_delete_attempts lo que le estoy haciendo es restarle a el unix actual unas 12 horas.

Código (php) [Seleccionar]

$unix_now = time();
$unix_grace_delete_attempts = strtotime('-12 hours', $unix_now);
#39
Hola,

tengo una tabla 'attempts' donde guardará todas las tentativas erróneas de login de los usuarios,  como máximo pueden llegar a tener 6 tentativas.

Ejemplo:
Código (php) [Seleccionar]

* ID_USER IP
1. 37  ::1
2. 37  ::1
3. 37  ::1
4. 37  ::1
5. 37  ::1
6. 37  ::1
7. 79  225.341.63


Básicamente tenemos 6 tentativas del usuario 37 y una tentativa en la cuenta del usuario 79 (id_user de attempt ya está relacionado con el id_user de users)

Hecho eso ahora necesito que por medio de una consulta eliminar todas las tentativas a uno de estos usuarios si llega a tener 6.

Código (php) [Seleccionar]

"DELETE FROM attempts WHERE [Aquellos usuarios que tengan = 6 tentativas]"
#40
Hola,

tengo 2 archivos PHP donde en el primer archivo tengo definida una función:
Código (php) [Seleccionar]

function myFunction($variable)
{
      $variable = 3;
}




En mi segundo archivo PHP tengo definida $variable (no es un parámetro como antes), y una llamada a myFunction()
Código (php) [Seleccionar]

$variable = 7;
myFunction($variable); // entonces le mando por parámetro la variable a la que le quiero modificar el valor


Entiendo que con return en la función y $variable = myFunction($variable); asunto arreglado pero necesito hacerlo de esta forma (si es que se puede).

Capaz usando global $variable o algo así, se pueda hacer algo...
#41
La idea es saber si hay disponible algún script que al ser ejecutado elimine todos los datos de la memoria caché o al menos aquella información almacenada sobre mi aplicación web como imágenes por ejemplo.

El objetivo de encontrar este script es que cada vez que yo mejoro mi código, agrego cosas, edito cosas (como imágenes por ejemplo) estas se vean reflejadas sin que el usuario tenga que darle al "CTRL + F5".

Ya tengo un sistema de versiones donde yo para agregar una versión completo un formulario, donde escribo el título (v1.0.0), y luego las mejoras correspondiente a dicha versión.

Con el script (si es que existe) + este sistema que ya tengo, creo que puedo armarme algo para esto.
#42
Hola,

bueno estaba viendo que existe este formato para las imágenes además de los tradicionales ya conocidos como jpg (o jpeg), y png (sé que hay otros pero estos son los más comunes) el tema es que quiero que a partir de ahora mi aplicación acepte imágenes webp pero tengo una duda y es que no estoy seguro si las imágenes webp también existen imágenes sin fondo como lo son las de png.

Es decir, como es un formato nuevo para mi no se si dentro del formato webp puede venir una imagen sin fondo como lo sería una de .png

(( Yo valido siempre antes el mimetype de las imágenes )).

En la aplicación se permiten en lo posible todas las imágenes mientras que no sean png (sin fondo),

- image/jpg
- image/jpeg
- image/webp

no sé cual más debería incluir...
#43
Básicamente estoy pensando como podría hacer un sistema nuevo de seguridad que prevenga ataques de fuerza bruta en el login.

Es decir, que un usuario determinado intente constantemente con diferentes contraseñas (se espera que tenga un diccionario de contraseñas) hasta poder ingresar a la cuenta de la victima.
Me vinieron algunas ideas pero como todo está muy fresco seguro hay cosas que estoy dejando pasar.

El sistema funcionaría de la siguiente manera, cada vez que un usuario ingrese una contraseña incorrecta el sistema le incrementará a +1 una variable que podemos llamar "attempt" (no estoy seguro si en una $_SESSION o en un campo nuevo en la bd para la cuenta de usuario que aplique), al llegar a las 40 tentativas lo que ocurrirá sería bloquear el login para ese usuario. Absolutamente nadie podrá iniciar sesión en esa cuenta por lo menos durante un periodo de tiempo que aún no defino bien, quizás una 6 horas no estoy seguro.

Por supuesto puede ocurrir que la persona que desee ingresar sesión sea el propio usuario, no el atacante. Entonces se le podría enviar un mail justo en el momento de bloquear el login explicándole lo ocurrido, recomendándole el uso de una contraseña segura, por supuesto algo que se me ocurrió es poder darle la posibilidad a el dueño de la cuenta en las opciones de privacidad de querer que su cuenta quede bloqueada (el login) ante estos casos o que no quede.

En fín, en el correo que se le enviará se le dirá que además de la recomendación del uso de contraseñas seguras y esa opción nueva de privacidad, estaría un código que deberá ingresar en un determinado formulario para que se pueda desbloquear el login nuevamente sin que tenga que esperar las 6h.

Es una idea muy fresca así que espero puedan darme más ideas, o mejoras a todo esto.
#44
No necesito que me hagan todo el algoritmo, pero hay cosas como .match de javascript que nosé cual sería en PHP.

Código (javascript) [Seleccionar]

                                var expression_lower = new RegExp('[a-z]');
var expression_number = new RegExp('[0-9]');
var expression_symbol = new RegExp('([!,%,&,@,#,$,^,*,?,_,~])');
var expression_upper = new RegExp('[A-Z]');
var security = 0;

if(string.match(expression_lower))
{
security = security + 1;
}

if(string.match(expression_number))
{
security = security + 1;
}

if(string.match(expression_symbol))
{
security = security + 1;
}

if(string.match(expression_upper))
{
security = security + 1;
}

if(string.length >= 8)
{
security = security + 1;
}
#45
Hola,

¿Cómo podría definir un arreglo vacío?
Me explico...

Código (javascript) [Seleccionar]

var formdata = new FormData();
var my_array = []; // esto es un arreglo vacío, si por consola imprimimos este dato nos va a devolver: []

for(var i = 0; i < my_array.length; i++)
{
     formdata.append('my_array[]', my_array[i]);
}



Como el tamaño del arreglo es 0 porque está vacío, no va a entrar en ninguna interacción y no va a agregar dicho arreglo.

Intenté con algunas otras maneras pero siempre me termina agregando un dato vacío.. "" cuando lo llamo con formdata.get('my_array[]'); y lo que yo quiero que devuelva sea: [] que significa arreglo vacío.



Mod: Sacados los comentarios a texto para mejor lectura.