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ú

Mensajes - gAb1

#151
PHP / Re: ajax recibir daros
24 Mayo 2016, 22:33 PM
Ah! Fallo mio, el copia pega xD gracias AlbertoBSD por darte cuenta.

Código (javascript) [Seleccionar]
$.post('mensaje.php?op=1', { mensaje: mensaje } );

No dije nada sobre comprobar la variable porque creia que ya lo tendria controlado. De todas maneras lo pongo que no cuesta nada:

Un mínimo de seguridad sería:

Código (php) [Seleccionar]
$mensaje = filter_input(INPUT_POST, 'mensaje', FILTER_SANITIZE_STRING);

Aunque sería mucho más seguro si usaras prepared statements.
#152
En todo desarrollo llega la hora en la que nos preguntamos de qué manera hacer nuestra aplicación más eficiente, hacer las cosas de manera que suponga la menos carga posible para el servidor.

Actualmente estoy seleccionando y mostrando; a veces es una sola fila y otras hay un limite, pero hay un apartado en el que envio todas las filas al plugin JQuery DataTables. Bueno, todas las filas pero no todas las columnas, solo las necesarias y la verdad es que tendrían que ser muchas filas (como 1000 aunque no tengo ni idea) para que empezase a afectar no solo al cliente, si no al servidor tambien cuando hayan varios usuarios pidiendo a la vez.

Me gustaría saber si realmente vale la pena cachear los datos y donde sería mejor, si en una clase de php, en memcached (es el que estoy usando) o incluso en el propio cliente (he leido algo pero no estoy seguro de si se puede hacer).

En el caso de usar una clase php para cargar todas las filas supongo que tendría que convertir la navegación de mi web a AJAX para no tener que recargar todas las filas cada vez (osea que no serviria de nada la clase).

¿Teneis alguna idea más?

Gracias!
#153
PHP / Re: ajax recibir daros
24 Mayo 2016, 21:13 PM
El código debería funcionar bien, no veo ningún fallo.

Para este tipo de casos tienes que hacer debug: pon un alert(mensaje) en el script y mira si al hacer click en enviar se muestra el mensaje que pusiste. Si se muestra, habrá que ver si se está enviando el mensaje por post al archivo mensaje.php, para ello pon un echo $mensaje en dentro del primer if y otro alert(data) en el script enviar.js:

Código (php) [Seleccionar]
if ($op === 1) {
   $nombre  = $_SESSION['usuario'];
   $mensaje = $_POST['mensaje'];
   echo $mensaje;/*
   mysqli_query($link, "INSERT INTO chat (nombre, mensaje) VALUES('$nombre', '$mensaje')");
   mysqli_close($link);*/

}


Código (javascript) [Seleccionar]
   $(function () {
       $('#boton').on('click', function () {
           var mensaje = $('#mensaje').val(),
               ajax    = $.post('mensaje.php?op=1', { s: mensaje } );
    alert(mensaje);
           ajax.done(function(data) {
    alert(data);/*
               var content = $.get('mensaje.php?op=2');
               $('#contenedor').empty().append( content );
               $('#mensaje').val('');*/
           });
       });
   });


La linea que coge el valor int en el archivo mensaje.php se utiliza para saber si vas a guardar datos en la db o vas a cogerlos. Así no necesitas tener dos archivos, solo 1.
#154
PHP / Re: ajax recibir daros
24 Mayo 2016, 02:20 AM
Te recomiendo que uses JQuery para este tipo de cosas ya que es mucho más sencillo que todo eso que estás haciendo (casi ni lo entiendo  :rolleyes:).

No necesitas usar el elemento form si vas a enviar por ajax, por lo que lo puedes quitar. Tampoco necesitas un input submit, cambialo por un anchor (y por cierto, los inputs hay que cerrarlos):

Código (html5) [Seleccionar]
<div id="contenedor"></div>
<input type="text" id="mensaje" name="mensaje" />
<a id="boton" href="#">Enviar</a>


Esto sería enviar.js:

