Ver mensagens sem resposta | Ver tópicos ativos Hoje é 18 Dez 2017, 04:15



Responder Tópico  [ 10 Mensagens ] 
 Acesso a WebService PHP + MySQL 
Autor Mensagem
Google employee
Google employee

Data de registro: 01 Jul 2013, 13:45
Mensagens: 2688
Localização: Rio de Janeiro
Mensagem Acesso a WebService PHP + MySQL
Recentemente precisei de um WebService, e como tinha começado a estudar php decidi usar essa linguagem pra fazê-lo.
Vou postar aqui pro pessoal que precisar futuramente. Os projetos php e java foram feitos no Eclipse, e estarão no final do tópico.

Pra manter tudo bem organizado no WebService, criei os arquivos delete, login, register, update e UserDao, todos com extensão .php.

delete.php


<?php

include 'UserDao.php';

header('Content-type : application/json');

if (isset($_POST['id'])) {
    $id = $_POST['id'];
   
    $dao = new UserDao();
    $dao->delete($id);
    echo 'Usuário deletado';
}
 


login.php


<?php

include 'UserDao.php';

header('Content-type : application/json');

if (isset($_POST['username']) && isset($_POST['password'])) {
    $dao = new UserDao();
   
    $username = $_POST['username'];
    $password = $_POST['password'];
   
    $user = $dao->get($username, $password);
   
    if ($user === 'null') {
        echo 'Login Errado.';
    } else {
        echo json_encode($user);
    }
   
}
 


register.php


<?php

include 'UserDao.php';

header('Content-type: application/json');

if (isset($_POST['userjson'])) {
    $userjson = json_decode($_POST['userjson']);
    $dao = new UserDao();
   
    if ($dao->exists($userjson)) {
        echo "Esse nome de usuário já existe.";
    } else {
        $dao->insert($userjson);
        echo 'Usuário cadastrado.';
    }
}
 


update.php


<?php

include 'UserDao.php';

header('Content-type: application/json');

if (isset($_POST['userjson'])) {
    $userjson = json_decode($_POST['userjson']);
    $dao = new UserDao();
   
    $dao->update($userjson);
    echo 'Usuário atualizado.';
}
 


UserDao.php


<?php

class UserDao {
   
    private $mysqli;
    private $table = 'users';
   
    public function exists($user) {
        $query = $this->mysqli->query("select * from $this->table");
        $exists = false;
       
        $value = array();
       
        while ($value = mysqli_fetch_assoc($query)) {
            if ($value['username'] === $user->username) {
                $exists = true;
                break;
            }
        }
        return $exists;
    }
   
    public function insert($user) {
        $username = $this->mysqli->escape_string($user->username);
        $password = sha1($this->mysqli->escape_string($user->password));
        $name = $user->name;
        $email = $user->email;
       
        $query = "insert into $this->table (username, password, name, email)
            values('$username', '$password', '$name', '$email')"
;
       
        $this->mysqli->query($query);
    }
   
    public function get($_username, $_password) {
        $username = $this->mysqli->escape_string($_username);
        $password = sha1($this->mysqli->escape_string($_password));
       
        $query = $this->mysqli->query("select * from $this->table where username='$username' and password='$password'");
       
        if (mysqli_num_rows($query) === 0) {
            return 'null';
        }
        return mysqli_fetch_assoc($query);
    }
   
    public function update($user) {
        $id = $user->id;
       
        $username = $user->username;
        $password = $user->password;
       
        $name = $user->name;
        $email = $user->email;
       
        $query = "update $this->table set username='$username', password='$password',
            name='$name', email='$email' where id=$id"
;
   
        $this->mysqli->query($query);
    }
   
    public function delete($id) {
        $this->mysqli->query("delete from $this->table where id=$id");
    }
   
    public function __construct() {
        $this->mysqli = new mysqli('localhost', 'username', 'password', 'databasename');
    }
   
}
 



Na classe UserDao, o métodos insert e get estão criptografando a senha com SHA-1, mas poderia ser em md5, base64 ou uma própria.
Esses são os arquivos php. No projeto java que vai consumir essas informações possuem apenas 3 classes.


User.java


package br.lanzieri.clientwebservice;

/**
 *
 * @author Kaito
 */

public class User {
   
