2016-08-30 77 views
0

我確定這只是一個小問題,但我無法弄清楚需要更改的內容:我的應用中有一個註冊頁面。當用戶插入數據時,數據被傳遞到php腳本並存儲在MYSQL數據庫中。連接工作,因爲我在數據庫中得到一個新的用戶,但json $成功不起作用 - 我想做一個吐司,如果用戶可以註冊更改爲新的活動,但它沒有什麼,當我點擊按鈕。註冊頁面數據存儲但沒有收到JSON編碼

這是我的Java代碼:

package com.example.android.festivalapp; 

import android.content.Intent; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.RadioButton; 
import android.widget.RadioGroup; 
import android.widget.Toast; 

import org.apache.http.HttpResponse; 
import org.apache.http.NameValuePair; 
import org.apache.http.client.ClientProtocolException; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.entity.UrlEncodedFormEntity; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.apache.http.message.BasicNameValuePair; 
import org.apache.http.params.BasicHttpParams; 
import org.apache.http.params.HttpConnectionParams; 
import org.apache.http.params.HttpParams; 
import org.json.JSONException; 
import org.json.JSONObject; 

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.util.ArrayList; 
import java.util.List; 

public class JetztRegistrieren extends Startseite { 

    Button bRegistrierungAbschliessen; 
    EditText etUserName, etUserMail, etUserPasswort, etUserPasswort2, etGeburtsdatum, etTelefonnummer; 
    RadioButton rbMaennlich, rbWeiblich; 
    RadioGroup rgGeschlecht; 
    protected String enteredname, enteredemail, enteredpassword, enteredpassword2, enteredGeb, enteredTelnr, userGender; 

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

     bRegistrierungAbschliessen = (Button) findViewById(R.id.bRegistrierungAbschliessen); 

     etUserName = (EditText) findViewById(R.id.etUserName); 
     etUserMail = (EditText) findViewById(R.id.etUserMail); 
     etUserPasswort = (EditText) findViewById(R.id.etUserPasswort); 
     etUserPasswort2 = (EditText) findViewById(R.id.etUserPasswort2); 
     etGeburtsdatum = (EditText) findViewById(R.id.etGeburtsdatum); 
     etTelefonnummer = (EditText) findViewById(R.id.etTelefonnummer); 
     rgGeschlecht = (RadioGroup) findViewById(R.id.rgGeschlecht); 
     rbMaennlich = (RadioButton) findViewById(R.id.rbMaennlich); 
     rbWeiblich = (RadioButton) findViewById(R.id.rbWeiblich); 

