2016-07-16 6 views
0

私は2つのPHPスクリプトを持っています。最初の1つはアンドロイドアプリを通じてユーザーに登録を処理します。ここにあります:登録ユーザーの情報を取得する

登録が成功すると、ユーザーはアンドロイド携帯電話で彼のIDを示すトーストメッセージを受け取ります。私はこれを後で、登録の成功のようなものを言うメッセージに変更します。次に、ユーザー情報を取得する別のPHPスクリプトがあります。

<?php 
include("init.php"); 

$get_posts = "SELECT * FROM user_info where id='" . $_SESSION['id'] . "' LIMIT 1"; 
error_reporting(E_ALL); 
ini_set("display_errors", 1); 
$run_posts = mysqli_query($con, $get_posts); 

$posts_array = array(); 

while ($posts_row = mysqli_fetch_array($run_posts)) { 

    $row_array['id'] = $posts_row['id']; 
    $row_array['user_name'] = $posts_row['user_name']; 

    array_push($posts_array, $row_array); 
} 
$string = json_encode($posts_array, JSON_UNESCAPED_UNICODE); 

echo $string; 
?> 

ただし、このスクリプトは空の配列を返します。すでに1人のユーザーが登録されており、彼の詳細はuser_infoテーブルに表示されています。

[] 

どうしてですか?

を編集します。

私のAndroidの登録コードです。

public class RegisterFragment extends Fragment { 
private SessionManager session; 
EditText etEmail, etUsername, etPassword,etConfirmPassword; 
String email, userName, userPass,confirmPassword; 
Button registerButton; 
SqliteHandler sql; 
public RegisterFragment() { 
    // Required empty public constructor 
} 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    View v = inflater.inflate(R.layout.fragment_register, container, false); 
    Toolbar myToolbar = (Toolbar) v.findViewById(R.id.toolbar); 
    ((AppCompatActivity)getActivity()).setSupportActionBar(myToolbar); 
    setHasOptionsMenu(true); 

    etEmail = (EditText)v.findViewById(R.id.name); 
    etUsername = (EditText)v.findViewById(R.id.user_name); 
    etPassword = (EditText)v.findViewById(R.id.user_pass); 
    etConfirmPassword = (EditText)v.findViewById(R.id.confirm_pass); 
    registerButton = (Button)v.findViewById(R.id.registerBtn); 

    session = new SessionManager(getActivity()); 

    if (session.isLoggedIn()) { 
     // User ites already logged in. Take him to main activity 
     Intent intent = new Intent(getActivity(), Welcome.class); 
     startActivity(intent); 

    } 
    registerButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      email = etEmail.getText().toString(); 
      userName = etUsername.getText().toString(); 
      userPass = etPassword.getText().toString(); 
      confirmPassword = etConfirmPassword.getText().toString(); 

      if(userPass.equals(confirmPassword)){ 

       registerUser(email, userName, userPass, confirmPassword); 

      }else{ 

       Toast.makeText(getActivity(),"Passwords don't match",Toast.LENGTH_SHORT).show(); 
      } 
     } 
    }); 

    return v; 
} 
private void registerUser(final String email, final String userName, 
          final String password,final String confirmPassword) { 

    String tag_string_req = "req_register"; 

    StringRequest strReq = new StringRequest(Request.Method.POST, 
      Config.URL_REGISTER, new Response.Listener<String>() { 

     @Override 
     public void onResponse(String response) { 
      Log.d("Response", "Register Response: " + response.toString()); 

      try { 
       JSONObject jsonObject = new JSONObject(response); 
       if (jsonObject.getString("result").equals("success")) { 

        //Toast.makeText(getActivity(),jsonObject.getString("message"), Toast.LENGTH_LONG).show(); 
        String id = jsonObject.getString("message"); 
        Log.d("Theo", id); 
        //$don = array('result' =>"success","message"=>mysqli_insert_id($con)); 

        SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(getActivity()); 
        SharedPreferences.Editor editor = settings.edit(); 
        editor.putString("id", String.valueOf(id)); 
        editor.putString("email", email); 
        editor.putString("user_name", userName); 
        editor.putString("user_pass", password); 
        editor.putString("confirm_pass", confirmPassword); 

        editor.commit(); 
       } 
       else if (jsonObject.getString("result").equals("fail")) { 
        Toast.makeText(getActivity(),jsonObject.getString("message"), Toast.LENGTH_LONG).show(); 
       } 
      }catch(JSONException e){ 
       e.printStackTrace(); 
      } 
     } 
    }, new Response.ErrorListener() { 

     @Override 
     public void onErrorResponse(VolleyError error) { 
      Log.e("Error", "Registration Error: " + error.getMessage()); 
      Toast.makeText(getActivity(), 
        error.getMessage(), Toast.LENGTH_LONG).show(); 
     } 
    }) { 
     @Override 
     protected Map<String, String> getParams() { 
      // Posting params to register url 
      Map<String, String> params = new HashMap<String, String>(); 
      params.put("id", ""); 
      params.put("email", email); 
      params.put("user_name", userName); 
      params.put("user_pass", password); 
      params.put("confirm_pass", confirmPassword); 
      return params; 
     } 
    }; 
    // Adding request to request queue 
    AppController.getInstance().addToRequestQueue(strReq, tag_string_req); 
    } 
} 
+0

このような要素を押さずにwhileの中に値を格納することができます。$ posts_array ['id'] = $ posts_row ['id'];等々。ループの後に$ posts_arrayを出力した場合、結果は –

+2

2番目のスクリプトでは 'session_start();'を忘れてしまいます!! – Saty

+0

私はsession_start()を追加しました。しかし、私はまだ何も得られない! – Theo

答えて

2

これまで説明したように、Android端末からこのスクリプトにアクセスしています。その場合、のセッションは共有されないため、使用することはできません。

は何をする必要があると、ユーザー情報を取得し、このような何かにSQLクエリを変更するための第2の要求とと​​もにユーザーIDを送るあなたはパラメータにデータを送信すると仮定すると、

$get_posts = "SELECT * FROM user_info where id='".$_GET['id']."' LIMIT 1"; 

です。

+0

私はあなたのクエリを使用しましたが、それでも同じ問題があります。しかし、私は2番目のリクエストとともにユーザーIDを送っていません。私のコードでどこでそれを行うべきですか? – Theo

+0

あなたのアンドロイドコードはどうですか? –

+0

私は最初に登録されたユーザーデータを埋める投稿をしなければならないと思って、その後、ユーザーのIDを取得する別の要求を行うことです。私は2番目の部分で立ち往生しています。 idはauto_incrementedで、ユーザーが登録された後に番号が生成されます。登録リクエスト中にIDをポストしようとすると、nullになります。 – Theo

関連する問題