PHP, MySQL and Volley

N

newperson

Neues Mitglied
1
Hallo, mit dem Request habe ich Probleme. Ich habe keine Ahnung warum das nicht funktioniert?? Eine Verbindung zur DB habe ich. Also konkret: Ich kann mich nicht Einloggen. Es wird immer der Toast: "Invalid username or password" aufgerufen.
Mit dem Debugger hab ich es auch schon probiert. Ich finde keinen Fehler. Ich verzweifle schon.

Danke für die Hilfe :D

die Programmierung:
Code:
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.AppCompatButton;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import com.android.volley.AuthFailureError;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;

import java.util.HashMap;
import java.util.Map;

public class LoginActivity extends AppCompatActivity implements View.OnClickListener {

    private EditText etUsername, etPassword;
    private Button bLogin;
    private TextView tvRegisterLink;

    private boolean loggedIn = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);

        etUsername = (EditText) findViewById(R.id.etUsername);
        etPassword = (EditText) findViewById(R.id.etPassword);
        tvRegisterLink = (TextView) findViewById(R.id.tvRegisterLink);
        tvRegisterLink.setOnClickListener(this);
        bLogin = (Button) findViewById(R.id.bSignIn);
        bLogin.setOnClickListener(this);
    }

    @Override
    protected void onResume() {
        super.onResume();
        SharedPreferences sharedPreferences = getSharedPreferences(Config.SHARED_PREF_NAME, Context.MODE_PRIVATE);
        loggedIn = sharedPreferences.getBoolean(Config.LOGGEDIN_SHARED_PREF, false);

        //wenn login true ist
        if(loggedIn){
            Intent intent = new Intent(LoginActivity.this, UserAreaActivity.class);
            startActivity(intent);
        }
    }

    private void login(){
        final String username = etUsername.getText().toString().trim();
        final String password = etPassword.getText().toString().trim();

        StringRequest stringRequest = new StringRequest(Request.Method.POST, Config.LOGIN_URL,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        //if success from server
                        if(response.equalsIgnoreCase(Config.LOGIN_SUCCESS)){
                            SharedPreferences sharedPreferences = LoginActivity.this.getSharedPreferences(Config.SHARED_PREF_NAME, Context.MODE_PRIVATE);
                            SharedPreferences.Editor editor = sharedPreferences.edit();
                            editor.putBoolean(Config.LOGGEDIN_SHARED_PREF, true);
                            editor.putString(Config.USERNAME_SHARED_PREF, username);
                            editor.commit();

                            Intent intent = new Intent(LoginActivity.this, UserAreaActivity.class);
                            startActivity(intent);
                        }else{
                            //if not success from server
                            Toast.makeText(LoginActivity.this, "Invalid username or password", Toast.LENGTH_LONG).show();
                        }
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        //Error
                    }
                }){
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                Map<String,String> params = new HashMap<>();
                params.put(Config.KEY_USERNAME, username);
                params.put(Config.KEY_PASSWORD, password);
                return params;
            }
        };

        RequestQueue requestQueue = Volley.newRequestQueue(this);
        requestQueue.add(stringRequest);
    }


    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.tvRegisterLink:
                //  Intent registerIntent = new Intent(LoginActivity.this, RegisterActivity.class);
                // LoginActivity.this.startActivity(registerIntent);
                break;
            case R.id.bSignIn:
                login();
                break;
        }
    }
}

die PHP-Programmierung:

Config.php
Code:
<?php
define("DB_HOST", "localhost");
define("DB_USER", "root");
define("DB_PASSWORD", "123");
define("DB_DATABASE", "dbserver");

$con = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_DATABASE);

if(!$con) {
    die("keine Verbindung".mysql_error());
}
echo "Erfolgreich verbunden"
?>

Login.php
Code:
<?php     
    if($_SERVER['REQUEST_METHOD']=='POST'){
        $username = $_POST['username'];
        $password = $_POST['password'];

        $sql = "SELECT * FROM users WHERE username='$username' AND password='$password'";
         
        require_once('loginregister/Config.php');

        $result = mysqli_query($con,$sql);

        $check = mysqli_fetch_array($result);

        if(isset($check)){
            echo "success";
        }else{
            echo "failure";
        }
        mysqli_close($con);
    }


