PDA

View Full Version : خطا در ارسال و دریافت اطلاعات از php در برنامه نویسی اندروید



مصطفی شکوری
جمعه 21 آبان 1395, 22:17 عصر
سلام دوستان

من یه صفحه لاگین داخل اپ ساختم که به دیتابیس mysql از طریق php وصل میشه.

کدهای php و mysql به خوبی کار می کنند. اما درهنگام ارسال و دریافت اطلاعات از اپلیکیشن به php مشکل وجود داره. مثلا echo که از php در اپلیکیشن دریافت میشه به شکل زیره:


<html><body><script type="text/javascript" src="/aes.js" ></script><script>function toNumbers(d){var e=[];d.replace(/(..)/g,function(d){e.push(parseInt(d,16))});return e}function toHex(){for(var d=[],d=1==arguments.length&&arguments[0].constructor==Array?arguments[0]:arguments,e="",f=0;f<d.length;f++)e+=(16>d[f]?"0":"")+d[f].toString(16);return e.toLowerCase()}var a=toNumbers("f655ba9d09a112d4968c63579db590b4"),b=toNumbers("98344c2eee86c3994890592585b49f80"),c=toNumbers("fb8ba46111eda80cc729391c1afb0580");document.cookie="__test="+toHex(slowAES.decrypt(c,2,a,b))+"; expires=Thu, 31-Dec-37 23:55:55 GMT; path=/"; location.href="http://myloginpage.webpi.ir/login.php?i=1";</script><noscript>This site requires Javascript to work, please enable Javascript in your browser or use a browser with Javascript support</noscript></body></html>

نمی دونم اشکال کار کجاست. کدهارو چندبار عوض کردم و از کتابخونه های مختلف و حتی از متود httpconnection استفاده کردم مشکلم حل نشد.
دوستان خواهشا کمک کنید چند روزه درگیرم. کد های php و Main Activity رو براتون میزارم.

کد php :

<?php$servername = "sql104.webpi.ir";$username = "webp3_19142778";$password = "shakoori74";$dbname = "webp3_19142778_tbl_user";
// Create connection$con = mysqli_connect($servername, $username, $password, $dbname);
$username = $_POST['username'];$password = $_POST['password'];
$query = mysqli_query($con, "SELECT * FROM tbl_user WHERE username='$username' and password='$password'");


if(mysqli_num_rows($query) > 0){ echo "success";}else{ echo "failure";} mysqli_close($con);?>

کدهای MainActivity :
public class MainActivity extends ActionBarActivity {

private EditText editTextUserName;
private EditText editTextPassword;


public static final String USER_NAME = "USERNAME";


String username;
String password;


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


editTextUserName = (EditText) findViewById(R.id.editTextUserName);
editTextPassword = (EditText) findViewById(R.id.editTextPassword);
}


public void invokeLogin(View view){
username = editTextUserName.getText().toString();
password = editTextPassword.getText().toString();


login(username,password);


}


private void login(final String username, String password) {


class LoginAsync extends AsyncTask<String, Void, String>{


private Dialog loadingDialog;


@Override
protected void onPreExecute() {
super.onPreExecute();
loadingDialog = ProgressDialog.show(MainActivity.this, "Please wait", "Loading...");
}


@Override
protected String doInBackground(String... params) {
String uname = params[0];
String pass = params[1];


InputStream is = null;
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("username", uname));
nameValuePairs.add(new BasicNameValuePair("password", pass));
String result = null;


try{
HttpClient httpClient = new DefaultHttpClient();
// httpClient.getParams().setParameter("http.protocol.cookie-policy", CookiePolicy.BROWSER_COMPATIBILITY);
HttpPost httpPost = new HttpPost(
"http://myloginpage.webpi.ir/login.php/");
httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));


HttpResponse response = httpClient.execute(httpPost);


HttpEntity entity = response.getEntity();


is = entity.getContent();


BufferedReader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"), 8);
StringBuilder sb = new StringBuilder();


String line = null;
while ((line = reader.readLine()) != null)
{
sb.append(line + "\n");
}
result = sb.toString();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return result;
}


@Override
protected void onPostExecute(String result){


String s = result.trim();


loadingDialog.dismiss();
if(s.equalsIgnoreCase("success")){
Intent intent = new Intent(MainActivity.this, UserProfile.class);
intent.putExtra(USER_NAME, username);
finish();
startActivity(intent);
}else {
Toast.makeText(getApplicationContext(), "Invalid User Name or Password", Toast.LENGTH_LONG).show();
}
}
}


LoginAsync la = new LoginAsync();
la.execute(username, password);


}
}

دوستان به دادم برسید.
ممنون

msroid
شنبه 22 آبان 1395, 00:14 صبح
سلام.

ابتدا برای اینکه مطمئن بشین خطا از سمت سرور هست یا از سمت اندروید، به جای استفاده از Post از Get استفاده کنید و وب سرویس رو توی خود مرورگر با ست کردن دستی پارامترها توی url امتحان کنید و ببینید جواب درست میده یا اینکه ارور میده. اگر جواب درست بود که مشکل از سمت اندروید هست اما اگر با ارور مواجه شدید میتونید مطمئن باشید که وب سرویس حتما مشکل داره.

Nevercom
شنبه 22 آبان 1395, 11:44 صبح
این مشکل رو قبلاً چند کاربر دیگه هم تو انجمن مطرح کرده بودن و ظاهراً بخاطر استفاده از هاست رایگان هست. تو این هاست های رایگان پلاگینی نصب شده که کارکرد امنیتی داره و این مشکل رو به وجود میاره.

اگر از هاست غیر رایگان استفاده می کنید، با هستینگ صحبت کنید و درخواست کنید ماژول testcookie-nginx-module رو غیرفعال کنن.

مصطفی شکوری
شنبه 22 آبان 1395, 21:41 عصر
خیلی متشکرم
فکر می کردم ممکنه به خاطر هاست رایگان باشه.
فقط یه درخواست کوچیک دارم. میشه یه هاست خوب معرفی کنید که این مشکل رو نداشته باشه. رایگان یا پولیش مهم نیست