Mostrar Mensajes

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


Mensajes - gatoher

Páginas: [1] 2 3 4 5
1
Gracias Ogramar, muy bien explicado de verdad lo he comprendido. El ejemplo no es mio, es de la documentación de PHP oficial:

https://www.php.net/manual/es/functions.anonymous.php

Muchas gracias estaba yo intrigado, voy a seguir leyendo sobre funciones anónimas  y la clase CLOUSORE

2
Hola Ogramar, pero mi duda es que las variables "$producto, $cantidad" nunca le son pasadas como argumento a la función "$llamadaDeRetorno ". No lo termino de ver por eso. A este método se le llama desde esta línea:

Código: [Seleccionar]
array_walk($this->productos, $llamadaDeRetorno);


3
Hola a todos!! Estoy viendo las funciones anónimas en php en la documentación oficial. Cuando llego al ejemplo de un carrito  no comprendo como como el método llamadaDeRetorno accede a las variables cantidad y producto pues no se las pasa como un argumento y no están instanciadas en ninguna parte.Solo están declaradas en el método añadir. ¿Podría alguien explicarme como tiene acceso a ellas?

Código: [Seleccionar]
class Carro
{
    const PRECIO_MANTEQUILLA = 1.00;
    const PRECIO_LECHE       = 3.00;
    const PRECIO_HUEVOS      = 6.95;

    protected $productos = array();

    public function añadir($producto, $cantidad)
    {
        $this->productos[$producto] = $cantidad;
    }

    public function obtenerCantidad($producto)
    {
        return isset($this->productos[$producto]) ? $this->productos[$producto] :
               FALSE;
    }

    public function obtenerTotal($impuesto)
    {
        $total = 0.00;

        $llamadaDeRetorno =
            function ($cantidad, $producto) use ($impuesto, &$total)
            {
                $precioUnidad = constant(__CLASS__ . "::PRECIO_" .
                    strtoupper($producto));
                $total += ($precioUnidad * $cantidad) * ($impuesto + 1.0);
            };

        array_walk($this->productos, $llamadaDeRetorno);
        return round($total, 2);
    }
}

$mi_carro = new Carro;

// Añadir algunos artículos al carro
$mi_carro->añadir('mantequilla', 1);
$mi_carro->añadir('leche', 3);
$mi_carro->añadir('huevos', 6);

// Imprimir el total con un impuesto de venta del 5%.
print $mi_carro->obtenerTotal(0.05) . "\n";
// El resultado es 54.29
?>


4
Hola a todos, estoy algo atascado con un problema, bueno ya digo que de javascript no estoy muy puesto. Estoy tratando de crear una clase en javascript que reciba dos parámetros, una con una opcion para que luego PHP carge segun la petición unos combos o selects u otros. El segundo parámetro es que archivo PHP va encargarse de ello, esta claro que hay varios.

Bueno mi idea era esa, tener un script en javascript que intanciara una peticion  XMLHttpRequest y luego la hiciera y devolviera un objeto JSON con los datos.

Esta clase o script, no he conseguido hacer de verdad una clase  javascript :'(, pero me funciona, pero con una pega. Tengo que poner un alert para que le de tiempo a cargar el objeto JSON.

Os la pongo:

Código: [Seleccionar]
var objCarg;
   
function ConexionAJAX(archivo, opcion) {
           
               
     this.crearConexionAJAX =  function devuelvoConexionAJAX() {
     
            if(window.XMLHttpRequest){
                peticion = new XMLHttpRequest();
            }else if (window.ActiveXObject){
                peticion= new ActiveXObject('Microsoft.XMLHTTP');
                }
           
            peticionCargar =  peticion;
            peticionCargar.onreadystatechange = cargoDatosConexion;
//Aqui le digo que archivo PHP se va a encargar de trabajar e
            peticionCargar.open("POST", "../Controlador/Elementos_AJAX/"+archivo, true);
            peticionCargar.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
//Dentro de cada archivo hay varios if, dependiendo de la opcion se encarga un metodo o otro
            peticionCargar.send(opcion);
           
           
        function cargoDatosConexion() {
                         
            if(this.readyState === READY_STATE_COMPLETE && this.status === 200){
                //funciona
                try{
                    objCarg = JSON.parse(peticionCargar.responseText);
                   
                } catch(e){
                   
            }
               
            } 
           
                       
        }
             //alert('dddd'); si descomento funciona perfecto
            return objCarg;
    };
           
   };
   
    Bueno lo llamo asi desde cualquier script:

Código: [Seleccionar]
    var conRegistrarse  = new ConexionAJAX('cargarElementos.php?"', "opcion=PG");
//Metodo que javascript que carga los options para verlos
            cargarGeneroRegistrarse(conRegistrarse.crearConexionAJAX());
            delete conRegistrarse;

Sé que el problema esta que cuando creo la instancia el metodo:

    peticionCargar.onreadystatechange = cargoDatosConexion;

No tienen tiempo a recuperar los datos, ya que el script no se para a esperarlos  ;D, por eso si descomento el alert devuelve undefined.

A mi me gustaria poder hacer que el metodo principal:

 this.crearConexionAJAX =  function devuelvoConexionAJAX()

me devolviera el objeto ya cargado JSON, osea return objCarg. Pero se me ha atragantado  :-\.

Supongo que haciendo una clase de verdad se podría solucionar esto. ¿Alguna ayuda?

5
Pues me gustaría saber si alguien me puede explicar una parte de un método que no llego a entender. La verdad que en C no estoy muy puesto. Mejor comento lo que comprendo y me explicais la parte que tengo en duda. Pongo el método:

Código: [Seleccionar]

//HIJOS PARALELOS
void ejemplo2(){
    NUM_HIJOS = 3; // ejemplo
    int ret, i;
 
for (i=0; i<NUM_HIJOS; i++) {
ret = fork(); //Aqui generamos un nuevo proceso
if (ret == 0) {
/* estamos en alguno de los hijos. */
printf("Yo soy el hijo %d, mi padre es PID= %d, yo soy PID= %d\n", i,getppid(), getpid());

                      //Este exit solo acaba el proceso en ejecución
                      //ya que el bucle si hace 3 ciclos
exit(EXIT_SUCCESS);
               
              //Solo si hay un error al crear el proceso
} else if (ret == -1) {
perror("fallo en fork");
exit(EXIT_FAILURE);
}
       //fin for
}

        //aqui llega despues de crear el proceso hijo por la linea de antes de
        //exit(EXIT_SUCCESS);
ret = wait(NULL); // ¿¿¿ ret vale -1 ????

       //A partir de aqui no lo entiendo
      //A mi forma de ver aqui nunca entraría
while (ret > 0) {
ret = wait(NULL);
}
/*Esto tampoco lo entiendo*/
if (ret == -1 && errno != ECHILD) {
perror("fallo en wait");
exit(EXIT_FAILURE);
}
}   

   No se si me expliado, la verdad.

6
Hola a todos, tengo un problema al llamar a esta función, es un ejemplo de crear varios procesos:

Como se puede ver espera un primer parametro int y un array tipo char.


Código: [Seleccionar]
void crearPadreHijo(int argc, char argv[]){

   if(argc != 2) {
        printf("Numero de parametros incorrectos. Uso: %s [entero]\n",argv[0]);
        exit(EXIT_FAILURE);
    }

    int var=atoi(argv[1]);
    printf("Entrada: %d\n",var);

    int ret;
    ret=fork();
    if(ret>0) {
        /* tratamiento del padre */
        var+=2;
        printf("Padre: %d\n",var);
        wait(NULL);
    }
    else if(ret == 0) {
        /* tratamiento del hijo */
        var-=4;
        printf("Hijo: %d\n",var);
                exit(EXIT_SUCCESS);

    }
    else if(ret == -1) {
        perror("Fallo en fork()\n");
        exit(EXIT_FAILURE);
    }


}

Desde main hago:

char arr[10];
    arr[0] = "1";

    crearPadreHijo(2, arr);

Y al compilar me responde:

main.c: In function ‘crearPadreHijo’:
main.c:103:3: warning: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘int’ [-Wformat=]
   printf("Numero de parametros incorrectos. Uso: %s [entero]\n",argv[0]);
   ^
main.c:107:2: warning: passing argument 1 of ‘atoi’ makes pointer from integer without a cast [enabled by default]
  int var=atoi(argv[1]);
  ^