    public long id = 0;
   
    public String username = "";
    public String password = "";
   
    public String name = "";
    public String email = "";
   
    @Override
    public String toString() {
        return "id=" + id + "\n" + "username=" + username + "\n" +
            "password=" + password + "\n" + "name=" + name + "\n" +
            "email=" + email;
    }
   
}
 



Utilitary.java


package br.lanzieri.clientwebservice;

import com.google.gson.Gson;

import java.io.BufferedReader;
import java.io.Closeable;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;

/**
 *
 * @author Kaito
 */

public class Utilitary {
       
    public static String encodeLogin(String username, String password) throws UnsupportedEncodingException {
        StringBuilder sb = new StringBuilder();
       
        sb.append(URLEncoder.encode("username", "UTF-8"));
        sb.append("=");
        sb.append(URLEncoder.encode(username, "UTF-8"));
        sb.append("&");
        sb.append(URLEncoder.encode("password", "UTF-8"));
        sb.append("=");
        sb.append(URLEncoder.encode(password, "UTF-8"));
       
        return sb.toString();
    }
   
    public static String encodeUser(User user) throws UnsupportedEncodingException {
        StringBuilder sb = new StringBuilder();
       
        sb.append(URLEncoder.encode("userjson", "UTF-8"));
        sb.append("=");
        sb.append(URLEncoder.encode(new Gson().toJson(user), "UTF-8"));
       
        return sb.toString();
    }
   
    public static String encodeId(long id) throws UnsupportedEncodingException {
        StringBuilder sb = new StringBuilder();
       
        sb.append(URLEncoder.encode("id", "UTF-8"));
        sb.append("=");
        sb.append(URLEncoder.encode(String.valueOf(id), "UTF-8"));
       
        return sb.toString();
    }
   
