Login über php funktioniert nicht

  • Antworten:8
  • Bentwortet
jonny
  • Forum-Beiträge: 15

13.04.2017, 13:58:57 via Website

Hallo,

ich versuche grade einen Login für meine App zu erstellen. Die Registrierung funktioniert soweit.
Bei meiner Anmeldung allerdings überträgt die folgende PHP Datei immer success als false.

<?php  error_reporting(0);

$con = mysqli_connect("localhost", "id1342850_support_user", "Porsche99", "id1342850_support_user");
$username = $_POST["username"]; $pass = $_POST["pass"];
$statement = mysqli_prepare($con, "SELECT * FROM user WHERE username = ? AND pass = ?");
mysqli_stmt_bind_param($statement, "ss", $username, $pass);
mysqli_stmt_execute($statement);
mysqli_stmt_store_result($statement);
mysqli_stmt_bind_result($statement, $name, $mail, $user_id, $username, $pass, $place, $birth);
$response = array();
$response["success"] = false;
while(mysqli_stmt_fetch($statement)){
$response["success"] = true;
$response["username"] = $username;
$response["pass"] = $pass;
}
echo json_encode($response);?>

Kann mir jemand, der sich eventuell besser mit PHP auskennt, sagen wo mein Fehler liegt?

Vielen Dank

— geändert am 13.04.2017, 13:59:43

Antworten
Ludy
  • Admin
  • Forum-Beiträge: 7.957

13.04.2017, 15:43:49 via Website

Hallo Jona,

herzlich willkommen hier im Forum (*)

Bitte nutze PDO http://php.net/manual/de/book.pdo.php & https://www.php-einfach.de/mysql-tutorial/crashkurs-pdo/

Wenn du debugst, dann solltest du --> error_reporting(0); <-- auskommentieren, denn dadurch werden die keine Fehler im PHP-Script angezeigt und eine Fehleranalyse ist dann natürlich schwer.

<?php  
//error_reporting(0);
$con = new PDO('mysql:host=localhost;dbname=DATENBANKNAME', 'DB_USERNAME', 'DB_PASSWORT');


if (!isset($_POST['pass'],$_POST['username'])) {
    die(json_encode(array("success" => false)));
}
$username = $_POST["username"];
$pass = $_POST["pass"]; 

$statement = $con->prepare("SELECT * FROM user WHERE username = ? AND pass = ?"); 
$statement->execute(array($username, $pass)); 
$response = array(); 
$response["success"] = false; 
while($row = $statement->fetch()){ 
    $response["success"] = true; 
    $response["username"] = $row['username']; 
    $response["pass"] = $row['pass']; 
} 
echo json_encode($response);
?>

Gruß Ludy (App Entwickler)

Mein Beitrag hat dir geholfen? Lass doch ein "Danke" da.☺

☕ Buy Me A Coffee ☕

Lebensmittelwarnung-App

✨Meine Wunschliste✨

📲Telegram NextPit News📲

jonnyswa00Pascal P.

Antworten
jonny
  • Forum-Beiträge: 15

13.04.2017, 16:31:57 via Website

Hey,

Danke erst mal für die schnelle und ausführliche Antwort.
Werde mich mit dem Tutorial beschäftigen. Danke.
Habe jetzt mal deinen Code verwendet, aber habe immer noch das selbe Problem.
Obwohl ich einen vorhandenen Benutzername mit dem korrekten Passwort eingegeben habe, zeigt mir meine App den AlertDialog, der entsteht wenn "success" als false übermittelt wird.

Mich würde jetzt interessieren wo das Problem liegt. In der Php liegt es ja sehr wahrscheinlich nicht mehr.
Wird es wohl eher im App Quellcode oder bei der Datenbank liegen ?

Danke im Vorraus!:)

Antworten
jonny
  • Forum-Beiträge: 15

13.04.2017, 17:13:18 via Website

Die Scripte rufe ich mit Request auf.
IÚnd in der Datenbank sind Benutzer und Passwort auch hinterlegt.:(

Antworten
jonny
  • Forum-Beiträge: 15

13.04.2017, 17:26:39 via Website

Das ist meine LoginActivity.java

import android.content.Intent;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.toolbox.Volley;

import org.json.JSONException;
import org.json.JSONObject;

public class LoginActivity extends AppCompatActivity {

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





    final EditText loginpw = (EditText) findViewById(R.id.editText_logpw);
   final EditText loginus = (EditText) findViewById(R.id.editText_logus);


    Button login = (Button) findViewById(R.id.button2);
    TextView register = (TextView) findViewById(R.id.textView4);

    register.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent registerIntent = new Intent(LoginActivity.this, registerActivity.class);
            startActivity(registerIntent);
        }
    });

    login.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            final String username = loginus.getText().toString();
            final String pass = loginpw.getText().toString();

            Response.Listener<String> responseListener = new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {

                    try {
                        JSONObject jsonResponse  = new JSONObject(response);
                        boolean success = jsonResponse.getBoolean("success");
                        if (success) {
                           Intent intent = new Intent(LoginActivity.this, MainActivity.class);
                            LoginActivity.this.startActivity(intent);

                        }
                        else {
                            AlertDialog.Builder builder = new AlertDialog.Builder(LoginActivity.this);
                            builder.setMessage("Login Failed")
                                    .setNegativeButton("Retry", null)
                                    .create()
                                    .show();

                        }

                    } catch (JSONException e) {
                        e.printStackTrace();
                    }

                }
            };
            loginRequest loginrequest = new loginRequest(username, pass, responseListener);
            RequestQueue queue = Volley.newRequestQueue(LoginActivity.this);
            queue.add(loginrequest);
}

});

}

}

und das ist meine loginRequest.java:

import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.toolbox.StringRequest;

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

public class loginRequest extends StringRequest {

private static final String LOGIN_REQUEST_URL = "URL";
private Map<String, String> params;

public loginRequest(String username, String pass, Response.Listener<String>listener) {
    super(Request.Method.POST, LOGIN_REQUEST_URL, listener, null );
    params = new HashMap<>();
    params.put("username", username);
    params.put("pass", pass);

}

}

Antworten
Ludy
  • Admin
  • Forum-Beiträge: 7.957

13.04.2017, 18:34:51 via Website

Du hast vergessen getParams zu setzen.

@Override
public Map<String, String> getParams() {
    return params;
}

Klassennamen werden am Anfang IMMER groß geschrieben (!) Aber das ist ein anderes Thema.

Volley ist übrigens als Veraltet gekennzeichnet - Alternativen kenne ich zwar nicht, aber das ganze selber zu erstellen ist kein Hexenwerk und auch vom Umfang her auch als Anfänger zu verstehen.

Gruß Ludy (App Entwickler)

Mein Beitrag hat dir geholfen? Lass doch ein "Danke" da.☺

☕ Buy Me A Coffee ☕

Lebensmittelwarnung-App

✨Meine Wunschliste✨

📲Telegram NextPit News📲

Antworten
swa00
  • Forum-Beiträge: 3.704

13.04.2017, 19:36:55 via Website

Volley ist übrigens als Veraltet gekennzeichnet

"Noch" bin ich mit ION zufrieden

Liebe Grüße - Stefan
[ App - Entwicklung ]

Ludy

Antworten