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 - iGust4v0x

#1
Java / Re: Unificar código en clase abstracta
15 Enero 2015, 13:22 PM
Teóricamente no. Una clase puede no puede recibir ningún tipo de dato de sus hijos, a no ser que instances las clases hijas en la clase padre, pero eso rompería toda lógica.

Podrías crear una tercera clase (una POJO), con sus setters y getters para guardar y obtener información. Si quieres que sólo exista una instancia de dicha clase, podrías implementarlo como un singleton; ésto es, una clase de la que solo exista una instancia que será compartida por todas las clases.

Saludos.
#2
¿Por curiosa quieres decir un desastre? jajaja
#3
Muchas gracias por responder @MinusFour (Y).

Voy a replantear la lógica de la vista como me aconsejas y cualquier problema que tenga (abusando de su confianza xD) actualizaré el post.

Un saludo.




Al fín pude solucionar el problema, y todo empezó por la idea de @MinusFour (gracias).

Código (php) [Seleccionar]
if($_SESSION["is-search"] === TRUE) {

   unset($_SESSION["users"]);
   $text = $_REQUEST["text"];

   $query = "SELECT * FROM user WHERE MATCH(userId,names,surnames,dni,address,phone,email)
   AGAINST('$text')";
   $usersFinded = UserService::getInstance()->query($query);

   while($row = mysqli_fetch_array($usersFinded)) {
       $_SESSION["users"][] = $row;
   }

   header('ContentType: application/json');
   echo json_encode(array("ususarios" => $_SESSION["users"]));
}

if($_SESSION["is-search"] === FALSE ) {
   unset($_SESSION["users"]);
   $allUsers = UserService::getInstance()->selectAll();
   while($row = mysqli_fetch_array($allUsers)) {
       $_SESSION["users"][] = $row;
   }
}


Código (javascript) [Seleccionar]
var word = $(this).val();
var dataToSend = JSON.parse('{"text": "'+word+'"}');

$.ajax(
{
url: "app/utils/user/search-users.php",
dataType: "json",
data: dataToSend,
type: "GET",
}
)


Decidí usar variables de sesión para guardar los usuarios, y un estado para al momento de cargar los datos en la tabla, obtenga los usuarios dependiendo si es una búsqueda o solo una carga de todos los usuarios.

Saludos.

Mod: No hacer doble post.
#4
Java / Re: Unificar código en clase abstracta
14 Enero 2015, 18:28 PM
Se supone que si extiendes 2 clases de una sola, es porque ambas clases necesitan de los métodos y/o propiedades de la clase padre (sea abstracta o no). Además, puedes sobreescribir dichos métodos para aplicar polimorfismo.

Antes que nada un ejemplo:

Código (java) [Seleccionar]
public interface Animal {

   String name();
   void setName(String name);
   void doSomething();
   String description();
}


Código (java) [Seleccionar]
public abstract class AnimalImpl implements Animal {
   
   private String name;
   
   public AnimalImpl(String name) {
       this.name = name;
   }

   @Override
   public String getName() {
       return name;
   }
   
   @Override
   public void setName(String name) {
       this.name = name;
   }
   
   @Override
   public void doSomething();
   
   @Override
   public String description();
   
}


Código (java) [Seleccionar]
public class Dog extends AnimalImpl {
   
   public Dog(String name) {
       super(name);
   }

   @Override
   public void doSomething() {
       System.out.println("Guarf Guarf Guarf!");
   }
   
   @Override
   public String description() {
       return "perro";
   }
   
}


Código (java) [Seleccionar]
public class Cat extends AnimalImpl {
   
   public Cat(String name) {
       super(name);
   }

   @Override
   public void doSomething() {
       System.out.println("Miau maiu miaauuu");
   }
   
   @Override
   public String description() {
       return "gato";
   }
   
}


Código (java) [Seleccionar]
public class Owner {
   
   String name;
   Animal pet;
   
   public Owner() {}
   
   public Owner(String name, Animal pet) {
       this.name = name;
       this.pet = pet;
   }
   
