E-Mails in PHP verarbeiten

  • Antworten:14
  • Bentwortet
Alexander1992
  • Forum-Beiträge: 13

22.08.2018, 12:31:29 via Website

Hallo Community,
ich hoffe, Ihr könnt mir helfen.

Idee:
Mit Hilfe des UserSessionManager wird die E-Mail vom User gespeichert.
Wenn eine Activity geöffnet wird, soll diese E-Mail an ein PHP-Script geschickt werden, welches mit SelectFromWhere die DB durch sucht. Anschließend soll alles als JSON zurück gegeben werden.

Was habe ich bis jetzt gemacht:
Wenn ich dem PHP-Script eine E-Mail vorgebe, dann werden die Infos auf der App ausgegeben. Sowiet so gut.

Problem:
Ich bekomme nicht die E-Mail zum PHP-Script. Kann mir einer Helfen?

Gruß,
Alex

— geändert am 22.08.2018, 12:39:52 durch Moderator

Kommentieren
Beste Antwort
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

23.08.2018, 09:53:15 via App

Schau erstmal ob dein PHP tut, indem du die Url in den Browser eingibst. Liest du den Email String jetzt als $_GET ein weil es ein Url Parameter ist?

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Kommentieren
swa00
  • Forum-Beiträge: 3.704

22.08.2018, 12:38:35 via Website

Hallo Alexander,

Problem:
Ich bekomme nicht die E-Mail zum PHP-Script. Kann mir einer Helfen?

Ohne überhaupt ein Stück (code) deiner bisherigen Versuche gesehen zu haben, welche Technik du anwendest, ob es in einem Thread läuft oder welche Fehlermeldungen wann und wo erhälst :

Können wir schlecht helfen - unsere Kristallkugeln sind leider nur beschränkt leistungsfähig.

— geändert am 22.08.2018, 12:40:17

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

Hilfreich?
Kommentieren
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

22.08.2018, 12:39:18 via App

Hallo Alexander,

eine Schnittstelle mit PHP macht man normalerweise nicht über Email sondern einfach über http(s) bei dem man eine bestimmte Url mit Parametern aufruft.
Das PHP verarbeitet diese Url Parameter und gibt dir ein Json String zurück das du Idealerweise direkt in ein Java Objekt parsen kannst.

Warum willst du Email nehmen? Hat das einen bestimmten Grund??
Wenn email dann geht das nur mit Cronjobs die alle n Minuten laufen und ein Mail Postfach abfragen.

Heißt im Endeffekt über Email hast du immer Ladezeiten der Daten über n Minuten und zurück. Für eine App eher weniger Sinnvoll...

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
swa00
Kommentieren
Alexander1992
  • Forum-Beiträge: 13

22.08.2018, 12:54:38 via Website

Hi Pascal,

Die E-Mail dient nur als Suchvaraible für die MySQL-DB.

eine Schnittstelle mit PHP macht man normalerweise nicht über Email sondern einfach über http(s) bei dem man eine bestimmte Url mit Parametern aufruft. Das PHP verarbeitet diese Url Parameter und gibt dir ein Json String zurück das du Idealerweise direkt in ein Java Objekt parsen kannst.

Ansoetwas habe ich auch gedacht, aber leider habe ich keine Anmeldung dafür gefunden. Kennst du vielleicht eine gut?

Gruß,
Alex

Hilfreich?
Kommentieren
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

22.08.2018, 13:24:48 via Website

Was meinst du mit anmeldung??

Du musst das in PHP schon komplett selber programmieren, d.h. auch die Authentifizierung am Server + API Key generieren etc.

Falls du dich gut mit PHP und Java auskennst, schau mal hier rein:
https://www.nextpit.de/forum/721529/tutorial-fuer-fortgeschrittene-android-an-eine-php-rest-api-anbinden
Sollte dir zumindest eine Idee geben von was ich rede.
Allerdings ist das Beispiel nicht Login/Key gesichert, das müsste man noch programmieren.

— geändert am 22.08.2018, 13:25:06

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Kommentieren
Alexander1992
  • Forum-Beiträge: 13

22.08.2018, 16:08:25 via Website

Hi Pascal,

mit Anmeldung meine ist da Login. Der User muss sich bei meiner App anmelden und dabei seine E-Mail und Passwort eintragen. Parallel lasse ich seine E-Mail speichern mit UserSessionManager.

