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

#136
Buenos días,

quería saber si se pueden hacer rutas absolutas cuando se llama a un archivo externo... "require('lib/archive.php');" dependiendo de donde este el archivo raíz la ruta va a cambiar, por ejemplo "require('../lib/archive.php');" quería saber si existe una manera de hacer una ruta absoluta donde ya no necesite hacer esto... simplemente con poner el nombre del archivo ya lo encuentre sin importar en que parte de la carpeta de aplicación yo me encuentre...

Estuve buscando y se menciona algo de ___DIR___ o ___FILE___ pero en esos ejemplos todavía se usan los ../ y yo quiero algo absoluto pero ABSOLUTO en mayúsculas xD
#137
Es que había editado (hace un poco más de 1 año) para que los archivos php, html se puedan leer como URL "aplication/index" en vez de "aplication/index.php"

el tema es que me arrepentí ahora y quiero volverlo a como estaba... y como fue hace mucho que lo adherí no me acuerdo nada xD

Código (php) [Seleccionar]

Options +FollowSymLinks

RewriteBase /
RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^(.*)$ $1.html

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.*)$ $1.php

options -indexes

ErrorDocument 400 /aplication/error?number=400
ErrorDocument 401 /aplication/error?number=401
ErrorDocument 402 /aplication/error?number=402
ErrorDocument 403 /aplication/error?number=403
ErrorDocument 404 /aplication/error?number=404
ErrorDocument 405 /aplication/error?number=405
ErrorDocument 406 /aplication/error?number=406
ErrorDocument 407 /aplication/error?number=407
ErrorDocument 408 /aplication/error?number=408
ErrorDocument 409 /aplication/error?number=409
ErrorDocument 410 /aplication/error?number=410
ErrorDocument 411 /aplication/error?number=411
ErrorDocument 412 /aplication/error?number=412
ErrorDocument 413 /aplication/error?number=413
ErrorDocument 414 /aplication/error?number=414
ErrorDocument 415 /aplication/error?number=415
ErrorDocument 416 /aplication/error?number=416
ErrorDocument 417 /aplication/error?number=417
ErrorDocument 422 /aplication/error?number=422
ErrorDocument 423 /aplication/error?number=423
ErrorDocument 424 /aplication/error?number=424
ErrorDocument 500 /aplication/error?number=500
ErrorDocument 501 /aplication/error?number=501
ErrorDocument 502 /aplication/error?number=502
ErrorDocument 503 /aplication/error?number=503
ErrorDocument 504 /aplication/error?number=504
ErrorDocument 505 /aplication/error?number=505
ErrorDocument 506 /aplication/error?number=506
ErrorDocument 507 /aplication/error?number=507
ErrorDocument 510 /aplication/error?number=510
#138
Básicamente eso preg_replace es equivalente a usar mb_ereg_replace en php o vendrían siendo funciones diferentes?
#139
Básicamente eso, cual es la forma optima de poder configuar php.ini (PHP 7)
estaba viendo el manual de php pero mas o menos tampoco se bien como configurar, que valores poner en ciertas partes y por qué...
Si alguien me pudiera ayudar con esto se los agradecería.
#140
Tengo una función en PHP para poder conectar a la base de datos de la siguiente manera,
Código (php) [Seleccionar]

function Connection($user, $password)
{
if(is_string($user) && is_string($password))
{
try
{
$con = new PDO('mysql:host=localhost;dbname=my_bd;charset=utf8', $user, $password); /* adaptar (producción) */
return $con;
}
catch(PDOException $e)
{
return $e->getMessage();
}
}
}


Pero estaba pensando, en vez de cambiar luego cuando la aplicación se suba a producción (lo pase a un hosting, etcétera)

Si en ves de tener que cambiar el host de "localhost" a el que corresponde lo hiciera de una forma dinámica.

Código (php) [Seleccionar]

function Connection($user, $password)
{
if(is_string($user) && is_string($password))
{
try
{
                        $host = $_SERVER["HTTP_HOST"];
$con = new PDO('mysql:host='.($host).';dbname=my_bd;charset=utf8', $user, $password); /* adaptar (producción) */
return $con;
}
catch(PDOException $e)
{
return $e->getMessage();
}
}
}


¿Puede ocurrir algún problema si hago eso?
#141
Buenos días,

uso la siguiente zona horaria
Código (php) [Seleccionar]

date_default_timezone_set('America/Argentina/Buenos_Aires');
pero digamos si mi aplicación llega a estar disponible para toda america latina que zona horaria debo usar? y en el mejor de los casos para toda america  :laugh: que zona horaria usar?
#142
Buenas noches,

No se si sea el lugar para este tema pero queria saber si alguien me pasaria en pdf, o un link a un manual para aprender a usar codeigniter que lo veo dificil... hay manuales que wncontre pero datan del 2009 y otros del 2013 o 2014...

De paso preguntarles como aprendieron a usar codeigniter y que me recomiendan para aprender porque ya estaba haciendo desastres en mi aplicacion "programando a la vieja escuela"
#143
Buenos días,

yo lo hago usando
Código (php) [Seleccionar]

if(isset($_SESSION['id_user']))
{
     echo "Sesión iniciada.";
}
else
{
     echo "Sesión no iniciada.";
}


Generalmente creo que se hace así, pero nose me parecia algo simple hacerlo así... ¿ustedes como lo hacen?
#144
Código (javascript) [Seleccionar]