Código (javascript) [Seleccionar]
$(function () {
   $('#boton').on('click', function () {
       var mensaje = $('#mensaje').val(),
           ajax    = $.post('mensaje.php?op=1', { s: mensaje } );
           
       ajax.done(function() {
           var content = $.get('mensaje.php?op=2');
           $('#contenedor').empty().append( content );
            $('#mensaje').val('');
       });
   });
});


Y esto mensaje.php (ingresar.php y cargar.php juntos):

Código (php) [Seleccionar]
<?php

session_start
();

require(
'connect_db2.php');

$op = (int) $_GET['op'];

if (
$op === 1) {
    
$nombre  $_SESSION['usuario'];
    
$mensaje $_POST['mensaje'];

    
mysqli_query($link"INSERT INTO chat (nombre, mensaje) VALUES('$nombre', '$mensaje')");
    
mysqli_close($link);

} else if (
$op === 2) {
    
$color '#320EF8';

    function 
mostrarDatos($resultados$color) {
        if(
$resultados !== NULL) {
            
$mensaje '<p style="display: inline; color: ' $color '; font-size: 120%; margin-left: 8px;">' $resultados['nombre'] . ': </p>' .
                       
$resultados['mensaje'] . '<br /><hr><br />';
        } else 
$mensaje '<br />No hay mas datos<br />';

        return 
$mensaje;
    }

    
$result mysqli_query($link'SELECT * FROM chat');

    while (
$fila mysqli_fetch_array($result)) {
        echo 
mostrarDatos($fila$color);
    }

    
mysqli_free_result($result);
    
mysqli_close($link);
}

?>
#155
PHP / Re: Registro PHP
24 Mayo 2016, 00:23 AM
El propio término lo está diciendo:

Un valor solo es idéntico a si mismo. Quiere decir que no solo el valor es el mismo, si no que el tipo (string, entero, boolean, flotante, etc...) también.

Ejemplos de diferentes tipos de valores:

Código (php) [Seleccionar]
$string = '123';  // valor del tipo string
$integer = 123; // valor del tipo entero
$boolean = FALSE; // valor del tipo booleano

// TRUE - se cumple la condición
echo $string == $string ? 'si<br />' : 'no<br />';
echo $integer == $integer ? 'si<br />' : 'no<br />';
echo $string === $string ? 'si<br />' : 'no<br />';
echo $integer === $integer ? 'si<br />' : 'no<br />';

echo $string == $integer ? 'si<br />' : 'no<br />';

// FALSE - no se cumple
echo $string === $integer ? 'si<br />' : 'no<br />';


En el ejemplo podemos ver que:

- $string es igual a $integer.

Sin embargo:

- $string no es idéntico a $integer.
#156
PHP / Re: Registro PHP
23 Mayo 2016, 18:24 PM
La siguiente linea es imprescindible a la hora de desarrollar una web, ponla al principio de tu index.php:

Código (php) [Seleccionar]
ini_set('display_errors', 1);

Echale un vistazo a las tablas donde se explican los distintos tipos de comparación, si vas a comparar dos valores del tipo entero (o booleanos) usa 3 =

Código (php) [Seleccionar]
if ($valid_user === 0)
if ($valid_user === TRUE)