Ich schicke euch meine Code zu.
Mit einer festen Variablen in der PHP werden die Daten in der MySQL ausgegeben. Siehe Code.

Code Java:

package net.....;

import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity;
import android.text.Html;
import android.widget.TextView;

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.HttpClientStack;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.Volley;

import net.nevita. ... .R;

import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.HashMap;

public class UserActivity extends AppCompatActivity {

    UserSessionManager session;
    TextView textInfo;
    RequestQueue queue;
    // private String email;


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

        textInfo = findViewById(R.id.textInfos);
        queue = Volley.newRequestQueue(this);

        jsonParse();
    }

    private void jsonParse() {
        String url_post = "IP/UserInfo.php";

        final JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url_post, null, new     Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
                try {
                    JSONArray jsonArray = response.getJSONArray("infos");

                    for (int i = 0; i < jsonArray.length(); i++) {
                        JSONObject infos = jsonArray.getJSONObject(i);
                        String email = infos.getString("email");
                        String firstname = infos.getString("firstname");
                        String lastname = infos.getString("lastname");
                        int age = infos.getInt("age");
                        String gender = infos.getString("gender");

                        //textInfo.append("Email: " + email + ",\nVorname: " + firstname + ",\nNachname: " + lastname + ", \nAlter: " + String.valueOf(age) + ",\nGeschlecht: " + gender);
                        textInfo.append(Html.fromHtml(
                                "<br><p>&nbsp;&nbsp;Email:&nbsp;" + email + "</p>" +
                                        "<p>&nbsp;&nbsp;Vorname:&nbsp;" + firstname + "</p>" +
                                        "<p>&nbsp;&nbsp;Nachname:&nbsp;" + lastname + "</p>" +
                                        "<p>&nbsp;&nbsp;Alter:&nbsp;" + String.valueOf(age) + "</p>" +
                                        "<p>&nbsp;&nbsp;Geschlecht:&nbsp;" + gender + "</p>"));
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                error.printStackTrace();
            }
        });

        queue.add(request);
    }
}

Code PHP:

<?php
// require "UserDBInfo.php"

   $servername = " ... ";
   $username = " ... ";
   $password = " ... ";
   $dbname = " ... ";

   $conn = new mysqli($servername, $username, $password, $dbname);

   $infos["infos"] = array();
   // $email_user = $_POST["email"];
   // $password_user = $_POST["password"];

   // test user
   $email_user = "...@....com";
   // $password_user = " ... ";

   $sql_query = "SELECT email, firstname, lastname, age, gender FROM userDB WHERE email = '$email_user'";
   // $check = mysqli_fetch_array(mysqli_query($conn, $sql_query));
   $stmt = $conn->prepare($sql_query);
   $stmt->execute();
   $stmt->bind_result($email, $firstname, $lastname, $age, $gender);
   while($stmt->fetch()){
        $temp = [
           'email' => $email,
           'firstname' => $firstname,
           'lastname' => $lastname,
           'age' => $age,
           'gender' => $gender
        ];
   array_push($infos["infos"], $temp);
   echo json_encode($infos);
}

   mysqli_close($con);
?>

Ich muss die Variable "email" in Java zu PHP schicken.

Gruß
Alex

Hilfreich?
Kommentieren
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

22.08.2018, 17:31:18 via Website

Warum musst du das?
Du hast doch alle Infos direkt im PHP aus deiner DB oder nicht?

Besser ist es, ein HTML Template auf dem Server abzulegen und per PHP das Template mit Daten zu füllen und per Mail abzuschicken.
Dann musst du zum einen keinen HTML Code übertragen und zum andern kannst du das Layout oder Inhalt der Mail ändern ohne ein Update der App tätigen zu müssen.

Wenn du die HTML wirklich aus der App raus übertragen willst, geht das entweder verpackt per Json Body im Request oder per HTTP Post und als Port Parameter dein HTML String.
Ich würde mir aber überlegen, die Mail ohne den Umweg über Android zu senden, denn wieso brauchst du das?

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Kommentieren
Alexander1992
  • Forum-Beiträge: 13

22.08.2018, 18:00:34 via Website

Hi Pascal,

ich möchte keine E-Mail senden, die E-Mail dient für die Anmeldung auf der App,s woas wie der Benutzername.
Und mit der E-Mail soll das PHP in der DB nach dem User schauen und die Infos als JsonArray zurückgeben.

