Ich versuche, Daten aus meiner App in die MYSQL-Datenbank einzufügen. Ich benutze HttpURLConnection
, um eine Verbindung zu öffnen und es mit einem BufferedWriter
zu schreiben. Alles funktioniert (es gibt keine Ausnahme), aber irgendwie werden keine Daten in die Tabelle eingefügt. (Im folgenden this Tutorial).Einfügen von Daten mit MYSQL, aber nichts passiert
Ich verwende die AsyncTask
, um die Vernetzung im Hintergrund zu tun. Wie unten gezeigt, habe ich eine neue Klasse erstellt, die sich von AsyncTask
erstreckt.
public class BackgroundTask extends AsyncTask<String, Void, String>
{
Context ctx;
BackgroundTask(Context ctx)
{
this.ctx = ctx;
}
Dies ist die DoInBackground-Methode.
@Override
protected String doInBackground(String... strings)
{
String registerUrl = "http://localhost/APPoint/register.php";
String method = strings[0];
if (method.equals("register"))
{
try
{
String gebruikersnaam = strings[1];
String wachtwoord = strings[2];
String voornaam = strings[3];
String tussenvoegsel = strings[4];
String achternaam = strings[5];
String bedrijfsnaam = strings[6];
String email = strings[7];
String telefoonnummer = strings[8];
URL url = new URL(registerUrl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setDoOutput(true);
OutputStream OS = conn.getOutputStream();
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(OS));
String data = URLEncoder.encode("Gebruikersnaam", "UTF-8")+ "=" + URLEncoder.encode(gebruikersnaam, "UTF-8")+"&"+
URLEncoder.encode("wachtwoord", "UTF-8")+ "=" + URLEncoder.encode(wachtwoord, "UTF-8")+"&"+
URLEncoder.encode("voornaam", "UTF-8")+ "=" + URLEncoder.encode(voornaam, "UTF-8")+"&"+
URLEncoder.encode("tussenvoegsel", "UTF-8")+ "=" + URLEncoder.encode(tussenvoegsel, "UTF-8")+"&"+
URLEncoder.encode("achternaam", "UTF-8")+ "=" + URLEncoder.encode(achternaam, "UTF-8")+"&"+
URLEncoder.encode("bedrijfsnaam", "UTF-8")+ "=" + URLEncoder.encode(bedrijfsnaam, "UTF-8")+"&"+
URLEncoder.encode("email", "UTF-8")+ "=" + URLEncoder.encode(email, "UTF-8")+"&"+
URLEncoder.encode("telefoonnummer", "UTF-8")+ "=" + URLEncoder.encode(telefoonnummer, "UTF-8");
try {
bw.write(data);
}catch(Exception e)
{
e.printStackTrace();
}
bw.flush();
InputStream inputS = conn.getInputStream();
inputS.close();
bw.close();
OS.close();
} catch (IOException e) {
e.printStackTrace();
}
return "Registreren voltooid";
}
return null;
}
Meine php DB Verbindungsinitialisierer.
<?php
define('HOST', 'localhost');
define('USER', 'root');
define('PASS', '');
define('DB', 'appoint');
$conn = new PDO('mysql:dbname=' . DB . ';host=' . HOST, USER, PASS);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
Meine register.php Datei
<?php
$username = filter_var(trim($_POST['gebruikersnaam']), FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH);
$password = filter_var(trim($_POST['wachtwoord']), FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH);
$voornaam = filter_var(trim($_POST['voornaam']), FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH);
$tussenvoegsel = filter_var(trim($_POST['tussenvoegsel']), FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH);
$achternaam = filter_var(trim($_POST['achternaam']), FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH);
$bedrijfsnaam = filter_var(trim($_POST['bedrijfsnaam']), FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH);
$email = filter_var(trim($_POST['email']), FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH);
$telefoonnummer = filter_var(trim($_POST['telefoonnummer']), FILTER_SANITIZE_NUMBER_INT, FILTER_FLAG_STRIP_HIGH);
if ($username == '' || $password == '' || $voornaam == '' || $tussenvoegsel == '' || $achternaam == '' || $bedrijfsnaam == '' || $email == '' || $telefoonnummer == '') {
//echo 'Verplichte velden zijn niet ingevoerd!';
} else {
require_once('DBConnect.php');
$stmnt = $conn->prepare("INSERT INTO gebruikers (`gebruikersnaam`, `wachtwoord`, `voornaam`, `tussenvoegsel`, `achternaam`, `bedrijfsnaam`, `email`, `telefoonnummer`) "
. "VALUES (?, ? , ? , ?, ?, ?, ?, ?)");
try {
$stmnt->execute(array($username, $password, $voornaam, $tussenvoegsel, $achternaam, $bedrijfsnaam, $email, $telefoonnummer));
} catch (PDOException $ex) {
if ($ex->errorInfo[1] == 1062) {
echo 'duplicate entry';
} else {
var_dump($ex);
}
}
}
Zuerst dachte ich, meine URL falsch war. Ich habe versucht mit:
"http://127.0.0.1/APPoint/register.php"
"http://localhost/APPoint/register.php"
"http://10.0.2.2/APPoint/register.php"
"http://192.168.0.1/APPoint/register.php"
Nichts scheint den Job zu tun. Wenn jemand etwas Input haben könnte, würde ich mich freuen.
Bearbeiten Ich hätte erwähnen sollen, dass ich nicht einen AVD verwende, um den Code zu testen. Ich benutze mein eigenes Samsung-Gerät dafür.
bearbeiten Zugabe der
if(!errors)
{
String method = "register";
BackgroundTask bgTask = new BackgroundTask(this);
bgTask.execute(method, gebruikersnaam, wachtwoord, voornaam, tussenvoegsel, achternaam, bedrijfsnaam, email, telefoonnummer);
finish();
}
bearbeiten Auf logcat für Background ausführen dieser Fehler nach oben zeigt, während sie mit AVD läuft (wahrscheinlich das Android Bug): getSlotFromBufferLocked: unbekannt Puffer 0xb4095170 Nach einer Google-Suche Es sieht aus wie ein Android-Fehler bezüglich der Berechtigungen. Aber ich habe bereits eine Internet-Erlaubnis in meinem Manifest.
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
In '$ _POST [ 'gebruikersnaam']' variable Klein ist aber in 'URLEncoder.encode ("Gebruikersnaam", "UTF-8")' mit – Marko
@MarkoMets Dank Groß beginnt, dass für den Hinweis auf, unfortunally kein erfolgreiches Ergebnis – Necati
Ist Ihre registerUrl korrekt? – Marko