In file included from main.c:15:0:
/usr/include/stdlib.h:147:12: note: expected ‘const char *’ but argument is of type ‘char’
 extern int atoi (const char *__nptr)
            ^
main.c: In function ‘main’:
main.c:143:12: warning: assignment makes integer from pointer without a cast [enabled by default]
     arr[0] = "1";
            ^

He probado de varias maneras y no consigo que funcione.

7
Bueno, despues de pelearme un par de días con el tema, he conseguido mandar correos a hotmail, yahoo. Pero a los gmail imposible!!!

El problema que el dominio no-ip va directo al puerto 80 y no al 25. Osea básicamente no pasa por mi dns bind. Entonces aunque meta un SPF o instale el DKIM parece que ser que ni los lee.

De todas formas si alguien ha conseguido hacerlo pos na que se anime.

8
Holaa todos estoy tratando de que apache al poner localhost me redirija a un directorio por ejemplo /var/www/html/xxx

Llevo un rato intentandolo pero no consigo hacerlo. Modifico en apache2.conf  esto:

<Directory /var/www/html/xxx>
   Options Indexes FollowSymLinks
   AllowOverride None
   Require all granted
   Allow from all
</Directory>

y luego en sites-enabled modiico el 000-default.conf y le pongo:
    DocumentRoot /var/www/html/xxx

Pero cuando intento entrar me dice Forbidden You don't have permission ...

¿Alguna idea como podría hacerlo?

9
Hola Ogramar, he visto ese hilo pero no es mi caso.También he visto un hilo en la sección e todo un poco. Mi problema es que gmail,hotmail para reconocer mi correo piden tener instalado SPF  y DKIM. Lo he hecho segun los posts que he puesto pero parece ser que hago algo mal. Al validar el SPF o el DKIM no me los valida correctamente.
Al parecer es cosa del dns.

Pongo el archivo dns para ver si alguien lo ha intentado y le ha salido.


@               IN   NS      changes.ddns.net.
@               IN   A      192.168.1.100
@               IN   MX   10   mail.changes.ddns.net.
changes.ddns.net.         IN   TXT      "v=spf1 mx a"
changes.ddns.net.          IN    SPF       "v=spf1 a mx ptr ~all"
_domainkey.changes.ddns.net.       IN    TXT       "o=~; r=calos@changes.ddns.net"
mail._domainkey.changes.ddns.net.   IN   TXT           "v=DKIM1; k=rsa;"     "p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDFhhSlYNV/0x2pLZXwAmSJHCUWhFNaIqum6t7PHg5WtzH0HFsLmLf/MjcOtT8Dy/nHvMAGBwlbqqG8iBlu/klKVrjjinp8R0gy+Hn3koGtz8eJnFN7QTIFYqdC0+qaTb+bS4XMpf8rfbL2TRTW2n9i2iwaeof/7kM/uDO1fa18oQIDAQAB;"
server               IN   A      192.168.1.100
server.changes.ddns.net         IN   A      192.168.1.100
pc1.changes.ddns.net.         IN   A      192.168.1.200
www               IN   A      192.168.1.100
mail.changes.ddns.net.         IN   A      192.168.1.100
changes.ddns.net.         IN   A      192.168.1.100

10
Hola Ogramar. Mi error no es ese. Yo he instalado squirrelmail en mi ubuntu, y tengo un dominio en no-ip que me redirige el correo. He instalado opendKim y he hecho un SPF. Os pongo enlace que he seguido:

https://blog.unlugarenelmundo.es/2014/03/03/evita-que-tus-correos-sean-marcados-como-spam-usando-registros-ptr-spf-y-dkim/

Por el tema de no-ip el siguiente:
https://foro.elhacker.net/dudas_generales/email_server_con_host_de_noip-t430564.0.html

Tambien le he cambiado el puerto del 25 al 2525 a protfix y al router. Y nada, no lo consigo.

11
Hola a todos, he instalado webmail como servidor de correo. Me funciona perfeto con hotmail, 'eso si los correos van a SPAM 'pero con gmail no me funciona, me devuelve un correo que más enos dice:

Action: failed
Status: 5.7.1
Remote-MTA: dns; gmail-smtp-in.l.google.com
Diagnostic-Code: smtp; 550-5.7.1 [60.210.120.03       1] Our system has
    detected an unusual rate of 550-5.7.1 unsolicited mail originating from
    your IP address. To protect our 550-5.7.1 users from spam, mail sent from
    your IP address has been blocked. 550-5.7.1 Please visit 550-5.7.1
    https://support.google.com/mail/?p=UnsolicitedIPError to review our 550
    5.7.1 Bulk Email Senders Guidelines. qf11si38849529wjb.173 - gsmtp

¿Le ha pasado a alguien? ¿Como podría solucionarlo?

12
Estoy probando un código y no me funciona os lo pongo:

Código: [Seleccionar]
funcion_rellenaVector( int n_elem, int* vector){

int i;
  for ( i=0; i<n_elem; i++ ){
  //vector[i] = 0; //si funciona
*(vector++)= 0;//Avanzamos la posicion del vector, pero no funciona
printf("Vector: %d \n\n", vector[i]);
}
}

main{
int otro_vector [100];

  /* rellena los elems. del 150 al 199 */
  rellena_de_ceros ( 50, otro_vector+150 );
}
}

¿Que esta mal en esa linea,? Como ++ tiene más preferencia que * lo he puesto asi, pero no me funciona.

13
He puesto al principio tambien #include <string.h> pero sigo sin poder crear una variable tipo string

14
Hola Orgranimar, mira te pongo una captura de lo que me pasa.

Código: [Seleccionar]
#include <stdio.h>
#include <stdlib.h>

letras(){

string letras = "casa";
printf("%s", letras);
}

int main (int argc, char *argv[]) {
letras();
 }

15
   Hola a todos, estoy haciendo un programa en c# no c++. Y la verdad que estoy un poco  :o. Nunca he usado c#, yo he usado java y php y estoy teniendo problemas para trabajar con strings.
   No puedo crear variables tipo string, y cuando creo una variable tipo char, por ejemplo :

Código: [Seleccionar]
    char c[5] = "casa";


  no se como mostar todo su valor en un printf. Como puedo trabajar con variables tipo string

16
   Hola a todos, tengo un problema con javascript. Quiero usar dos archivos que al cargarse en el evento onload recojan valores y cargen combos, selects, etc de archivos php. Sorpresa ha sido cuando si en dos scripts js pones el evento onload solo se carga, 'por decirlo asi' el ultimo.

   Entonces me preguntaba si habia una forma de recojer todas las variables que fuera a necesita en un archivo JS, como elementos html para utilizarlos en eventos, su contenido etc, y poder usarlo en varios scripts JS.

   Mi intencion era tener un script que cargara todos los selects, combobox etc, y luego varios scripts para hacer con ello lo que quisiera. Pero al poner el onload en cada script solo se me carga el ultimo.

   ¿Como podría recojer esos elementos html o su contenido en cada script que yo quisiera?

   No se si me explico.

17
   Bueno aqui tengo una solución, a mi me funciona, es sencillo. El código queda asi:

Código: [Seleccionar]

$sqlBuscador="Select palabra from pbs_queridas where palabra like :buscar limit 5";   
                   
     
                $stm4Bus = $con->prepare($sqlBuscador);
                $stm4Bus->bindValue(":buscar",[b] "{$buscar}%"[/b], PDO::PARAM_STR);
                $stm4Bus->execute();
                $tmp3 = $stm4Bus->fetchAll();
               

18
Hola a todos estoy intentando hacer una sentencia preparada que usa un string, el problema es que quiero usar los comodines tipo %.

Os pongo un trozo de codigo para que os hagais una idea:

Código: [Seleccionar]
$sqlBuscador="Select palabra from pbs_queridas where palabra like  [b]:buscar%[/b] limit 5";   
                   
               
                $stm3 = $con->prepare($sqlBuscador);
                $stm3->bindValue(":buscar", $buscar, PDO::PARAM_STR);
                $stm3->execute();
                $tmp3 = $stm3->fetchAll();

   Como veias el :buscar recive un string pero en la select yo quiero usar el comodin %. Pero he probado de varias formas y me da error.

20
Bueno, yo pongo una solución pero no es nada elegante:

Código: [Seleccionar]
var tmp;
           for (var i =0; i < objSlider[1].length; i++){
           tmp += '<li>'+objSlider[1][i].palabras+'</li>';
                }
           $('#lista').append(tmp);

Páginas: [1] 2 3 4 5

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".