    private static void close(Closeable cls) {
        try {
            cls.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
   
    public static String inputStreamToString(InputStream is) throws IOException {
        InputStreamReader isr = null;
        BufferedReader br = null;
       
        StringBuilder sb = new StringBuilder();
        try {
            isr = new InputStreamReader(is);
            br = new BufferedReader(isr);
           
            String line;
            while ((line = br.readLine()) != null) {
                sb.append(line);
            }
        } finally {
            close(br);
            close(isr);
        }
        return sb.toString();
    }
   
}
 



Main.java


package br.lanzieri.clientwebservice;

import com.google.gson.Gson;

import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;

/**
 *
 * @author Kaito
 */

public class Main {
   
    public static void main(String[] args) throws Exception {
        User user = new User();
       
        user.username = "fulano";
        user.password = "fulano123";
        user.name = "Fulano";
        user.email = "fulano@gmail.com";
       
        System.out.println(registerOrUpdate(user, "register.php"));
       
        user = getUser("fulano", "fulano123");
        user.username = "fulano2015";
       
        System.out.println(registerOrUpdate(user, "update.php"));
       
        user = getUser("fulano2015", "fulano123");
        System.out.println("\n" + user);
    }
   
    private static String registerOrUpdate(User user, String page) throws Exception {
        return getConnectionResponse(page, Utilitary.encodeUser(user));
    }
   
    private static User getUser(String username, String password) throws Exception {
        String response = getConnectionResponse("login.php", Utilitary.encodeLogin(username, password));
        return new Gson().fromJson(response, User.class);
    }
   
    private static String delete(User user) throws Exception {
        return getConnectionResponse("delete.php", Utilitary.encodeId(user.id));
    }
   
    private static String getConnectionResponse(String page, String value) throws Exception {
        URL url = new URL("http://localhost/TestWebService/" + page);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
       
        conn.setDoOutput(true);
        conn.setRequestMethod("POST");
       
        conn.setConnectTimeout(100000);
        conn.setReadTimeout(100000);
       
        try (OutputStreamWriter osw = new OutputStreamWriter(conn.getOutputStream())) {
            osw.write(value);
            osw.flush();
           
            return Utilitary.inputStreamToString(conn.getInputStream());
        } finally {
            conn.disconnect();
        }
    }
   
}
 


O getConnectionResponse() retorna as saídas dos echo's lá do php.
A classe Utilitary possui métodos pra codificar a informação enviada e um pra retornar uma String, lida de um InputStream. Pra converter User -> Json e vice-versa, usei a lib Gson.
O projeto não foi feito pro android, nesse caso pode ser usado alguma lib como Volley ou Retrofit.

Projetos em anexo.

Anexo:
Anexos.7z


Você não tem permissões suficientes para ver os arquivos anexados nesta mensagem.

_________________
Quando seu problema for resolvido, clique na opção Editar no lado superior direito da sua primeira mensagem e coloque [Resolvido] no título.
Se resolveu o problema sozinh@, não esqueça de postar a solução, ela ajuda usuários em buscas no fórum.
Use os marcadores java e xml quando for postar.

Aprenda Java com esta apostila.


14 Mar 2015, 02:01
Perfil WWW
Android application
Android application

Data de registro: 11 Abr 2014, 16:18
Mensagens: 60
Mensagem Re: Acesso a WebService PHP + MySQL
kaito bom dia, desculpe minha ignorância .
nesse tutorial você dividiu o dao em outro arquivo php , assim como o crud certo?

como o php faz acesso a 2 arquivos diferentes

ex: o delete chama o dao que está em outro arquivo php

obrigado


27 Mar 2015, 10:49
Perfil
Google employee
Google employee

Data de registro: 01 Jul 2013, 13:45
Mensagens: 2688
Localização: Rio de Janeiro
Mensagem Re: Acesso a WebService PHP + MySQL
Nesse caso, você precisa que esse atributo UserDao seja estático.

_________________
Quando seu problema for resolvido, clique na opção Editar no lado superior direito da sua primeira mensagem e coloque [Resolvido] no título.
Se resolveu o problema sozinh@, não esqueça de postar a solução, ela ajuda usuários em buscas no fórum.
Use os marcadores java e xml quando for postar.

Aprenda Java com esta apostila.


27 Mar 2015, 13:03
Perfil WWW
Android application
Android application

Data de registro: 11 Abr 2014, 16:18
Mensagens: 60
Mensagem Re: Acesso a WebService PHP + MySQL
intendi , obrigado .


27 Mar 2015, 19:05
Perfil
Android application
Android application

Data de registro: 11 Abr 2014, 16:18
Mensagens: 60
Mensagem Re: Acesso a WebService PHP + MySQL
Kaito , bom dia.
Desculpe minha ignorância , mais você poderia colocar essa parte java em android ? pois estou bem na parte iniciante no aprendizado e não estou conseguindo rodar.
Obrigado


13 Abr 2015, 11:22
Perfil
Google employee
Google employee

Data de registro: 01 Jul 2013, 13:45
Mensagens: 2688
Localização: Rio de Janeiro
Mensagem Re: Acesso a WebService PHP + MySQL
Dessa classe Main, você tira apenas o main() e coloca os outros métodos numa outra classe.


public class WebService {
    // métodos aqui...
}
 


Na tua activity, cria um atributo dessa classe.


    // instancia isso no onCreate()
    private WebService ws;
 


No onClick() dos botões você vai chamar os métodos da classe WebService.


    @Override
    public void onClick(View view) {
        User user = ...
        // monta valores do usuário...
       
        // salvando usuário
        ws.registerOrUpdate(user, "register.php");
    }
 

_________________
Quando seu problema for resolvido, clique na opção Editar no lado superior direito da sua primeira mensagem e coloque [Resolvido] no título.
Se resolveu o problema sozinh@, não esqueça de postar a solução, ela ajuda usuários em buscas no fórum.
Use os marcadores java e xml quando for postar.

Aprenda Java com esta apostila.


13 Abr 2015, 12:01
Perfil WWW
Android application
Android application

Data de registro: 11 Abr 2014, 16:18
Mensagens: 60
Mensagem Re: Acesso a WebService PHP + MySQL
certo , obrigado.

nesse user eu passo o que pro php?


@Override
    public void onClick(View view) {
        User user = ...
        // monta valores do usuário...
       
        // salvando usuário
        ws.registerOrUpdate(user, "register.php");
    }
 


13 Abr 2015, 12:10
Perfil
Google employee
Google employee

Data de registro: 01 Jul 2013, 13:45
Mensagens: 2688
Localização: Rio de Janeiro
Mensagem Re: Acesso a WebService PHP + MySQL
As informações dele.

_________________
Quando seu problema for resolvido, clique na opção Editar no lado superior direito da sua primeira mensagem e coloque [Resolvido] no título.
Se resolveu o problema sozinh@, não esqueça de postar a solução, ela ajuda usuários em buscas no fórum.
Use os marcadores java e xml quando for postar.

Aprenda Java com esta apostila.


13 Abr 2015, 12:16
Perfil WWW
What is Android?
What is Android?

Data de registro: 07 Jul 2016, 15:35
Mensagens: 3
Mensagem Re: Acesso a WebService PHP + MySQL
Ola com eu uso as partes em java no Android Studio?


14 Jul 2016, 20:15
Perfil
Google employee
Google employee

Data de registro: 01 Jul 2013, 13:45
Mensagens: 2688
Localização: Rio de Janeiro
Mensagem Re: Acesso a WebService PHP + MySQL
NerdClick escreveu:
Ola com eu uso as partes em java no Android Studio?


Veja as respostas que eu dei ao fabzon. Como eu escrevi no final do tutorial, o projeto é só para o java, no android dê preferência a alguma biblioteca como Volley, Retrofit ou outra que você encontrar.

_________________
Quando seu problema for resolvido, clique na opção Editar no lado superior direito da sua primeira mensagem e coloque [Resolvido] no título.
Se resolveu o problema sozinh@, não esqueça de postar a solução, ela ajuda usuários em buscas no fórum.
Use os marcadores java e xml quando for postar.

Aprenda Java com esta apostila.


14 Jul 2016, 20:27
Perfil WWW
Mostrar mensagens anteriores:  Organizar por  
Responder Tópico   [ 10 Mensagens ] 

Quem está online

Usuários vendo este fórum: afpcp, agtavares, Alan Unger, alansousa, Alexandrercarvalho, Anakin Skywalker, andreluzz, avsouza, betofigu, Biggs Darklighter, Bitor, bravus, brian15, BrunoO, Bruto_JPO, cabelo, caio, Captain Typho, car.demarco, cariabs8, cassiano, cassianotartari, Celso Jr., cesschneider, Chanceler Supremo Finis Valorum, Chassot, Chefe Nass, Cleiton, Comandante Cody, criscmaia, czambroni, d.paim, dalmeidabr, Darkluna, Delão, Demerval, developermaster, diogeneskelsen, dnakamashi, du_sr, dudu795, edwarvelarde, Emanuella, fabiano_eletro, fabielp, felipetesc, Fernando Cardia, fracon, fraga, freak, freina, Gabriel Laet, Gabriel Teófilo, gamito, Geire Robson Gadelha, geovanebg, germanno, Guilherme, igor_meneguzzo, interservic, ismaelbpaiva, ismavolk, jacksaum, jacksonvpj, Jar Jar Binks, jeanbr07, Jorge Machin, João Miguel Aguiar, jrchuteboxe, konos, leandroviana, leosl81, Lincoln, lucastgomes, luciano.sml, Lúcio Zanette, maiconjunches, MarceloLuz, marcelosv, marianatallas, Marlosm, maurofjr, maurosilva, Mayron Cimardi, Microdesk, Mig, mravel, nilsgome, nina.rm, nino, o-raposa, Orivalde, otpor, pabarbosa, Padawan, paulabr, peixe, Petto, phobos, Rafael Felix, rafsantos, raninhofernandes, raragao, reginaldo, ricardo, ricardoogliari, rmendes, rocha, rodrigo_mg, Roll, ronamore, ronanPlus, rosano, Snappy [Bot], tchou, Thelemita, thiagotomais, ThiMatsu, tiagocomerio, tiagoxv, tirloni, ttaranto, unnamedd, Vania, vaniuz, vilmartr, Wds, wil, Wookiees, xikin, XPTO, zaquiel e 3 visitantes


Você não pode criar novos tópicos neste fórum
Você não pode responder tópicos neste fórum
Você não pode editar suas mensagens neste fórum
Você não pode excluir suas mensagens neste fórum
Você não pode enviar anexos neste fórum

Procurar por:

© 2007 - 2016 Portal Android - Comunidade de Desenvolvedores Android

Estamos no Linkedin    Siga-nos no twitter


Powered by phpBB - Hospedado por Bemobi