value = value == undefined ? '' : value;
#145
Buenas tardes,

Quiero hacer foco en un input donde el id del formulario es "form_index" y el name="" del input es "input_password", estoy haciendo así...

Código (javascript) [Seleccionar]

var focus_modal = 'form_index.input_password';
focus_modal.focus();


Pero me dice que .focus(); is not  a function, que no es una función... si ustedes pruebas esto en su consola de navegador les va a arrojar el mismo error... Obviamente escribo el código donde tengo el input password y el formulario "form_index"
#146
Desarrollo Web / (Pregunta): servidor de imagenes
31 Diciembre 2019, 05:10 AM
Buenas noches, tenía 3 preguntas relacionadas a este tema

1. ¿Qué es un servidor de imagenes? No tengo muy en claro que es, creo que es para no tener que tener una carpeta "images/uploads" en tu pagina web donde vayan todas laa imagenes que se suban y no ocupen tanto espacio aunque no estoy seguro.

2. ¿Para que tener uno?

3. ¿Como puedo tener uno?
#147
Buenos días,

tengo el siguiente código:

Código (javascript) [Seleccionar]

[Al enviar el formulario]
       if(form_index.input_email.value == 0)
       {
            // form_index = id="" del formulario
            // input_email = name="" del campo
            // Le digo que si es == 0 muestre un error que le diga que esto está "vacío", ya que no hay nada enviado... solamente puro aire...
           // Lo que pasa es que con este método si el usuario envía un "0" en el campo también le va a dar error, probé con "=== false" pero no funciono, sirve si por ejemplo "== false" pero no con "==="
       }
#148
Buenas tardes,

estaba programando y pasa que necesito hacer lo siguiente:

Código (php) [Seleccionar]

$valor = 0; // variable numérica
if(!empty($valor))
{
     echo "La variable no está vacía.";
}
else
{
     echo "La variable está vacía.";
}


Si prueban le va a imprimir que la variable está vacía, algo que es mentira porque tiene un dato, el 0...

Quizás funcione si hago:

Código (php) [Seleccionar]

$valor = 0;

if(!empty($valor) || $valor == 0)
{
    echo "La variable no está vacía.";
}
else
{
    echo "La variable está vacía";
}


¿Es recomendable? Porque esto por algo está, no creo que sea casualidad... pasa que este dato va desde el 0 para arriba... más todavía si se guarda en una base de datos... ¿habrá algún problema?... ya veo que mando el 0 y en la tabla aparece vacío, ni siquiera el 0 xD

Gracias.
#149
Buenas noches,

tengo una consulta que lo que hace es marcar como desconectado a un usuario que haya pasado 15 minutos desde que hio una ultima acción...

Luego de que pasa el tiempo de gracia de 15 minutos quiero que lo marque como desconectado... pero la consulta no funciona... no me devuelve errores

Código (php) [Seleccionar]

       function Mark_Disconnected()
{
$timestamp_now = date('Y-m-d H:i:s');
$timestamp_grace = strtotime('-15 minutes', strtotime($timestamp_now));
$timestamp_grace = date('Y-m-d H:i:s', $timestamp_grace);

$con = Connection('root', '');
$query = $con->prepare('UPDATE users SET connected = 0, sid = null WHERE connected = 1 AND '.($timestamp_grace).' >= last_activity');
$query->execute();
}
#150
Buenas tardes,

Hace un tiempo había publicado un tema donde preguntaba sobre como podía evitar que un usuario haga varios clicks a un botón "submit" que registre a un usuario... si va algo lento el servidor el usuario por apurado o porque tenga poca paciencia va a hacer click como 10 veces haciendo así unos 10 registros.. los "registros" no necesariamente son solamente cuando se registra un usuario ya que en este caso no va a haber problema ya que dos usuarios con el mismo correo no se pueden registrar...

A lo que voy es...

¿Como evito el "insistente" envío de un formulario?

Esto lo había solucionado perfectamente con el uso de javascript, pero todos sabemos que Seguridad + javascript = Peligro
Así que lo quiero hacer pero con PHP un lenguaje del lado del servidor...

Lo que tengo es:

Formulario:
Código (html) [Seleccionar]

<form method="post" onsubmit="return CheckSubmit();">
        <input type="text" name="texto">
        <button type="submit" name="enviar">enviar</button>
</form>


javascript
Código (javascript) [Seleccionar]

var sending_post = false;

// functions
function CheckSubmit()
{
if(sending_post == false)
{
sending_post = true;
// Acá se puede mostrar una ventana modal o un mensaje de "Cargando..."
   
          return true;
}
else
{
                 return false;
}
}


La idea es pasar eso pero a PHP? ¿Como lo harían?
#151
Buenas tardes,

voy a ir directamente a el tema y es que tengo un sistema de comentarios, voy a usar de ejemplo a facebook que tiene las publicaciones una abajo de la otra y en cada publicación se pueden ver los comentarios por lo que si son 5 publicaciones van a haber 5 input's para comentar... No probé todavía pero como aplico con la V2? ¿Es como se hace en los formularios? ¿No va a ir más lento la pagina al cargar, ya que va a tener que cargar más de 1 recaptcha?

Una solución quizá sea usar la V3 (que es posiblemente una solución que tampoco probé)

Pero como quiero tener más opciones decidí preguntarles si para este caso se podría...

Agregar un sistema de que para volver a comentar un nuevo comentario el usuario deba esperar 20 segundos o 15 segundos... también cuento con anti CSRF