Gruß,
Alex

Hilfreich?
Kommentieren
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

22.08.2018, 18:08:12 via Website

Sag doch gleich, deine Variableninhalte kommen nicht im PHP an.
Und bitte spezifiziere deine Begriffe: E-Mail = komplette Email incl. Text und empfänger und Email-Adresse ist nur die Adresse ;)

Vielleicht schaust du einfach mal, wie mit Volley ein passender Post Request funktioniert:
https://www.itsalif.info/content/android-volley-tutorial-http-get-post-put
Du machst ja nur ein HTTP Get und willst im PHP aber Post Varaiablen auswerten

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Kommentieren
Alexander1992
  • Forum-Beiträge: 13

23.08.2018, 09:07:00 via Website

Hi Pascal,

genau. Die Varaible, E-Mail, kommt im PHP nicht an.
Beispiel E-Mail: a.p@test.de

Gruß,
Alex

Hilfreich?
Kommentieren
swa00
  • Forum-Beiträge: 3.704

23.08.2018, 09:22:53 via Website

Alex,

mach mal einen Debugging und poste mal hier genau den Inhalt des Strings, mit dem du das php aufrufst.

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

Hilfreich?
Kommentieren
Alexander1992
  • Forum-Beiträge: 13

23.08.2018, 09:34:03 via Website

Hi,

mein Code wie ich Ihn jetzt angepasst habe, die Abfrage läuft als Methode.

private void jsonParse() {
    session = new UserSessionManager(getApplicationContext());
    if (session.checkLogin())
        finish();

    HashMap<String, String> user = session.getUserDetails();
    String email = user.get(UserSessionManager.KEY_EMAIL);

    String url_post = "IP-Server/PHP-Script?email=" + email;

    final JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url_post, null, new Response.Listener<JSONObject>() {
        @Override
        public void onResponse(JSONObject response) {
            try {
                JSONArray jsonArray = response.getJSONArray("infos");

                for (int i = 0; i < jsonArray.length(); i++) {
                    JSONObject infos = jsonArray.getJSONObject(i);
                    String email = infos.getString("email");
                    String firstname = infos.getString("firstname");
                    String lastname = infos.getString("lastname");
                    int age = infos.getInt("age");
                    String gender = infos.getString("gender");

                    //textInfo.append("Email: " + email + ",\nVorname: " + firstname + ",\nNachname: " + lastname + ", \nAlter: " + String.valueOf(age) + ",\nGeschlecht: " + gender);
                    textInfo.append(Html.fromHtml(
                            "<br><p>&nbsp;&nbsp;Email:&nbsp;" + email + "</p>" +
                                    "<p>&nbsp;&nbsp;Vorname:&nbsp;" + firstname + "</p>" +
                                    "<p>&nbsp;&nbsp;Nachname:&nbsp;" + lastname + "</p>" +
                                    "<p>&nbsp;&nbsp;Alter:&nbsp;" + String.valueOf(age) + "</p>" +
                                    "<p>&nbsp;&nbsp;Geschlecht:&nbsp;" + gender + "</p>"));
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            error.printStackTrace();
        }
    });
    queue.add(request);
}

Debugausgabe:
siehe Foto
image

Gruß,
Alex

Hilfreich?
Kommentieren
swa00
  • Forum-Beiträge: 3.704

23.08.2018, 09:46:29 via Website

Alex , das kann kein Mensch erkennen.

Und wir basteln jetzt nicht deinen Source nach , das wäre zu viel verlangt.

Erstelle dir einen String mit dem Inhalt , setze einen Breakpoint danach, Debugge und kopiere den Inhalt als Textform hierher.

Danke

P.S. Dein String sieht aber jetzt schon recht gewöhnungsbedüftig aus.

— geändert am 23.08.2018, 09:48:18

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

Hilfreich?
Kommentieren
Beste Antwort
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

23.08.2018, 09:53:15 via App

Schau erstmal ob dein PHP tut, indem du die Url in den Browser eingibst. Liest du den Email String jetzt als $_GET ein weil es ein Url Parameter ist?

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Kommentieren
Alexander1992
  • Forum-Beiträge: 13

23.08.2018, 09:54:42 via Website

Hi,

ich habe das Problem gefunden.
Im PHP muss die Variable als GET gesetzt werden und nicht als POST.

Danke für eure Hilfe.

Alex

Hilfreich?
Kommentieren