2016-07-16 5 views
0

У меня есть два сценария php. Первый относится к регистрации пользователя через приложение Android. Вот оно:Получение информации о зарегистрированных пользователях

<?php 

session_start(); 
require "init.php"; 
header('Content-type: application/json'); 
$id = $_POST['id']; 
$email = $_POST['email']; 
$user_name = $_POST['user_name']; 

$user_pass = $_POST['user_pass']; 
$passwordEncrypted = sha1($user_pass); 

$confirmPass = $_POST['confirm_pass']; 
$confPasswordEncrypted = sha1($confirmPass); 

$msg = "Congratulations. You are now registered to the most amazing app ever!"; 

if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { 

    $don = array('result' => "fail", "message" => "Please enter a valid email"); 
} 
if ($email && $user_name && $user_pass && $confirmPass && filter_var($email, FILTER_VALIDATE_EMAIL)) { 

    $sql_query = "select * from user_info WHERE email ='" . mysqli_real_escape_string($con, $email) . "' or user_name 
     ='" . mysqli_real_escape_string($con, $user_name) . "'"; 

    $result = mysqli_query($con, $sql_query); 

    $results = mysqli_num_rows($result); 

    if ($results) { 
     $don = array('result' => "fail", "message" => "Email or username exists."); 
    } else { 

     $sql_query = "insert into user_info values('$id','$email','$user_name','$passwordEncrypted','$confPasswordEncrypted');"; 

     if (mysqli_query($con, $sql_query)) { 

      $_SESSION['id'] = mysqli_insert_id($con); 
      $id = mysqli_insert_id($con); 

      $don = array('result' => "success", "message" => $id); 
      mail($email, "Well done. You are registered to my sample app!", $msg); 
     } 
    } 
} else if (!$email) { 
    $don = array('result' => "fail", "message" => "Please enter a valid email"); 
} else if (!$user_name) { 

    $don = array('result' => "fail", "message" => "Please enter your username"); 
} else if (!$user_pass) { 

    $don = array('result' => "fail", "message" => "Please enter a password"); 
} else if (!confirmPass) { 

    $don = array('result' => "fail", "message" => "Please confirm your password"); 
} 
echo json_encode($don); 
?> 

После успешной регистрации, пользователь получает сообщение Тост в его андроида телефон, показывая его идентификатор. Я изменю это позже на сообщение, говорящее что-то вроде успешной регистрации. Теперь у меня есть еще один 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; 
?> 

Однако этот скрипт возвращает пустой массив. Обратите внимание, что у меня уже зарегистрирован один пользователь, и его подробные данные отображаются в таблице 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 в массиве без нажатия таких элементов, как this $ posts_array ['id'] = $ posts_row ['id']; и так далее. Если вы напечатаете $ posts_array после цикла, вы получите результаты –

+2

забудьте 'session_start();' на втором скрипте !! – Saty

+0

Я добавил session_start(); но я все равно ничего не получаю !!! – Theo

ответ

2

Как вы уже упоминали, вы получаете доступ к этому скрипту с телефона Android. В этом случае вы не можете использовать сеансы, так как они не будут использоваться совместно.

Что вам нужно сделать, это отправить идентификатор пользователя вместе со вторым запросом, чтобы получить информацию пользователя и изменить запрос SQL на что-то вроде этого,

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

Предполагая, что вы будете передавать данные в параметрах.

+0

Я использовал ваш запрос, но все еще имею ту же проблему. Но я не отправил идентификатор пользователя вместе со вторым запросом. Где я должен это делать в своем коде? – Theo

+0

Какой у вас код для Android? –

+0

Думаю, что я должен сначала сделать сообщение, которое заполнит зарегистрированные данные пользователя, а затем сделает другой запрос, который получит идентификатор пользователя. Я застрял во второй части. Идентификатор auto_incremented и число генерируется после регистрации пользователя. Если я попытаюсь опубликовать идентификатор во время запроса на регистрацию, он будет равен нулю. – Theo

Смежные вопросы