Este va a ser posiblemente el ultimo tema que abro de esto, aunque quien sabe...  :xD

¡FELICIDADES!
#152
Buenas noches,

actualmente estoy usando la versión 2 de google recaptcha que vendría siendo esa que hay que hacer click en un box y aveces sale una tarea para hacer... pero la v3 supuestamente está invisible y no pasa esto... es con un puntaje... sin necesidad de completar ninguna tarea ya que esto si bien la v2 no me esta dando problemas y esta todo perfecto... si es cierto que es algo tedioso estar completando tareas por más simples que sean..

¿Que me recomiendan?
#153
Buenos días tengo un formulario muy simple:

Esto viene de un tema pasado para que puedan entender mejor: https://foro.elhacker.net/desarrollo_web/pregunta_iquestcomo_puedo_hacer_que_si_son_4_espacios_seguidos-t501708.0.html

La idea básica es que si son 3 saltos de líneas o más seguidos que están vacíos estos se conviertan en 2, por lo que si me mandan

"T







M"

esto se convierta en

"T


M"

No entiendo porque en el primer código donde lo hago de una forma más "estática" si funciona, pero si ya lo hago con un formulario usando un textarea ya no...

estática
Código (php) [Seleccionar]

<?php
$string 
'• Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod.'."\r\n\n\n\n\n\n\n\n\n".'• Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod.'."\r\n".'• Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod.';
$string Clearn_Data('textarea'$string);

echo 
nl2br($string);
?>



dinámica
Código (php) [Seleccionar]

<form method="post">
<textarea name="texto" placeholder="texto"></textarea>
<button type="submit" name="enviar">enviar</button>
</form>

if(isset($_POST['enviar']))
{
$texto = Clearn_Data('textarea', $_POST['texto']);

echo nl2br($texto);
}


La función es:
Código (php) [Seleccionar]

function Clearn_Data($type, $data)
{
      if($type === 'textarea')
{
$data = htmlspecialchars($data);
$data = trim($data);
$data = preg_replace('/\n{3,}/m', "\n\n", $data);
}

     return $data;
}
#154
Buenos días,

tengo la siguiente duda y es que no se muy bien si hacer esto acarree algún tipo de vulnerabilidad.

Código (php) [Seleccionar]

<?php
$variable 
$_GET['variable'];
?>


<form method="post">
<button type="submit" name="mostrar">enviar</button>
</form>

<?php
if(isset($_POST['mostrar']))
{
echo $variable;
}
?>



Hasta acá nada raro pero lo que hago hasta ahora es que por "miedo" a que exista alguna vulnerabilidad en el proceso de abajo vuelvo a definir la variable $variable así.

Código (php) [Seleccionar]

<?php
$variable 
$_GET['variable'];
?>


<form method="post">
<button type="submit" name="mostrar">enviar</button>
</form>

<?php
if(isset($_POST['mostrar']))
{
        
$variable $_GET['variable'];
echo $variable;
}
?>




(No traten de buscarle sentido o alguna lógica a el programa es solamente de demostración, por ejemplo un formulario de alguna busqueda que reciba algun dato $_GET y que por esa duda de vulnerabilidad vuelvo a definir cuando el usuario realiza alguna petición)

Tengo noción de que hay que "limpiar" ese dato $_GET antes de pasarlo a una variable tal y como esta, es solo un ejemplo.
#155
Ayer me funcionaban perfecto los atributos autofocus="true" o autofocus en un <input> pero hoy ya no me servían más, no aparece una advertencia por consola ni nada solamente no anda no realiza el foco al elemento, estoy pensando que google pudo actualizar algo (cagarla básicamente) porque en otros navegadores a excepción de firefox probé y anduvieron bien...



Para hacerlo simple:

[Contenido de carga] <= Acá hay una ruedita "spinner infinito" que indica que está cargando la pagina.

[Contenido de la pagina] <= Acá va a estar el contenido de la pagina.


¿La pagina está lista?
(Sí): El [Contenido de carga] se oculta y se muestra [Contenido de la pagina].

En el [Contenido de la pagina] esta el input con autofocus="true"

<div> // Elemento superior
      <input type="text" autofocus="true">
</div>

Si el elemento superior tiene un display:none; y luego le digo que tenga display:block; con un ... timeout por ejemplo o en este caso cuando cargue la pagina, cuando este lista (window.ready)

el autofocus ya no lo toma y esto lo pueden probar si quieren,

Código (html) [Seleccionar]

<style type="text/css">
#elemento {
display: none;
}
</style>

<div id="elemento">
<input type="text" name="" autofocus="true">
</div>

<script type="text/javascript">
setTimeout(function() {
document.getElementById('elemento').style.display = 'flex';
}, 1000);
</script>
#156
Buenos días,
estuve escarbando por internet sobre long-polling y encontré este fragmento:

Código (javascript) [Seleccionar]

// long polling
subscribe: (callback) => { // esto no entiendo
   const pollUserEvents = () => { // esto no entiendo
       $.ajax({
           method: 'GET',
           url: 'http://localhost:8080/githubEvents',
           success: (data) => {
               callback(data) // process the data // esto no entiendo
           },
           complete: () => { // esto no entiendo
               pollUserEvents(); // esto no entiendo
           },
           timeout: 30000 // tampoco esto
       })
   }
   pollUserEvents() // esto no entiendo ¿por qué es ejecutado acá?
}