Logcat:
05-08 16:56:29.661 9338-9338/com.paier.dbuebung W/System: ClassLoader referenced unknown path: /data/app/com.paier.dbuebung-1/lib/arm
05-08 16:56:29.701 9338-9338/com.paier.dbuebung I/art: override thread count:-j2
05-08 16:56:30.181 9338-9338/com.paier.dbuebung W/System: ClassLoader referenced unknown path: /data/app/com.paier.dbuebung-1/lib/arm
05-08 16:56:30.455 9338-9338/com.paier.dbuebung W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable
05-08 16:56:30.653 9338-9384/com.paier.dbuebung I/Adreno-EGL: <qeglDrvAPI_eglInitialize:379>: EGL 1.4 QUALCOMM build: Nondeterministic_AU_msm8974_LA.BF.1.1.3__release_AU (I3fa967cfef)
OpenGL ES Shader Compiler Version: E031.28.00.02
Build Date: 09/29/15 Tue
Local Branch: mybranch14683032
Remote Branch: quic/master
Local Patches: NONE
Reconstruct Branch: NOTHING
05-08 16:56:38.141 9338-9384/com.paier.dbuebung W/OpenGLRenderer: Fail to change FontRenderer cache size, it already initialized
 
Hi,

wenn das wirklich zu 100% dein Quellcode ist, dann müsste dein Vergleich:
Code:
response.equalsIgnoreCase(Config.LOGIN_SUCCESS)

Falsch sein, weil du
Code:
echo "Erfolgreich verbunden"
auch ausgibst.

Also deine Response müsste etwa so sein: "Erfolgreichverbundensuccess" (bei erfolgreichem einloggen)
Und ich glaube nicht, dass du das in deiner Config.LOGIN_SUCCESS drin hast

Edit: Ich würde dir auch empfehlen mal ein paar Logs über Log.info etc. zu erstellen. Dann kannt du in den Logs auch sehen, was ankommt.
 
  • Danke
Reaktionen: newperson
Mal abgesehen davon ist dein Code anfällig für SQL Injection der einfachsten Sorte.

Wenn ich als Passwort ' OR 1=1; -- einsetze bin ich drin...

Außerdem legt man Passwörter gehasht in der DB ab, nicht im Klartext. Am besten salted.
 
@Kardroid Danke für die Antwort. Ich habe die if -Bedienung weg getan und einfach bei mysqli_connect noch "or die" dazugefügt.
Ja diesen Fehler habe ich gemacht, aber es kommt trotzdem immer der Toast: "Invalid username or password". Also es kommt kein success an?

@deek Danke für die Antwort. Das ist nur eine Übung und ja ich weiß, dass das nicht sicher ist. Wie gesagt, dass ist nur eine Übung.
[doublepost=1462782267,1462779707][/doublepost]Ich bekomme immer diese Warnung: 05-09 10:22:36.077 23261-23304/com.uebung.dbuebung W/OpenGLRenderer: Fail to change FontRenderer cache size, it already initialized
Ich hab aber keine Ahnung was das zum bedeuten hat??
 
log doch in deiner onresponse mal deine response aus. Dann siehst du was genau da ankommt.
 
ich hab den Fehler gefunden :)))
ich hab einfach bei Response Error einen Toast eingefügt und den Error als String ausgegeben und dann bin ich auf dem Fehler gekommen. :))

Code:
new Response.ErrorListener() {
    [USER=3517]@override[/USER]
    public void onErrorResponse(VolleyError error) {
        Toast.makeText(RegisterActivity.this, error.toString(), Toast.LENGTH_LONG).show();
    }
})

Der Fehler war, dass ich bei der PHP-Programmierung beim require_once noch den Ordner dazu geschriebenen habe. So ist es richtig: require_once('Config.php');
 
Zuletzt bearbeitet von einem Moderator:

Ähnliche Themen

B
Antworten
0
Aufrufe
688
basementmedia
B
S
Antworten
33
Aufrufe
2.667
Sempervivum
S
L
Antworten
15
Aufrufe
908
jogimuc
J
Zurück
Oben Unten