   public String getName() {
       return name;
   }
   
   public void setName(String name) {
       this.name = name;
   }
   
   public Animal getPet() {
       return pet;
   }
   
   public void setPet(Animal pet) {
       this.pet = pet;
   }
   
   @Override
   public String toString() {
       return "Hola, mi nombre es "+name+", mi mascota se llama "+pet.getName()+" y es un "+pet.getDescription()+
       ".\n"+pet.doSomething();
   }
}


Código (java) [Seleccionar]
public class Main {
   public static void main(String[] args) {
       Animal bobby = new Dog("Bobby");
       Animal minina = new Cat("Minina");
       
       Owner guillermo = new Owner("Guillermo", bobby);
       Owner vilma = new Owner("Vilma", minina);
       
       System.out.println(guillermo); // la llamada a toString() es implícita
       System.out.println(vilma);
   }
}


Citar
Output:
Hola, mi nombre es Guillermo, mi mascota se llama Bobby y es un perro.
Guarf Guarf Guarf!

Hola, mi nombre es Vilma, mi mascota se llama Minina y es un gato.
Miau miau miaauuu

Respecto a tu pregunta, si ambos comparten código, el código compartido debería estar en la clase padre. Recuerda, que en una clase abstracta, a diferencia de las interfaces, sí se pueden implementar métodos.


Saludos.
#5
Java / Re: [ayuda] Guardar información - java
14 Enero 2015, 14:37 PM
Código (java) [Seleccionar]
String s = "foo";
  byte[] bytes = s.getBytes();
  StringBuilder binary = new StringBuilder();
  for (byte b : bytes)
  {
     int val = b;
     for (int i = 0; i < 8; i++)
     {
        binary.append((val & 128) == 0 ? 0 : 1);
        val <<= 1;
     }
     binary.append(' ');
  }
  System.out.println("'" + s + "' en binario: " + binary);



http://stackoverflow.com/questions/917163/convert-a-string-like-testing123-to-binary-in-java
#6
Gracias por contestar JorgeEMX.

La misma situación que muestra el screenshot anterior. No consigo hacer funcionar el buscador, bien indicando el dataType en el método ajax() de jQuery o bien obviándolo para no imprimir nada en el HTML.

Saludos.

UPDATE

Solo he agregado éstas líneas a search-users.php:

Código (php) [Seleccionar]
var_dump($_REQUEST);
header('ContentType: application/json');
echo json_encode($_REQUEST);


Y en el JS:

Código (javascript) [Seleccionar]
var dataToSend = JSON.parse('{"text": "'+word+'"}');