No explicó nada de este código simplemente dijo algo como "yo hago así" y mandó ese fragmento, capaz es una pelotudes pero no entiendo esas partes después lo demás que no marque si lo entiendo.

Muchas gracias...
#157
Buenos días,

estoy un poco confundido ya que PHP me está diciendo que una variable no existe. (que estoy definiendo claramente)

Código (php) [Seleccionar]

<?php
$dato 
'este es el dato';

function 
Mirar()
{
echo $dato;
}

Mirar();
?>



La variable es global y está fuera de la función y luego se usa ahí...
#158
Desarrollo Web / [Pregunta]: Websockets
12 Diciembre 2019, 04:37 AM
Buenas noches,

Ando hace rataso ya intentando hacer mi aplicación web en tiempo real, la verdad estoy tratando de aprender sobre websockets que según lo que pude averiguar es la mejor forma posible pero cada vez que intento ver información me suelen decir que es necesario que sepa usar node js... La verdad ando estancado y no se por donde empezar, ustedes como aprendieron de websockets? Que material me recomdarían ver?
#159
Buenos días,

básicamente eso que el usuario no pueda acceder a localhost/aplication/ajax/x.php
ya que solamente quiero que se usen para peticiones AJAX y no para que de la nada quiera ver que hay ahí...
#160
Buenas noches,

tengo en la cabecera de html

Código (html) [Seleccionar]

<head>
     <noscript>
           <meta http-equiv="refresh" content="0; URL=http://localhost/aplication/no_script">
     </noscript>
</head>


Lo que va a hacer es que cuando detecte que javascript está desactivado en el cliente del usuario lo va a redireccionar a otra pagina donde le pedirá que active JS para poder usar la aplicación. El problema es que yo quiero que redireccione creo que se dice del path si esta mal corriganme sería... poner solamente "no_script" para la redirección y no toda esa ruta completa con http:// etc
#161
Buenas noches,

¿Como puedo hacer que si en una cadena hay 4 o más (>= 4) lineas en blanco "\n" seguidas estas se transformen en 3 con php

sería algo así:

"Hola,




Acá de nuevo, arriba hay 4 lineas en blanco"


"Hola de nuevo,








Acá de nuevo, arriba hay 8 lineas en blanco"

el programa debería transformarlo en esto =>
"Hola de nuevo,



Arriba hay ahora 3 lineas en blanco"
#162
Sistema anti ataques CSRF


Con este pequeño sistema se espera que los ataques CSRF ya no nos afecten, este es el segundo aporte que hago. El primero era un contador de llaves donde se podía ingresar un código y el programa iba a devolver la cantidad de llaves abiertas y cerradas.

Con esto quiero decir que este es mi primer aporte "avanzado" para mi así que por eso muy posiblemente existan fallos o áreas donde el código pueda ser mejorado.

El sistema lo que hace es crear tokens de seguridad de clave única cifrada, yo lo uso para evitar ataques en las paginas donde existan formularios, donde se use $_GET como por ejemplo un perfil (profile.php?id_user=x) y también lo uso en ficheros AJAX (realmente no estoy seguro si es necesario pero quería que en todas las partes de mi aplicación web donde se ejecuten funciones importantes exista este control de seguridad)

Con este código espero que me lluevan criticas, sugerencias para que podamos mejorarlo entre todos.

En principio creo 6 funciones, creo que esta de más decir que uso PHP para esto pero quería aclararlo.

La primera función servirá para crear un código de 22 caracteres unos 20 números + 2 letras en mayúsculas.
Código (php) [Seleccionar]

function Create_Code()
{
$year_code = date('Y');
$month_code = date('m');
$day_code = date('d');
$hour_code = date('H');
$minute_code = date('i');
$second_code = date('s');

$random_code_A = rand(100000, 999999);
$random_code_B = chr(rand(ord('A'), ord('Z')));
$random_code_C = chr(rand(ord('A'), ord('Z')));

$result = ($random_code_A).($year_code).($month_code).($day_code).($hour_code).($minute_code).($second_code).($random_code_B).($random_code_C);

return $result;
}


La segunda función servirá para crear un token determinado para cada pagina que exista en nuestra aplicación.
Código (php) [Seleccionar]

function Create_Token($page)
{
if(is_string($page))
{
if(!isset($_SESSION['token_'.($page)]))
{
$token_csrf = Create_Code(); // Creamos un codigo unico
$token_csrf = Hash_Data($token_csrf); // ciframos el codigo lo que nos va a dar una cadena de 60 caracteres
$_SESSION['token_'.($page)] = $token_csrf; // se crea una session con el token generado
}
}
}


La funciòn hash_data (me había olvidado de ponerla, gracias por el aviso!)
Código (php) [Seleccionar]

function Hash_Data($data) // El tipo de cifrado es general, con esto quiero decir que uso esta función para cifrar contraseñas, códigos de activación de un email, etcétera, ustedes pueden usar el que quieran pero en mi aplicación como norma general uso este.
{
$result = 'Error';

if(is_string($data))
{
$result = password_hash($data, PASSWORD_BCRYPT);
}

return $result;
}


La tercera función servirá para crear una lista de tokens (acá van a tener que poner todas las paginas que van a usar tokens, donde usen formularios, peticiones $_get, o ajax)
Código (php) [Seleccionar]

function Create_Tokens()
{
// Ajax
Create_Token('ajax'); // acá recomiendo que creen un solo token para validar ficheros ajax

// Pages ($_POST or $_GET)
Create_Token('login'); // este token pertenece a login.php donde estará el formulario de acceso
}


