Autore Topic: Ragazzi sto uscendo pazzo per questo login con Android  (Letto 2458 volte)

Offline pupi93

  • Utente junior
  • **
  • Post: 54
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Huawei Ideos
  • Sistema operativo:
    Ubuntu 10.04
Ragazzi sto uscendo pazzo per questo login con Android
« il: 12 Giugno 2012, 21:28:33 CEST »
0
Salve. Sto sviluppando una piccola app che gestisce delle telecamere. So che già esistono , ma farlo da 0 è un'altra cosa.
Allora. Insieme ad altri due ragazzi abbiamo già realizzato un sito web in HTML/PHP/MYSQL.
Io ho realizzato u qst interfaccia:

ImageShack® - Online Photo and Video Hosting

Nel primo tab devo visualizzare il sito, nel secondo c'è una pagina di login e nella terza delle informazioni su particolari frame
Il mio problema risiede proprio qui nella pagina di login. Ho anche disabilitato i due tab (il primo e l'ultimo) perchè se l'utente non è loggato non deve poter accedere a questi tab. Devo realizzare il login. Ho già aperto un thread, ma nessuno mi ha risposto. A me serve entro il 20 perchè ho gli esami. Mi serve il vostro aiuto.
Inoltre Quando avrò effettuato il login i due tab devono essere abilitati, quindi mi servirebbe una sorta di variabile di sessione per controllare se sono loggato al sito o meno al sito e si deve aprire un'altra activity nel secondo tab (al posto di connection, i dati dell'utente loggato prelevati dal database Mysql)

Ecco cosa ho scritto del tab connection
Codice (Java): [Seleziona]
package prova.tab;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;

public class Tab2 extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.tabw2);
       
        final HttpClient httpclient = new DefaultHttpClient();
        final HttpPost httppost = new HttpPost("http://10.0.2.2/prova_login.php");

       
        ImageView webcam;
        webcam = (ImageView) findViewById(R.id.imageView1);
        webcam.setImageResource(R.drawable.webcam96);
       
        ImageView linea;
        linea = (ImageView) findViewById(R.id.imageView2);
        linea.setImageResource(R.drawable.linea);
       
   
     final EditText user = (EditText)findViewById(R.id.editText1);
     final EditText passwd = (EditText)findViewById(R.id.editText2);
       
        Button reset = (Button)findViewById(R.id.reset);
        Button sign_in = (Button)findViewById(R.id.sign);
       
        reset.setOnClickListener(new View.OnClickListener(){ //Ascolta il button
                // Setta i campi dell'editText a stringa vuota
                public void onClick(View v){
                        user.setText("");
                        passwd.setText("");
                }
        });
       
        sign_in.setOnClickListener(new View.OnClickListener(){ //Ascolta il button
                public void onClick(View v){
                        //Cosa fare???
                          }
                 });
}

Il problema è nella pressione del button Sign in. Non so cosa devo fare per autenticarmi al sito. Cosa devo scrivere nel metodo onClick.

Ho già dato un'occhiata qui:
Android Login and Registration with PHP, MySQL and SQLite

Ma è abbastanza complicato, almeno per me. Inoltre vi ricordo che non so come controllare se sono loggato e quindi abilitare i tab e cambiare l'activity centrale del tab connection in un'altra activity con i dati dell'utente loggato.

E' urgente, vi prego ??? ??? ??? ??? ??? ???

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Ragazzi sto uscendo pazzo per questo login con Android
« Risposta #1 il: 12 Giugno 2012, 21:44:06 CEST »
+1
Quali parametri devi passare alla pagina php per effettuare il login e in che formato? :)

Offline pupi93

  • Utente junior
  • **
  • Post: 54
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Huawei Ideos
  • Sistema operativo:
    Ubuntu 10.04
Re:Ragazzi sto uscendo pazzo per questo login con Android
« Risposta #2 il: 12 Giugno 2012, 21:57:29 CEST »
0
user e password, possibilmente codificati in Sha1
Ecco qui lo script di Login in php