     bRegistrierungAbschliessen.setOnClickListener(new View.OnClickListener() { 
      //testen, ob Mail und Passwort ausgefüllt oder lang genug 
      @Override 
      public void onClick(View v) { 

       enteredname = etUserName.getText().toString(); 
       enteredemail = etUserMail.getText().toString(); 
       enteredpassword = etUserPasswort.getText().toString(); 
       enteredpassword2 = etUserPasswort2.getText().toString(); 
       enteredTelnr = etTelefonnummer.getText().toString(); 
       enteredGeb = etGeburtsdatum.getText().toString(); 
       userGender = ((RadioButton) findViewById(rgGeschlecht.getCheckedRadioButtonId())).getText().toString(); 

       String serverUrl = "http://www.pou-pou.de/stagedriver/android/register.php"; 
       AsyncDataClass asyncRequestObject = new AsyncDataClass(); 
       asyncRequestObject.execute(serverUrl, enteredname, enteredemail, enteredpassword, enteredpassword2, enteredTelnr, enteredGeb, userGender); 

       if (enteredname.equals("") || enteredemail.equals("") || enteredpassword.equals("") || enteredpassword2.equals("") || enteredGeb.equals("")) { 
        Toast.makeText(JetztRegistrieren.this, "Bitte alle Felder ausfüllen", Toast.LENGTH_LONG).show(); 
        return; 
       } 
      } 

      class AsyncDataClass extends AsyncTask<String, Void, String> { 
       @Override 
       protected String doInBackground(String... params) { 
        HttpParams httpParameters = new BasicHttpParams(); 
        HttpConnectionParams.setConnectionTimeout(httpParameters, 5000); 
        HttpConnectionParams.setSoTimeout(httpParameters, 5000); 
        HttpClient httpClient = new DefaultHttpClient(httpParameters); 
        HttpPost httpPost = new HttpPost("http://www.pou-pou.de/stagedriver/android/register.php"); 
        String jsonResult = ""; 
        try { 
         List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2); 
         nameValuePairs.add(new BasicNameValuePair("enteredname", params[1])); 
         nameValuePairs.add(new BasicNameValuePair("enteredemail", params[2])); 
         nameValuePairs.add(new BasicNameValuePair("enteredpassword", params[3])); 
         nameValuePairs.add(new BasicNameValuePair("enteredpassword2", params[4])); 
         nameValuePairs.add(new BasicNameValuePair("enteredTelnr", params[5])); 
         nameValuePairs.add(new BasicNameValuePair("enteredGeb", params[6])); 
         nameValuePairs.add(new BasicNameValuePair("userGender", params[7])); 

         httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
         HttpResponse response = httpClient.execute(httpPost); 
         jsonResult = inputStreamToString(response.getEntity().getContent()).toString(); 
        } catch (ClientProtocolException e) { 
         e.printStackTrace(); 
        } catch (IOException e) { 
         e.printStackTrace(); 
        } 
        return jsonResult; 
       } 

       @Override 
       protected void onPreExecute() { 
        super.onPreExecute(); 
       } 

       @Override 
       protected void onPostExecute(String result) { 
        super.onPostExecute(result); 

        int jsonResult = returnParsedJsonObject(result); 
        if (jsonResult == 0) { 
         Toast.makeText(JetztRegistrieren.this, "Passwörter stimmen nicht überein", Toast.LENGTH_LONG).show(); 
         return; 
        } 
        if (jsonResult == 1) { 
         Intent intent = new Intent(JetztRegistrieren.this, Startseite.class); 
         Toast.makeText(JetztRegistrieren.this, "Willkommen bei Stage Driver! Jetzt loslegen.", Toast.LENGTH_LONG).show(); 
         startActivity(intent); 
         return; 
        } 
        System.out.println("Resulted Value: " + result); 
       } 

       private StringBuilder inputStreamToString(InputStream is) { 
        String rLine = ""; 
        StringBuilder answer = new StringBuilder(); 
        BufferedReader br = new BufferedReader(new InputStreamReader(is)); 
        try { 
         while ((rLine = br.readLine()) != null) { 
          answer.append(rLine); 
         } 
        } catch (IOException e) { 
         e.printStackTrace(); 
        } 
        return answer; 
       } 
      } 

       private int returnParsedJsonObject(String result) { 
        JSONObject resultObject = null; 
        int returnedResult = 2; 
        try { 
         resultObject = new JSONObject(result); 
         returnedResult = resultObject.getInt("success"); 
        } catch (JSONException e) { 
         e.printStackTrace(); 
        } 
        return returnedResult; 
       } 
      }); 
     } 
    } 

這是php文件:

<?php 
include('config.php'); 
session_start(); 

$name = $_POST["enteredname"]; 
$pass = $_POST["enteredpassword"]; 
$pass2 = $_POST["enteredpassword2"]; 
$email = $_POST["enteredemail"]; 
$tel = $_POST["enteredTelnr"]; 
$geb = $_POST["enteredGeb"]; 
$gender = $_POST["userGender"]; 

if($pass != $pass2) { 
    $success = 0; 
} 
else { 
    $hash = md5($pass); 
    $speichern = "INSERT INTO user (user_name, user_pw, user_mail, user_tel, user_geb, user_geschl) 
        VALUES('$name', '$hash', '$email', '$tel', '$geb', '$gender');"; 
    mysql_query($speichern) or die(mysql_error()); 
    if($speichern) { 
     $success = 1; 
    } 
} 
echo json_encode($success); 
?> 

提前感謝!

+0

你很容易[sql注入攻擊](http://bobby-tables.com)。並注意,如果你的android代碼期望JSON,PHP不能輸出任何東西但是json。如果查詢失敗並輸出一個mysql錯誤字符串,那麼會在另一端導致json解析錯誤。 –

+0

您正在使用過時的mysql_擴展名。現代版本的php有這個刪除。您需要更改您的代碼以使用mysqli或PDO/Mysql。 – gview

回答

0

問題是您沒有返回您正在返回的內容類型的HTTP標頭。

添加到您的PHP腳本的頂部:

header("Content-Type: application/json;charset=utf-8"); 
+0

不幸的是它不工作 –

0

所以我想我找到了錯誤,在日誌中,它說的jsonresult不能轉換,這是因爲在PHP腳本我寫$成功= 0;但相反,我認爲它必須是$ response [「success」] = 0;