La cuarta función servirá para validar un token determinado.
Código (php) [Seleccionar]

function Validate_Token($page, $value)
{
$result = false;

if(is_string($page) && is_string($value))
{
if(isset($_SESSION['token_'.($page)]))
{
if(!empty($_SESSION['token_'.($page)]) && $_SESSION['token_'.($page)] === $value)
{
$result = true;
}
}
}

   return $result;
}


Ahora vamos a ponerlo en práctica, por supuesto todas las funciones de arriba deberían ponerlas en una libreria que ustedes pueden crear e incluirla en todas sus paginas php incluyendo "Create_Tokens();" pero para este ejemplo vamos a dejarlo acá.
Código (html) [Seleccionar]

<!-- login.php -->
<?php
Create_Tokens
();
?>


<form method="post">
    <input type="text" name="el_texto"></input>
    <input type="hidden" name="token_csrf" value="<?php echo($_SESSION['token_login']); ?>"> // Acá va a ir su token, fijense que le puse "token_login" esto tiene que ir personalizado dependiendo en que paginas lo usen
     <button type="submit" name="el_submit"></button>
</form>

<?php
if(isset($_POST['el_submit'])) // cuando se envia el formulario
{
     if(isset(
$_POST['token_csrf']) && Validate_Token('login'$_POST['token_csrf']))
     {
        echo 
"mandaste ".$_POST['el_texto'];
     }
     else
     {
          echo 
"Se detecto un ataque CSRF";
     }
}
?>



Bueno ahora vamos a aplicar esto a una pagina que use $_GET como por ejemplo un perfil.
Código (html) [Seleccionar]

<!-- profile.php -->
<?php
if(isset($_GET['id_user']) && isset($_GET['token_csrf']))
{
    
$_GET['token_csrf'] = urldecode($_GET['token_csrf']);

    if(
Validate_Token('token_profile'$_GET['token_csrf']))
    {
        [
Ejecución]
    }
    else  
    {
        [
Interrumpimosredirigimosetcétera// ya que no es valido el token
    
}
}
else
{
     [
Interrumpimosredirigimosetcétera]
}
?>



Cuando vayamos a redirigir a el usuario a una pagina donde se use $_get debe de ser así...
Código (javascript) [Seleccionar]

window.location.href = 'profile.php?id_user=<?php echo urlencode($id); ?>&token_csrf=<?php echo urlencode($_SESSION['token_profile']); ?>';


En ajax sería así:
Código (php) [Seleccionar]

// ajax/fichero.php
if(Validate_Token('token_ajax', $_POST['token_csrf'])) // $_POST['token_csrf'] depende de si en ajax ustedes usan GET o en este caso POST
{
    [Ejecución]
}
else
{
    [Interrupción]
}




Espero que les guste y si lo quieren usar que me comenté si les gusto, escucho criticas como ya dije y entre todos poder ir mejorando este sistema. Gracias!
#163
Buenos días,

hace unos días había publicado un tema donde preguntaba sobre un sistema de ver más, la idea es que se va a obtener una cadena donde se va a hacer varias preguntas y en base a estas se ejecutara un resultado. Hice este algoritmo pero no se como puedo seguirlo, estoy en un bloqueo y no consigo entender.

Lo que espero que haga el "programa" es que a partir de una cadena sobre si esta es muy grande (mb_strlen($cadena) >= 250) esta se acorte mostrando las primeras 250 letras y al final concatenar "..." y un botón "Ver más" hasta acá no hay ningun problema es más el programa hasta acá funciona pero hay "huecos" que no puedo cubrir, la verdad si que estoy bloqueado.

Digamos que en la cadena hay saltos de lineas este ya es otro panorama diferente porque la cadena puede ser

"a
b
c
d
e
.. así hasta 249 letras
" si ustedes se fijan si yo aplico la solución que ya hice no va a hacer nada ya que es menor a 250 caracteres entonces lo va a mostrar completo pero va a ser muy alto, para que puedan entender se puede tomar como ejemplo alguna red social como facebook que al pasar x cantidad de caracteres una publicación esta se va a "minimizar" pero no se como puedo cubrir los saltos de líneas.

Hice este algoritmo pero no puedo entender,

Espero que se entienda porque la pagina desde donde hice el algoritmo es una verg# y le pusieron como 500 marcas de agua los crotos estos xD

cualquier cosa me dicen y lo hago desde otro lado



Muchas gracias, no hace falta que manden código ni nada de eso no quiero que me hagan el programa ustedes nada más que me puedan dar una mano con esta parte final en cuanto a lógica.
#164
¿Por qué existe gente que usa el "theme" color blanco para programar? ¿Que onda no les duele los ojos o que?
#165
Buenos días,

ya pude descubrir de donde viene este warning "A cookie associated with a cross site resources at ..."

El warning aparece en las paginas donde uso recaptcha de google es la v2.

Buscando por ahí encontré que poniendo este fragmento se puede "solucionar"

Código (javascript) [Seleccionar]

response.setHeader('Set-Cookie', 'HttpOnly;Secure;SameSite=Strict');


Tengo 2 problemas con esto,

1. No entiendo que es lo que hace este código, solamente que supuestamente ese warning ya no va a joder/molestar.
2. Intente poniendo en un <script> (javascript) ya que si no estoy equivocado eso es js... pero me da un error "reference error response is not defined" lógicamente me dice que la variable response no existe lo cual es correcto pero como tampoco se donde meterlo ni para que sirve por eso, una vez que sepa para que sirve y donde meterlo voy a saber como definir la variable "response"

Con que me respondan por lo menos 1 me sirve muchisimo, Gracias!  ;-)
#166
Estuve investigando y encontre un ataque que se llama self-XSS y es cuando una persona sin darad cuenta ingresa código en la consola para desarrolladores...

