[Hilfe] App: MySQL Verbindung mit PHP

R

roenu

Neues Mitglied
0
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<NameValuePair> postParameters = 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();
            	    res= res.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<NameValuePair> postParameters = 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();
            	    res= res.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', Benutzername, Passwort);
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
 
ä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.
 
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)
 
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 :)
 
MichaelS schrieb:
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 :)

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.
 
mradlmaier schrieb:
und die CodeIgniter Lernkurve ist extrem flach.



ne sehr flache lernkurve ist aber kein gutes argument oder ? :D
 
swordi schrieb:
ne sehr flache lernkurve ist aber kein gutes argument oder ? :D

Eigentlich nicht unbedingt. Wenn er aber nur etwas einfachen und sichere MyySQL Zugriff braucht, sind ausgewachsene PHP Frameworks mit Templating etc. Overkill?
 
naja ich meinte eher es heißt steile lernkurve wenns schnell voran geht :D
 
So habe ich's eigentlich auch gemeint...
 
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..
 
roenu schrieb:
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..

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.
 
  • Danke
Reaktionen: roenu
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 :)
 
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'));

??
 
roenu schrieb:
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'));

??

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.
 
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!
 

Ähnliche Themen

D
Antworten
17
Aufrufe
322
datNeMo
D
B
Antworten
4
Aufrufe
432
bb321
B
FabianDev
Antworten
5
Aufrufe
530
swa00
swa00
Zurück
Oben Unten