$.ajax(
{
url: "app/utils/user/search-users.php",
//dataType: "json",
data: dataToSend,
type: "POST",
}
)
.done(function(data) {
$("#datatable").load("app/views/templates/users-table.php");
$("#text-search").focus();
//console.log("Success");
console.log(data);



Screnshot:


Al imprimir el array $_REQUEST que envié devuelta a AJAX, me muestra los datos que estoy digitando. Pero el var_dump que hago en el script PHP, me muestra un array vacío.

Como dije soy nuevo en PHP y no entiendo bien por qué pasa ésto. ¿Si en JS me muestra que $_REQUEST no está vacío, por qué el var_dump me indica que sí?

Un saludo.

UPDATE

Si coloco el dataType y retorno un JSON desde PHP, me muestra parseerror (método fail() de jqXHR de AJAX).

Código (php) [Seleccionar]
if($_SESSION["is-search"] === TRUE) {
    $text = "garcía";
    if(isset($_REQUEST["text"]))
        $text = $_REQUEST["text"];
    $query = "SELECT * FROM user WHERE MATCH(userId,names,surnames,dni,address,phone,email)
        AGAINST('".$text."')";
    $users = UserService::getInstance()->query($query);
    var_dump($_REQUEST);
    header('ContentType: application/json');
    $response = array("request" => json_encode($_REQUEST));
    echo json_encode($response);
}


Código (javascript) [Seleccionar]
$.ajax(
{
url: "app/utils/user/search-users.php",
dataType: "json",
data: dataToSend,
type: "POST",
}
)


La consola muestra (imprimo el textStatus en el método fail): parseerror
#7
Gracias por responder. Respecto a tus recomendaciones, eso lo tengo claro. Soy newbie en PHP pero tengo algo de experiencia en el mundo JEE.

Me disculparás las, quizás, estupideces que hago en PHP, pero es que recién no llevo ni una semana con el lenguaje xD.

Lo que pasa es que si retorno un objeto JSON de vuelta a a llamada AJAX, como se hace por medio de 'echo', el objeto JSON se va a imprimir en pantalla (ver imagen más abajo), y eso queda fuera de lugar.

Según tengo entendido, obviando el parámetro dataType no es obligatorio devolver el JSON desde PHP, y eso es lo que pretendo hacer.

Actualizaciones de código:

ajax.js

Código (javascript) [Seleccionar]
$.ajax(
{
url: "app/utils/user/search-users.php",
dataType: "json",
data: {text: "García"},
type: "GET",
}
)
.done(function(data) {
$("#datatable").load("app/views/templates/users-table.php");
$("#text-search").focus();
               ....


search-users.php

Código (php) [Seleccionar]
$users = null;
if($_SESSION["is-search"] === TRUE) {
   $text = $_GET["text"];
   $query = "SELECT * FROM user WHERE MATCH(userId,names,surnames,dni,address,phone,email)
       AGAINST('".$text."')";
   $users = UserService::getInstance()->query($query);
}
$response = array("mensaje" => "Respuesta");
echo json_encode($response);


Screenshot:

#8
Buenas noches. Tengo un pequeño problema con AJAX y PHP.

Lo que intento realizar un buscador en tiempo real, como el de AngularJS. Lo que deseo que haga es lo siguiente:

  • Enviar un objeto JSON por medio de AJAX hacia un script PHP.
  • El retorno de datos quiero que sea opcional (actualmente, si no retorno un json desde mi script PHP con json_encode($array_asociativo), me lanza un parserrror.
  • Una vez obtenido el dato del objeto JSON realizar una consulta a la BD para buscar matches (full text).
  • En el método done() del método AJAX de jQuery, recargar la tabla por medio del método load("path/to/file.php").

    Nota: Si le pongo dataType: "json" y no devuelvo nada en el script PHP me genera un parserror y el AJAX falla.

    Bien, mi estructura de fichers es la siguiente:

    ROOT -> app y public
    app -> views -> templates -> users-table.php
    public -> js, css, img e index.php

    index.php

    Código (php) [Seleccionar]
    <?php
    require_once($_SERVER["DOCUMENT_ROOT"]."/UsuariosCRUD/app/utils/path-dirs.php");
    session_start();
    if(!isset(
    $_SESSION["is-search"])) {
    $_SESSION["is-search"] = FALSE;
    }
    ?>

    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>CRUD Usuarios PHP - AJAX</title>
    <link rel="stylesheet" href="public/css/usuarios.css"/>
    <link rel="icon" href="public/img/favicon2.ico"/>
    </head>
    <body>
    <header class="header">
    <nav class="navbar">
    <h1 class="header-title">CRUD de usuarios con PHP y AJAX</h1>
    </nav>
    </header>

    <main class="main">
    <!-- Textfield para filtrar usuarios -->
    <input type="text" id="text-search" class="textfield search" placeholder="Busque un usuario aquí"/>
    <!-- Boton para agregar usuario nuevo -->
    <button type="button" id="new-user" class="btn btn-primary action-option"
    data-action="create-user">Nuevo</button>

    <!-- tabla de usuarios -->
    <section id="datatable">
    <?php
    require_once($app_dir."views/templates/users-table.php");
    ?>

    </section>

    <button type="button" id="destroy-session" class="btn btn-danger"
    style="margin-left: 133px">Resetear</button>

    <!-- ventanas modales -->
    <?php
    require_once($app_dir."views/templates/modal-windows.php");
    ?>

    </main>

    <script src="public/js/destroy-php-session.js"></script>
    </body>
    </html>


    ajax.js

    Código (javascript) [Seleccionar]
    $("#text-search").on("keyup", function() {
    var word = $(this).val();
    console.log(word);
    //var dataToSend = JSON.parse('{"text": "'+word+'"}');
    /*var data = {"text": word};
    dataToSend = JSON.parse(JSON.stringify(data));*/

    $.ajax(
    {
    url: "app/utils/user/search-users.php",
    //dataType: "json",
    data: {text: "García"},
    type: "GET",
    }
    )
    .done(function() {
    $("#datatable").load("app/views/templates/users-table.php");
    $("#text-search").focus();
    console.log("Success");
    })
    .fail(function(jqXHR, textStatus, errorThrown) {
    console.log(textStatus);
    console.log("Fail");
    })
    .always(function(jqXHR, textStatus, errorThrown) {

    });
    });

    });


    search-users.php

    Código (php) [Seleccionar]
    <?php
    if(!isset($_SESSION)) {
        
    session_start();
        
    $_SESSION["is-search"] = TRUE;
    }
    require_once(
    $_SERVER["DOCUMENT_ROOT"]."/UsuariosCRUD/app/utils/path-dirs.php");
    require_once(
    $app_dir."services/user/UserService.class.php");


    // obtiene los usuarios de la bd
    $users null;
    if(
    $_SESSION["is-search"] === TRUE) {
        
    $text $_GET["text"];
        
    //$text = "garcia";
        
    $query "SELECT * FROM user WHERE MATCH(userId,names,surnames,dni,address,phone,email)
            AGAINST('garcía')"
    ;
        
    $users UserService::getInstance()->query($query);
    }


    users-table.php

    Código (php) [Seleccionar]
    <?php
    require_once($_SERVER['DOCUMENT_ROOT'].'/UsuariosCRUD/app/utils/path-dirs.php');
    if(!isset(
    $_SESSION)) {
        
    session_start();
    }
    if(
    $_SESSION["is-search"] === TRUE)
        require_once(
    $app_dir."utils/user/search-users.php");
    else
        require_once(
    $app_dir.'utils/user/obtener-usuarios.php');
    ?>

    <table id="table" class="table" style="width: auto; margin: 10px auto">
       <thead>
           <tr>
               <th>ID</th>
               <th>Nombres</th>
               <th>Apellidos</th>
               <th>DNI</th>
               <th>Dirección</th>
               <th>Teléfono</th>
               <th>Email</th>
               <th>Acción</th>
           </tr>
       </thead>
       <tbody>
           <?php
            $actionLinks 
    =
            
    '<a class="action-option" data-action="user-info">'.
            
    '<span class="nowrap"><span class="icon icon-info icon-margin icon-info-margin"></span></span>'.
            
    'Ver'.
            
    '</a>'.
            
    '<a class="action-option" data-action="edit-user">'.
            
    '<span class="nowrap"><span class="icon icon-edit icon-margin"></span></span>'.
            
    'Editar'.
            
    '</a>'.
            
    '<a class="action-option" data-action="drop-user">'.
            
    '<span class="nowrap"><span class="icon icon-drop icon-margin icon-drop-margin"></span></span>'.
            
    'Remover'.
            
    '</a>';
            
    $rowIndex 1;
            while(
    $row $users->fetch_assoc()) {
                echo 
    "<tr data-row-index=".$rowIndex.">";
                echo 
    "<td>".$row["userId"]."</td>";
                echo 
    "<td>".$row["names"]."</td>";
                echo 
    "<td>".$row["surnames"]."</td>";
                echo 
    "<td>".$row["dni"]."</td>";
                echo 
    "<td>".$row["address"]."</td>";
                echo 
    "<td>".$row["phone"]."</td>";
                echo 
    "<td>".$row["email"]."</td>";
                echo 
    "<td>".$actionLinks."</td>";
                echo 
    "</tr>";
                
    $rowIndex++;
            }
            
    ?>

       </tbody>
    </table>



    Screenshot:





    Gracias.