En facebook hay muchas estafas donde te dicen algunos burros  :xD que si escribis x codigo en la consola te van a llegar 3000 solicitudes (no puedo creer que la gente caiga en esto jaja pero bueno) una vez que se ingreso el codigo en la consola te pudieron haber robado información relevante de tu cuenta...

Facebook como otros sitios lo que hace es que al momento de que cualquiera abra su consola este muestre un mensaje tipo "html" es decir no se usa alert o console.log donde le dice que bueno que si alguien le dijo que escriba algo aca tenga cuidado, etc...

Si se van a facebook y abren la consola se van a dar cuenta de lo que hablo...

¿Como puedo mandar un mensaje por consola similar al que se usa para tratar de wvitar estos ataques?

Perdón si escribo medio mal ando en el teclado del telefono y está complicado xd
#167
Buenos días,

¿Como puedo contar la cantidad de saltos de lineas que tiene una cadena en PHP? ¿Hay alguna función que tenga PHP para hacer esto?
#168
Buenos días,

tengo un formulario ("id_form") en el cual tengo 2 inputs uno que tiene name="username" y name="pass"

Código (javascript) [Seleccionar]

        $('#id_form').on('change',function() // detecto si se produjo un cambio en el formulario entero
        {
            if(id_form.input_username.onchange) // quiero que si el cambio se produjo en el input username
            {
                alert('1');
            }
            else if(id_form.input_pass.onchange) // quiero que si el cambio se produjo en el input pass
            {
                alert('2');
            }
        });


Como esta el código no da errores pero tampoco sirve, no hace nada.
Probé de otras maneras pero tampoco me servían porque me daban errores, quiero hacerlo de esta manera para no tener que estar poniendo una id="" a cada campo o un onchange, es muy tedioso y prefiero hacerlo así...
#169
Desarrollo Web / [Pregunta]: Anti-CSRF 2.0 (Dilema)
4 Diciembre 2019, 13:30 PM
Buenos días,