Codice: [Seleziona]
<?php
    include ("config.php");  //Config contiene le variabili per la connessione al db
    //Aprire la connessione con il server MYSQL
    $conn = mysql_connect($host, $user, $pwd) or die ("Errore durante la connessione a MySQL");
    //Selezione del database della sorveglianza
    mysql_select_db($db, $conn);
    //Controllo contro gli attacchi di SQL Injection
    $user = mysql_real_escape_string(htmlspecialchars($_POST['username']));
    $pass = mysql_real_escape_string(htmlspecialchars($_POST['password']));
    //Query in MySQL
    $strSQL = "SELECT ID_Utente, username, password FROM utenti WHERE username = '$user' AND password = SHA1('$pass')";
    $rs = mysql_query($strSQL, $conn);
    if(mysql_num_rows($rs) == 1)
    {
        $array = mysql_fetch_array($rs);
        session_start();
        $_SESSION['username'] = $_POST["username"];
        $data = date('Y-n-j');
        $log = "INSERT INTO log (accesso, id_utente) values('$data', '$array[ID_Utente]')";
        if(!mysql_query($log,$conn))
        {
            die('Errore: ' .mysql_error());
        }
        else header("Location: http://localhost/Progetto/CSS/home.php");
    }
    else echo ("<script type='text/javascript'>
                    alert('Utente e/o password errati');
                    history.back();
                </script>");
    mysql_close($conn);
?>

Offline pupi93

  • Utente junior
  • **
  • Post: 54
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Huawei Ideos
  • Sistema operativo:
    Ubuntu 10.04
Re:Ragazzi sto uscendo pazzo per questo login con Android
« Risposta #3 il: 13 Giugno 2012, 11:37:59 CEST »
0
Nessuno ha qualche idea?  :-(

Offline pupi93

  • Utente junior
  • **
  • Post: 54
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Huawei Ideos
  • Sistema operativo:
    Ubuntu 10.04
Re:Ragazzi sto uscendo pazzo per questo login con Android
« Risposta #4 il: 13 Giugno 2012, 20:22:41 CEST »
0
Neanche tu Ricky`???  :-( sei la mia unica speranza. In tutto il web nessuno mi ha saputo dare una risposta e il miglior forum sulla programmazione android è questo.
Capisco che non siete qui per risolvermi tutti i miei problemi e rispondermi immediatamente e sempre, però è davvero importante. Scusate  :-(

Offline Nicola_D

  • Moderatore
  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Ragazzi sto uscendo pazzo per questo login con Android
« Risposta #5 il: 13 Giugno 2012, 23:30:08 CEST »
0
ma se non sai fare nulla e non sai come iniziare, perchè fai il progetto?

non ho proprio tempo di guardare codice e script, ma buttando l'occhio ci sono due righe:
$user = mysql_real_escape_string(htmlspecialchars($_POST['username']));
    $pass = mysql_real_escape_string(htmlspecialchars($_POST['password']));

mi fa pensare che tu debba fare una chiamata HTTP Post all'indirizzo (che non hai messo) dando i due parametri username e password.
Se non sai come fare una chiamata HTTP Post via android usa google, se non lo trovi lascia perdere...  :-)
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline pupi93

  • Utente junior
  • **
  • Post: 54
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Huawei Ideos
  • Sistema operativo:
    Ubuntu 10.04
Re:Ragazzi sto uscendo pazzo per questo login con Android
« Risposta #6 il: 14 Giugno 2012, 00:41:18 CEST »
+1
apprezzo ciò che hai detto, però si può anche imparare. Almeno hai risposto. Adesso so più precisamente su cosa documentarmi.
grazie

Offline pupi93

  • Utente junior
  • **
  • Post: 54
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Huawei Ideos
  • Sistema operativo:
    Ubuntu 10.04
Re:Ragazzi sto uscendo pazzo per questo login con Android
« Risposta #7 il: 15 Giugno 2012, 01:56:11 CEST »
0
Ok sto provando a procedere con una richiesta POST, ma non ottengo risultati. Questo è ciò che ho scritto

Codice (Java): [Seleziona]
package prova.tab;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.StatusLine;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.Toast;

public class Tab2 extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.tabw2);

        ImageView webcam;
        webcam = (ImageView) findViewById(R.id.imageView1);
        webcam.setImageResource(R.drawable.webcam96);
       
        ImageView linea;
        linea = (ImageView) findViewById(R.id.imageView2);
        linea.setImageResource(R.drawable.linea);
       
   
     final EditText user = (EditText)findViewById(R.id.editText1);
     final EditText passwd = (EditText)findViewById(R.id.editText2);
       
        Button reset = (Button)findViewById(R.id.reset);
        Button sign_in = (Button)findViewById(R.id.sign);
        reset.setOnClickListener(new View.OnClickListener(){ //Ascolta il button
                // Setta i campi dell'editText a stringa vuota
                public void onClick(View v){
                        user.setText("");
                        passwd.setText("");
                       
                }
        });
       
        sign_in.setOnClickListener(new View.OnClickListener(){ //Ascolta il button
                public void onClick(View v){
                        //Cosa fare?
                        String u = "";
                        String p = "";
                        u = user.getText().toString();
                        p = passwd.getText().toString();
                        HttpClient httpclient = new DefaultHttpClient();
                    HttpPost httppost = new HttpPost("http://10.0.2.2/login.php");
                   
                    try {
                        // Add your data
                        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
                        nameValuePairs.add(new BasicNameValuePair("username", u));
                        nameValuePairs.add(new BasicNameValuePair("password", p));
                        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

                        // Execute HTTP Post Request
                        HttpResponse response = httpclient.execute(httppost);
                       
                    } catch (ClientProtocolException e) {
                        // TODO Auto-generated catch block
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                    }
                }
        });
    }
}

questo invece è lo script php login.php

Codice (XML): [Seleziona]
<?php
// parametri del database
$db_host = "localhost";
$db_user = "root";
$db_password = "";
$db_name = "Prova";

$db = mysql_connect($db_host, $db_user, $db_password);
if ($db == FALSE)
die ("Errore nella connessione. Verificare i parametri...");
mysql_select_db($db_name, $db)
or die ("Errore nella selezione del database. Verificare i parametri...");

$user = $_POST['username'];
$pass = $_POST['password'];

if(strcmp($user, "Gianluca") && strcmp($pass, "Prova"))
{  
        mysql_query("insert into utenti values('ciao', '25')");
   }
        else
                echo"ddd";
?>

Passandogli dalla app android COme user Gianluca e come Password Prova in teoria dovrebbe alla pressione del tasto sig in inserirmi un record nella tabella del db, ma nn lo fa.
Dov'è l'errore?

Offline teskio

  • Moderatore globale
  • Utente normale
  • *****
  • Post: 387
  • Respect: +118
    • Github
    • Google+
    • Mostra profilo
    • Skullab
  • Dispositivo Android:
    Cubot GT99 / SurfTab Ventos 10.1
  • Play Store ID:
    Skullab Software
  • Sistema operativo:
    windows 7 / ubuntu 12.04
Re:Ragazzi sto uscendo pazzo per questo login con Android
« Risposta #8 il: 15 Giugno 2012, 04:22:29 CEST »
+1
Vado OT perchè questo è un forum sulla programmazione Android, ergo Java....e non di php, ma cosa fa la funzione di php strcmp ? la risposta la trovi qui : PHP: strcmp - Manual
(ah le documentazioni ufficiali che straordinaria invenzione :-))

Ora, se tu hai capito a cosa serve tale funzione e che cosa ritorna come risultato, focalizza la tua attenzione sul costrutto if/else... l'if analizza una espressione ed esegue un qualcosa se tale espressione risulta VERA, altrimenti se al contrario risulta FALSA la ignora oppure esegue quello che c'è all'interno dell'else.

Ora che sai ciò, prova a leggere sintatticamente questa porzione di codice php che hai scritto...

Codice (PHP): [Seleziona]
if(strcmp($user, "Gianluca") && strcmp($pass, "Prova"))
{  
        mysql_query("insert into utenti values('ciao', '25')");
   }
        else
                echo"ddd";

...e capirai perchè l'if non riesce a comprendere ciò che tu vorresti fare  :-P

Offline pupi93

  • Utente junior
  • **
  • Post: 54
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Huawei Ideos
  • Sistema operativo:
    Ubuntu 10.04
Re:Ragazzi sto uscendo pazzo per questo login con Android
« Risposta #9 il: 15 Giugno 2012, 11:38:05 CEST »
0
Ok grazie. Sapevo già come funziona la funzione :D scusa il gioco di parole. Adesso controllo il costrutto if.
Spero che il problema sia qui, perchè il resto del codice sembra giusto, anche quella Java/Android. Grazie

Offline pupi93

  • Utente junior
  • **
  • Post: 54
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Huawei Ideos
  • Sistema operativo:
    Ubuntu 10.04
Re:Ragazzi sto uscendo pazzo per questo login con Android
« Risposta #10 il: 15 Giugno 2012, 20:28:25 CEST »
0
Che idiota che sono  :D Devo verificare se è uguale a 0. La cosa bella è che l'ho usata un migliaio di volte questa funzione! Adesso funnziona grazie. Andrò avanti con il Login. Se ho altri problemi scriverò qui. Grazie a tutti :)

Offline pupi93

  • Utente junior
  • **
  • Post: 54
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Huawei Ideos
  • Sistema operativo:
    Ubuntu 10.04
Re:Ragazzi sto uscendo pazzo per questo login con Android
« Risposta #11 il: 16 Giugno 2012, 17:46:01 CEST »
0
Eccomi di nuovo qui :( Allora ho un altro problema.
Una volta passati i parametri allo script php con il POST, tramite php controllo se nel database Mysql ho quello user e password. Il mio problema adesso è informare l'applicazione Android che i dati sono presenti nel database e quindi effettuare determinate operazioni.

Inizialmente ho pensato di usare Json e alcuni flag.
Mi spiego meglio

Impostando un flag globale nella mia applicazione posso confrontarlo con quello restituito dallo script php in formato Json. Se sono uguali, faccio determinate operazioni, se sono diversi, il login è fallito. Successivamente pensavo di usare lo stesso flag per gestire una sorta di sessione. Quindi passavo questa informazione tra activity, tramite putExtra e getExtra.

E' la strada giusta?
Ho sentito parlare anche di singletone, ma non ho capito molto a riguardo. Il problema principale comunque resta, il formato json.

Non riesco a far rispondere lo script php per avvertire l'app del successo o meno del login.
Grazie

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Ragazzi sto uscendo pazzo per questo login con Android
« Risposta #12 il: 17 Giugno 2012, 19:10:29 CEST »
+1
Se, come credo di aver capito, il problema è nella parte server php, dovresti porre il quesito in un forum dedicato al php, dove sicuramente troverai molte più persone in grado di risponderti.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store