1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

[Hilfe] App: MySQL Verbindung mit PHP

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von roenu, 23.11.2011.

  1. roenu, 23.11.2011 #1
    roenu

    roenu Threadstarter Neuer Benutzer

    Beiträge:
    8
    Erhaltene Danke:
    0
    Registriert seit:
    23.11.2011
    Hallo Android-Dev's...

    Ich habe ein Problem mit meiner Login App, die eine Verbindung mit MySQL Datenbank über PHP herstellt und somit ein Login ermöglicht.

    Dies geschieht mit folgenden Zeilen Code:

    login2.java:
    PHP:
    package com.example.login2;

    import java.util.ArrayList;

    import org.apache.http.NameValuePair;
    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.TextView;

    public class 
    login2 extends Activity {
        
    EditText un,pw;
        
    TextView error;
        
    Button ok;
        
    /** Called when the activity is first created. */
        
    @Override
        
    public void onCreate(Bundle savedInstanceState) {
            
    super.onCreate(savedInstanceState);
            
    setContentView(R.layout.main);
            
    un=(EditText)findViewById(R.id.et_un);
            
    pw=(EditText)findViewById(R.id.et_pw);
            
    ok=(Button)findViewById(R.id.btn_login);
            
    error=(TextView)findViewById(R.id.tv_error);

            
    ok.setOnClickListener(new View.OnClickListener() {

                @
    Override
                
    public void onClick(View v) {
                    
    // TODO Auto-generated method stub

                    
    ArrayList<NameValuePairpostParameters = new ArrayList<NameValuePair>();
                    
    postParameters.add(new BasicNameValuePair("username"un.getText().toString()));
                    
    postParameters.add(new BasicNameValuePair("password"pw.getText().toString()));
                    
    //String valid = "1";
                    
    String response null;
                    try {
                        
    response CustomHttpClient.executeHttpPost("Link zur check.php"postParameters);
                        
    String res=response.toString();
                       
    // res = res.trim();
                        
    resres.replaceAll("\\s+","");                                
                        
    //error.setText(res);
                       
                       
    if(res.equals("1"))
                            
    error.setText("Correct Username or Password");
                        else
                            
    error.setText("Sorry!! Incorrect Username or Password"); 
                    } catch (
    Exception e) {
                        
    un.setText(e.toString());
                    }

                }
            });
        }
    }
    CustomHttpClient.java:
    PHP:
    package com.example.login2;

    import java.util.ArrayList;

    import org.apache.http.NameValuePair;
    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.TextView;

    public class 
    login2 extends Activity {
        
    EditText un,pw;
        
    TextView error;
        
    Button ok;
        
    /** Called when the activity is first created. */
        
    @Override
        
    public void onCreate(Bundle savedInstanceState) {
            
    super.onCreate(savedInstanceState);
            
    setContentView(R.layout.main);
            
    un=(EditText)findViewById(R.id.et_un);
            
    pw=(EditText)findViewById(R.id.et_pw);
            
    ok=(Button)findViewById(R.id.btn_login);
            
    error=(TextView)findViewById(R.id.tv_error);

            
    ok.setOnClickListener(new View.OnClickListener() {

                @
    Override
                
    public void onClick(View v) {
                    
    // TODO Auto-generated method stub

                    
    ArrayList<NameValuePairpostParameters = new ArrayList<NameValuePair>();
                    
    postParameters.add(new BasicNameValuePair("username"un.getText().toString()));
                    
    postParameters.add(new BasicNameValuePair("password"pw.getText().toString()));
                    
    //String valid = "1";
                    
    String response null;
                    try {
                        
    response CustomHttpClient.executeHttpPost("Link zur Check.php"postParameters);
                        
    String res=response.toString();
                       
    // res = res.trim();
                        
    resres.replaceAll("\\s+","");                                
                        
    //error.setText(res);
                       
                       
    if(res.equals("1"))
                            
    error.setText("Correct Username or Password");
                        else
                            
    error.setText("Sorry!! Incorrect Username or Password"); 
                    } catch (
    Exception e) {
                        
    un.setText(e.toString());
                    }

                }
            });
        }
    }
    check.php:
    PHP:
    <?php

    $un
    =$_POST['username'];
    $pw=$_POST['password'];

    $conn mysql_connect('localhost'BenutzernamePasswort);
    mysql_select_db(Datenbankname);

    $query “SELECT FROM people WHERE username ‘$un’ AND password ‘$pw’”;
    $result mysql_query($query) or die(“Unable to verify user because ” mysql_error());

    if (
    mysql_num_rows($result) > 0) { 
       
        echo 
    1

    else { 
      
        
    // print status message 
        
    echo 0


    ?>

    Also ich bin mir fast sicher, dass es an der PHP Datei (check.php, die im WebServer ist) liegt... Kann mir da jemand helfen??

    Vielen Dank schon im voraus!

    mfg,

    roenu
     
  2. swordi, 23.11.2011 #2
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    ähm du sagst du hast ein problem

    ich sehe aber nirgends wo das problem ist ? 100 zeilen code mag ich mir deshalb nicht im detail durchlesen.

    sag bitte mal wo es scheitert, damit wir den code eingrenzen können.
     
  3. roenu, 23.11.2011 #3
    roenu

    roenu Threadstarter Neuer Benutzer

    Beiträge:
    8
    Erhaltene Danke:
    0
    Registriert seit:
    23.11.2011
    Also ich hab gerade gemerkt, dass ich den falschen http Code kopiert habe. Das ist aber sicher nicht das problem...

    Also. Ich suche eine Möglichkeit, das meine App einen Loginform hat, wen man es startet.
    Die App ist als Erweiterung von meiner Website vorgesehen, die Benutzetdaten aber in einer MySql Datenbank gespeichert sind. Das die App auf die Datenbank zugreifen kann, braucht man ja eine zwischenbrücke, da das SDK eine direkte MYSQL Verbindung nicht unterstützt. Darum habe ich gegoogelt und bin auf ein Tutorial gestossen. Ich habe alles befolgt, jedoch als ich die App testete, funktionierte das Login nicht. Darum wollte ich hier fragen, ob ihr eine (andere) Lösung kennt oder den Fehler findet...

    Danke im voraus

    (Send by ANDROID)
     
  4. MichaelS, 23.11.2011 #4
    MichaelS

    MichaelS Fortgeschrittenes Mitglied

    Beiträge:
    370
    Erhaltene Danke:
    51
    Registriert seit:
    14.08.2009
    Abgesehen von deinem Problem:

    $query = “SELECT * FROM people WHERE username = ‘$un’ AND password = ‘$pw’”;

    ganz böse sowas... les dir mal was über SQL Injection druch :)
     
  5. mradlmaier, 23.11.2011 #5
    mradlmaier

    mradlmaier Gewerbliches Mitglied

    Beiträge:
    158
    Erhaltene Danke:
    17
    Registriert seit:
    28.10.2011
    sehr böse....
    Mein Tip als langjähriger Server-Side Entwickler:
    PHP ohne ein unterstützendes Framework ist ein ziemliche Katastrophe...
    Meine Empfehlung: PHP mit CodeIgniter Framework erspart Dir eine Menge Ärger und die CodeIgniter Lernkurve ist extrem flach.
     
  6. swordi, 24.11.2011 #6
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009


    ne sehr flache lernkurve ist aber kein gutes argument oder ? :D
     
  7. mradlmaier, 24.11.2011 #7
    mradlmaier

    mradlmaier Gewerbliches Mitglied

    Beiträge:
    158
    Erhaltene Danke:
    17
    Registriert seit:
    28.10.2011
    Eigentlich nicht unbedingt. Wenn er aber nur etwas einfachen und sichere MyySQL Zugriff braucht, sind ausgewachsene PHP Frameworks mit Templating etc. Overkill?
     
  8. swordi, 24.11.2011 #8
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    naja ich meinte eher es heißt steile lernkurve wenns schnell voran geht :D
     
  9. mradlmaier, 24.11.2011 #9
    mradlmaier

    mradlmaier Gewerbliches Mitglied

    Beiträge:
    158
    Erhaltene Danke:
    17
    Registriert seit:
    28.10.2011
    So habe ich's eigentlich auch gemeint...
     
  10. roenu, 24.11.2011 #10
    roenu

    roenu Threadstarter Neuer Benutzer

    Beiträge:
    8
    Erhaltene Danke:
    0
    Registriert seit:
    23.11.2011
    Gut, ich hab ein bisschen gegoogelt über das CodeIgniter Framework..

    Nun verstehe ich aber nicht, ob dies so wie eine WebApp ist, das wen man jetzt m.irgendetwas.de aufruft dies kommt, oder eben das was ich brauche, eine Native App (Java) mit MySQL (PHP) Funktionen, was ist es jetzt?

    Ich suche auch noch weiter..
     
  11. mradlmaier, 24.11.2011 #11
    mradlmaier

    mradlmaier Gewerbliches Mitglied

    Beiträge:
    158
    Erhaltene Danke:
    17
    Registriert seit:
    28.10.2011
    CodeIgniter ist in PHP geschrieben. Einfach ein Ordner mit einem Haufen .php Dateien, die Dir die Drecksarbeit abnehmen, weil sie für WebApps typische Probleme addressieren, u.a. Datenbankanbindung. Von aussen sieht es aus, wie jede andere Webseite auch. Man könnte sagen, in gewisser Hinsicht ist es ein PHP-Anwendung.
    Von Java aus, sendest Du also entweder einen Post- oder Get-HttpRequest an den Webserver. Also eine ganz normale URL. Deine java app weiss nix davon, dass auf dem Server CodeIgniter läuft, und muss davon nix wissen. also irgendwas.de funktioniert.
    Guck Dir codeigniter.com, da gibt es eine gute und einfach nachvollziehbare Doku, und ein sehr hilfsbereites Forum.
    CodeIgniter wird Dich von den typischen Pitfalls serverseitiger Entwicklung bewahren. Die DB-Anbindung via PHP+CodeIgniter lässt z.b. keine SQL Injection zu. Mit SQL hast Du direkt nix zu tun . Dafür gibt es CodeIgniter Funktionen, die in PHP geschrieben sind. Ausserdem ist es quelloffen und leichtgewichtig, also schnell.
     
    roenu bedankt sich.
  12. roenu, 25.11.2011 #12
    roenu

    roenu Threadstarter Neuer Benutzer

    Beiträge:
    8
    Erhaltene Danke:
    0
    Registriert seit:
    23.11.2011
    Oh, vielen Dank für die Infos!

    Genau so was brauchte ich, da der PHP-Code den Fehler produzierte...

    Ich werde mal weiterfahren mit der Programmierung, dann melde ich mich wieder... Falls es klappt, werde ich hier die Lösung, bzw. ein paar Codes Posten, so dass die die das gleiche Problem haben, oder haben werden, hier nachschauen können :)
     
  13. roenu, 26.11.2011 #13
    roenu

    roenu Threadstarter Neuer Benutzer

    Beiträge:
    8
    Erhaltene Danke:
    0
    Registriert seit:
    23.11.2011
    Nur komme ich nicht ganz nach, wie ich denn jetzt mit dem CodeIgniter dies machen kann:

    Etwa gleich wie bei meinem PHP-Code?

    Zuerst Verbindung MySQL aufbauen:
    $config['hostname'] = "localhost";
    $config['username'] = "myusername";
    $config['password'] = "mypassword";
    $config['database'] = "mydatabase";
    $config['dbdriver'] = "mysql";
    $config['dbprefix'] = "";
    $config['pconnect'] = FALSE;
    $config['db_debug'] = TRUE;
    $config['cache_on'] = FALSE;
    $config['cachedir'] = "";
    $config['char_set'] = "utf8";
    $config['dbcollat'] = "utf8_general_ci";

    $this->load->database($config);

    Danach - Queries:

    zb:
    $sql = "SELECT * FROM people WHERE id = ? AND status = ? AND author = ?";

    $this->db->query($sql, array(3, 'live', 'Rick'));

    ??
     
  14. mradlmaier, 26.11.2011 #14
    mradlmaier

    mradlmaier Gewerbliches Mitglied

    Beiträge:
    158
    Erhaltene Danke:
    17
    Registriert seit:
    28.10.2011
    Der Block mit den config variablen gehört in application/config/database.php

    Bezüglich der Queries:
    Dein Beispiel ist korrekt. Wesentlich sicherer und einfacher ist es aber die Active Record Class zu verwenden:
    Active Record : CodeIgniter User Guide

    Diese stellt Dir für alle Standard SQL queries eigene codeigniter funktionen zur Verfügung. Diese bieteb Dir die Vorteile, dass sie sicherer sind (keine SQL Injection möglich) und dass sie die Details und Unterschiede verschiedener SQL Dialekte abstrahieren (d.h. Du kannst zu einem späteren Zeitpunkt eine andere Datenbank verwenden, ohne dass Du deinen SQL Code anpassen musst)

    Übrigens, dass CodeIgniter Forum ist sehr aktiv, Du wirst normalerweise innerhalb weniger Stunden Antwort erhalten.
     
  15. roenu, 28.11.2011 #15
    roenu

    roenu Threadstarter Neuer Benutzer

    Beiträge:
    8
    Erhaltene Danke:
    0
    Registriert seit:
    23.11.2011
    Gut ;) Vielen Dank!

    Ich habe jetzt eine Lösung mit deiner gefunden und es klappt Prima :)

    Ich werde demnächst hier noch die End-Lösung Posten, wie ich es gemacht habe...

    Vielen Dank für die Tolle Hilfe!
     

Diese Seite empfehlen

Besucher kamen mit folgenden Begriffen auf unsere Seite:

  1. app server mysql kein güliger