hasta día de hoy mi protección para ataques CSRF es generar un token de seguridad o aleatorio para cada formulario, es decir si yo entro a la pagina login, efectivamente me va a generar un token con el nombre del formulario, "token_csrf_form_login" quedando así $_SESSION['token_csrf_form_login"] después si entro a el formulario de registro $_SESSION['token_csrf_form_registry'] cada una de estas sessiones va a tener un token diferente pero hay un problema con este método y es que si la persona esta con dos formularios iguales a la misma vez se va a generar un problema...

[Page A (Registry)] [Page B (Registry)]

Primero va a generar un tocken para form_registry, después cuando vuelva a abrir el mismo formulario desde otra ventana o pestaña va a volver a generar el token y va a dejar obsoleto el anterior, por lo que el formulario que se abrió primero quedará inoperable, va a terminar dando un error para la primera pestaña o ventana que haya.. cargado el formulario antes.

Buscando por ahí varias formas de crear token se sigue un patrón (es material del 2011 a el 2014) generar el token una vez que el usuario se logea.

[Usuario inicia sesión]
[Genera tocken anti CSRF] => $_SESSION['token_csrf'] = [Dato aleatorio];
y todos los formularios u otros métodos que requieran este tipo de seguridad van a compartir el mismo token (por lo menos hasta que el usuario se desconecte, ahí ya se destruyen todas las sessiones).

¿Qué opinan de esto? ¿Se inclinan por la opción A u opción B?
#170
Buenas noches,

¿Qué significa esta alerta? Apareció cuando a mi función AJAX le puse async: false para que deje de ser asincrona... ¿Qué quiere decir esta alerta? ¿Es algo grave?
#171
Buenos días,

estoy teniendo problemas con un código...

voy a resaltar que cada fragmento de código esta encerrado en $(document).ready (jQuery)
Código (javascript) [Seleccionar]

var select_country = document.getElementById('select_country');
var op_country = select_country.getElementsByTagName('option');
op_country[<?php echo($_POST['select_country']); ?>].selected = true;

Change_Select_Ubication('select_country'); // Función AJAX que llama a un fichero.php

// Después va a ejecutar estos otros códigos (pero para este punto todavía no terminó de completarse la función de arriba, la idea es que ejecute esto una vez que la función de arriba se complete del todo)
var select_province = document.getElementById('select_province');
var op_province = select_province.getElementsByTagName('option');
op_province[<?php echo($_POST['select_province']); ?>].selected = true;

Change_Select_Ubication('select_province'); // Después va a ejecutar la misma función pero con parametro diferente


Hasta ahora lo hago con un time out pero yo se que esto no es una buena manera de hacerlo.
Código (javascript) [Seleccionar]

           var select_country = document.getElementById('select_country');
           var op_country = select_country.getElementsByTagName('option');
           op_country[<?php echo($_POST['select_country']); ?>].selected = true;

           Change_Select_Ubication('select_country');

           setTimeout(function()
           {
               var select_province = document.getElementById('select_province');
               var op_province = select_province.getElementsByTagName('option');
               op_province[<?php echo($_POST['select_province']); ?>].selected = true;

               Change_Select_Ubication('select_province');
           }, 750);


Otra cosa que se me ocurrió era:

Código (javascript) [Seleccionar]

           var select_country = document.getElementById('select_country');
           var op_country = select_country.getElementsByTagName('option');
           op_country[<?php echo($_POST['select_country']); ?>].selected = true;

           var estado = Change_Select_Ubication('select_country');

           if(estado == true)
           {
                var select_province = document.getElementById('select_province');
                var op_province = select_province.getElementsByTagName('option');
                op_province[<?php echo($_POST['select_province']); ?>].selected = true;

                Change_Select_Ubication('select_province');
           }


la función es:

Código (javascript) [Seleccionar]

   function Change_Select_Ubication(select)
   {
       var select_country = document.getElementById('select_country').value;
       var select_province = document.getElementById('select_province').value;

       $.ajax({
           url: 'ajax/x.php',
           type: 'POST',
           dataType: 'html',
           data: {select, select_country, select_province},

           success: function()
           {
               $(document).ready(function()
               {
                   return true;
               });
           }
       })

       .done(function(results)
       {
           $('body').append(results);
       })
   }


Pero tampoco funciona ya que al momento de ejecutar la función lo que va a recibir esa variable va a ser "undefined" o en el caso de que ponga una variable más arriba con un valor = false y más abajo en la parte success la cambie por true y luego en la parte de abajo (abajo de todo) return variable; va a devolver false...

ya que al momento de asignarle el valor a esa variable no se completo la función lo que es igual a nada...

¿Alguna manera?
#172
Buenas noches,

Me había aparecido un anuncio en youtube de la nada, una publicidad para aprender sobre linux... supuestamente es algo que todos los programadores deberiamos aprender pero yo no entiendo para que sirve... les habia preguntado a la gente del anuncio para que servia esto pero contestaron "todos los programadores deberian saberlo" (no voy a aprender algo que no se ni para que sirve  :laugh:) en fin más alla de que no me supieron responder queris aaber si ustedes me podrian informar un poco..
#173
Desarrollo Web / [Pregunta]: Token CSRF
3 Diciembre 2019, 05:52 AM
Buenas noches,

Quería preguntarles porque yo tengo un sistema para evitar ataques CSRF en mi aplicació  web, logicamente estoy usando tokens para esto. Hasta ahora solamente los estoy usando para el envio de formularios (PHP) quería saber donde más ven necesario el uso de este "parcheado"?
#174
Buenas noches,

tengo un <select> en el cual solamente tengo un option <option value="0">Día</option>
Los días los creo de forma dinámica usando JS obviamente hay meses (febrero) 28 días si no es bisiesto y otros que tienen 31 días...
pero para el ejemplo que quiero dar viene bien.

Correcto, entonces tengo al fin de cuentas un selector con 32 opciones (uno con el option 0 y los demás del 1 a el 31)

Generalmente lo que hago siempre para recuperar un dato luego de enviar un formulario es hacer:

Código (php) [Seleccionar]

<?php
if(isset($_POST['selector']))
{
       
?>

       <select name="selector">
               <option value="0">Día</option>
                // acá se crean 31 options más con javascript ¿Pero como puedo seleccionarlos si a simple vista no aparecen? algo como esto..
                <option value="30" selected="true">30</option>
       </select>
       <?php
}
?>



Código (javascript) [Seleccionar]

    function Create_Select_Day()
    {
        var select = document.getElementById('select_day_birth');

        for(var i = 1; i <= 31; i++)
        {
            option = document.createElement('option');
            option.value = i;
            option.text = i;
            select.appendChild(option);
        }
    }


¿Será que lo podré hacer usando algun script que se ejecute?
#175
Desarrollo Web / [Pregunta]: ¿Anti-BUG en AJAX?
1 Diciembre 2019, 22:16 PM
Buenos días,

llevo arrastrando un problema hace ya varios meses, estaría necesitando saber como puedo "parchear" o hacer un anti bug para ficheros de AJAX.

Para meterlos en contexto,
digamos que hay un botón que al momento de presionarlo por medio de ajax va a llamar a un fichero.php que de lo que se va a encargar será de agregar un nuevo dato a una base de datos y mostrarlo por pantalla (html).

Imaginen que el usuario ve que la pagina va un poco lenta y ya pasaron 4 segundos desde que hizo click y no apareció nada. va a hacer otro click y entonces ya habría dos solicitudes en carrera lo cual mostrará o va a guardar dos datos en la base de datos.

Ahora, lo veo como un tipo de "vulnerabilidad" ya que si un usuario va y toca el boton 100 veces seguidas, de forma inmediata va a estar agregando 100 datos a la base de datos.

La idea sería que una vez que complete la solicitud ajax (success) recién ahí tenga permitido poder volver a realizar otra solicitud/petición.

Código (javascrip) [Seleccionar]

function AJAX(a)
{
                        $.ajax({
url: 'ajax/x.php',
type: 'POST',
dataType: 'html',
data: {a},

success: function()
{
$(document).ready(function()
{
// Para este punto ya se completó la solicitud AJAX (bien o mal) ya se completó.
}
})

.done(function(results)
{
$('#elemento').append(results);
})
}


(El ejemplo que doy es solamente eso, para dar un ejemplo no es un sistema "real")

Gracias.
#176
Buenos días,

tenía un problema y era que con una función lo que hacía era que si se pasaba el scroll sobre un elemento "<div id="el_div">" quería que muestre un console.log('1');

el problema era que a cada momento sin importar si pasaba el scroll por el "<div id="el_div">" se ejecutaba...

Código (javascript) [Seleccionar]

            $(document).on('scroll', function()
            {
                if($(this).scrollTop() >= $('#el_div').offset().top - $(this).height())
                {
                    console.log('1');
                }
            });


El tema es que conseguí corregir esto cambiando "document" por "window"

Código (javascript) [Seleccionar]

            $(window).on('scroll', function()
            {
                if($(this).scrollTop() >= $('#el_div').offset().top - $(this).height())
                {
                    console.log('1');
                }
            });


No veo que diferencia hay entre haberlo hecho con document o window... más allá del problema que tenía usando document.

Tengo otra duda y es que digamos si yo estoy detectando el scroll que existe en un div y otro en el cuerpo (window)
si yo hago "$(window).unbind('scroll');" que sirve para eliminar el evento...
¿me eliminará también un evento en algun scroll que tenga en un div en especifico?

por ejemplo

Código (javascript) [Seleccionar]

            $('#div_scroll').on('scroll', function()
            {
                console.log('scrolleando...');
            });
#177
Buenos días,

hace poco estoy investigando sobre usar JSON ya que siempre use la manera de "delimitar los datos"

dato_1, dato_2, dato_3, etc
Se ve que con JSON es mucho mejor y es una buena practica inclusive es mejor a XML (corriganme si estoy equivocado, es todo muy nuevo para mi)

En fin la idea no es que ustedes me hagan la tarea ni nada parecido es por eso que voy a estar mostrando una función solo de prueba para que pueda entender como aplicar JSON a una función que llama a un archivo ajax.

Código (javascript) [Seleccionar]

// javascript
function_AJAX(1, 2, 3);


Código (javascript) [Seleccionar]

// function_AJAX

        function function_AJAX(a, b, c)
{
$.ajax({
url: 'ajax/archivo_ajax.php',
type: 'POST',
dataType: 'html',
data: {a, b, c},

success: function()
{
// Cuando se procese todo (bien o mal) se podrá poner acá funciones que manden mensajes algo como: "Ya se termino la solicitud wuachin" (nada relevante)

}
})

.done(function(results)
{
$('body').append(results);
})
}


Código (php) [Seleccionar]

// archivo_ajax.php
echo $_POST['a'];
echo $_POST['b'];
echo $_POST['c'];


No traten de entender la logica del programa, lo que me interesa es la transferencia de datos usando JSON... sobre como podría hacerlo... algo entiendo pero no veo como poder encararlo...

gracias.
#178
Buenas noches,

tengo un textdraw donde si ingreso el mensaje es "a" va a devolver 1 (estoy contando la cantidad de caracteres con mb_strlen[multibyte]), pero si el mensaje es

"a
b"

con un salto de linea y sin espacios en blanco me va a devolver 4 ¿El salto de linea es normal que cueste 2 caracteres?

Imagino que tenga que ver con mb_ pero no estoy seguro.
#179
Buenas noches,

me preguntaba como podía incrementar de 1 en 1 un "numero" en formato "versión"...
si yo tuviera el valor 4 y les dijera que voy a incrementarlo en 1 el resultado sería 5, si yo les dijera que tiviera el valor 999 y lo voy a incrementar en 1 el valor seria 1.000 (respetando el punto) pero si yo les dijera que tengo la "v1.3.1" y tengo que aumentar a 1 sería "v1.3.2"

Ya creo que se entendió xD
solamente no se como puedo incrementar este valor que ni siquiera es un valor es algo que se me ocurrió.. xD
#180
Desarrollo Web / [Pregunta]: Sistema "ver más"
27 Noviembre 2019, 00:22 AM
Buenos días,
estaba haciendo un sistema con PHP que lo que hace es llamar desde la base de datos X contenido o cadena donde "if(mb_strlen($cadena) >= 250)" si la cantidad de caracteres que tiene dicha cadena son más de 250 caracteres lo que va a hacer es acortar esa cadena mostrando los primeros 250 y agregando al final "..."

Todo bien, hasta ahí el sistema ya esta terminado pero hay un problema...

Podrían ser 2 preguntas en 1 pero si digamos que por medio de un textarea un usuario escribe:

"Buenas tardes,

¿Como les va el día de hoy?"

En la base de datos se va a guardar "Buenas tardes, ¿Como les va el día de hoy?"
y lo va a imprimir de la misma manera en la pagina.

Algo que no quiero, ya que quiero que respete saltos de lineas...

Pero a la vez si hago esto va a ocurrir otro problema.

Imaginemos, que ya esta implementado para que se respeten los saltos de lineas (que tampoco se hacer)

Va a mandar...

"1
2
3
4
5
6
7
.. así hasta 250 letras... se podrán estar imaginando que la cadena no es tan larga pero si que va a ocupar mucha altura... ya que va una de bajo de la otra

El sistema de ver más va a imprimirlos así y si son mas de 250 va agregar algo como esto

"Palabra 245
Palabra 246
Palabra 247
Palabra 248
Palabra 249
Palabra 250..." <= esto va a imprimir, reitero imaginen lo alto que va a ser este mensaje...
la pregunta es esa.. como hago que si la altura de un texto supera X tamaño entonces aplica lo antes mencionado... muestra los primeros X caracteres y un botón "ver más"