En el manual de php encontrarás todo lo que necesites, además en la sección de comentarios tendrás mejores explicaciones y ejemplos más avanzados (y útiles).
#157
El otro dia se dió soporte al protocolo http/2 con apache "2.4.20 (Red hat)" en kloxo-mr7 pero al parecer no funciona, lo estoy probando en una de mis webs y no se activa (sigo viendo http/1.1.

¿Hay alguien usando http/2 con apache en CentOS? Si os funciona tal vez sea un fallo en la configuración del kloxo-mr 7 o alomejor es un problema del paquete o a saber que.

Por si os interesa, está funcionando perfectamente con nginx y nginx-proxy.

Gracias.
#158
PHP / volver a instanciar dentro de la clase
23 Mayo 2016, 03:06 AM
Tengo una pequeña duda sobre una clase. Me gustaría saber por qué es necesario volver a instanciar la clase para llamar a los setters y por qué se usa el while si hay un LIMIT 1 en la query además de que no veo necesidad para un array:

Código (php) [Seleccionar]
class myClass {

private $variable_1;
private $variable_2;
private $variable_3;

private function generate($myClass) {
   $this->variable_1 = $myClass->variable_1;
   $this->variable_2 = $myClass->variable_2;
   $this->variable_3 = $myClass->variable_3;
}

private function addInformation($stmt) {
   $i = 0;
   $stmt->bind_result($variable_1, $variable_2, $variable_3);

   while ($stmt->fetch()) {
       $arrayStaff[$i] = new myClass();
       $arrayStaff[$i]->setVariable1($variable_1);
       $arrayStaff[$i]->setVariable2($variable_2);
       $arrayStaff[$i]->setVariable3($variable_3);
       $i++;
   }

   return $arrayStaff;
}

public function StaffFromId($id) {
   $mysqli = $this->aet->getAetSql();
   $exit   = FALSE;

   if ($stmt = $mysqli->prepare("SELECT * FROM staff WHERE id = ? LIMIT 1")) {
       $stmt->bind_param('i', $id);
       $stmt->execute();
       $stmt->store_result();

       if ($stmt->num_rows === 1) {
           $arrayStaff = $this->addInformation($stmt);
           $this->generate($arrayStaff[0]);
           $exit = TRUE;
       }
   }

   return $exit;
}

public function setVariableX($variable_X) {
   $this->variable_X = $variable_X;
}

public function getVariableX() {
   return $this->variable_X;
}

}


Si no me equivoco lo siguiente también funciona y no hace falta tener 2 funciones que hacen lo mismo, no?

Código (php) [Seleccionar]
private function addInformation($stmt) {
   $stmt->bind_result($variable_1, $variable_2, $variable_3);

    $stmt->fetch();

   $this->setVariable1($variable_1);
   $this->setVariable2($variable_2);
   $this->setVariable3($variable_3);
}


O directamente:

Código (php) [Seleccionar]
$this->variable_1 = $variable_1;

Mi conocimiento todavia es limitado por lo que ¿hay alguna razón por la que se hizo eso asi? ¿Tal vez implementar más cosas que necesiten eso? La clase la hizo un amigo con el que no he podido volver a hablar.

Gracias!
#159
PHP / Re: Usuario Php
23 Mayo 2016, 02:34 AM
¿Como estás iniciando la sesión? Un simple session_start() con los valores default seguro...

En adición a setcookie() crea una función que configure la sesión como quieras y tambien hay que renovarla cada 30 min (es lo recomendado):

En el siguiente orden:

- Crear tus parametros de cookie (nombre, dominio, etc) y obtenen los actuales con (session_get_cookie_params()) para usar los que quieras dejar por defecto.
- Cambiar los parametros de la cookie actuales (session_set_cookie_params()) pasandole tus parametros y los que quieras dejar por defecto como argumentos (en el orden que indica la documentación).
- Darle nombre a la sesión (session_name()).
- Empezar sesión (session_start()).
- Crear una variable de sesión asignandole time() para saber cuando fue creada, pero comprobando primero que no exista ya.
- Comprobar si la sesión fue creada hace más de 30 min (18000 segundos), usando la variable anteriormente creada, y regenerar la sesión (session_regenerate_id()). Actualizar la variable de sesión que contiene time().

Cualquier duda o problema con tu función, muestranosla y te ayudaremos.

Una vez tengas tu función creada, la llamas al principio de tu index.php, en lugar de session_start().
#160
PHP / Re: ajax recibir daros
23 Mayo 2016, 00:42 AM
JQuery tiene una función llamada serializeArray que guarda el formulario en un array con el nombre del elemento y el valor. Luego simplemente con la función post envias el array y puedes actualizar el div con la respuesta del servidor.