2016-08-30 23 views
0

私はそれがちょっとした問題だと確信していますが、変更が必要なのはわかりません:私のアプリには登録ページがあります。ユーザーがデータを挿入すると、データはPHPスクリプトに渡され、MYSQLデータベースに保存されます。接続はdbで新しいユーザーを取得するときに機能しますが、json $の成功は機能しません。ユーザーを登録できる場合はToastを作成して新しいアクティビティに変更したいが、ボタン。登録ページデータストアが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 injection attacks](http://bobby-tables.com)に脆弱です。また、アンドロイドコードがJSONを期待している場合、PHPは何も出力できません。クエリが失敗し、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のようなものでなければならないと思います。

関連する問題