-
المساهمات
787 -
تاريخ الانضمام
-
تاريخ آخر زيارة
-
عدد الأيام التي تصدر بها
2
نوع المحتوى
ريادة الأعمال
البرمجة
التصميم
DevOps
التسويق والمبيعات
العمل الحر
البرامج والتطبيقات
آخر التحديثات
قصص نجاح
أسئلة وأجوبة
كتب
دورات
أجوبة بواسطة Flutter Dev
-
-
السلام عليكم ورحمة الله وبركاته
اهلا ي اخوان ..
اعتذر عن طرح استفسار من جديد بخصوص هذا الموضوع الاخوان سابقا جازهم الله خير شرحو الموضوع ولكني واجهة مشكله في تطبيق الشرح على الكود الخاص فيني ياليت اذا احد عنده الامكانيه والخبره يساعدنا
احتاج تطبيق الفكره على الكود التالي:
<?php if ($_SERVER['REQUEST_METHOD']=='POST') { include 'connt.php'; $phone = $_POST['phone']; $password = $_POST['password']; $sql = "SELECT * FROM user WHERE phone='$phone' AND password='$password' "; $response = mysqli_query($con, $sql); $result = array(); $result['login'] = array(); if ( mysqli_num_rows($response) === 1 ) { $row = mysqli_fetch_assoc($response); $index['name'] = $row['name']; $index['phone'] = $row['phone']; array_push($result['login'], $index); $result['success'] = "1"; $result['message'] = "success"; echo json_encode($result); mysqli_close($con); } } ?>
<?php $db_name = "XXXXX"; $mysql_username = "root"; $mysql_password = ""; $server_name = "localhost"; $con = mysqli_connect($server_name, $mysql_username, $mysql_password,$db_name); if($con){ echo"connection OK"; } else{ echo "conection not"; } ?>
لا اعلم اذا الموضوع رح يشكل فرق ولكني للعلم انا اتصل لدى هذا الكود من خلال مكتبة volley في اندرويد ك صفحة تسجيل دخول واحصل على بيانات المستخدم منها
-
بتاريخ 4 ساعات قال مصطفى القباني:
تحياتي أستاذ مروان
في النموذج الأول، لنفرض أن المتغير $studentid قيمته تساوي الstring التالي:
"1; DROP TABLE student;"
وعند ترجمة الطلب الآتي:$CheckSQL = "SELECT * FROM student WHERE studentid='$studentid'";
يصبح:
SELECT * FROM student WHERE studentid=1; DROP TABLE student;
لذلك الكود به ثغرة sql injection.
لتجنب ذلك لابد من إستخدام الprepared statements و parameterized queries.
تنفيذ الprepared statement يكون على خطوتين، الأولى التجهيز prepare ثم التنفيذ execute.بما أنك تستخدم MySQLi يمكنك عمل ذلك عن طريق الآتي:
$stmt = $mysqli->prepare("SELECT * FROM student WHERE studentid = ?") $stmt->bind_param('s', $studentid); $stmt->execute(); $result = $stmt->get_result();
في السطر الثاني ال's' تشير إلى أن نوع المتغير هو string، إذا كان studentid هو int عليك تغييره إلى 'i'.
بهذه الطريقة تصبح العبارة آمنة، بسبب أن جزء الأمر مفصول عن جزء الداتا، والسبب في أي sql injection هو خلط البيانات بالأوامر، حيث يمكن تمرير أمر إلى الداتابيز في شكل داتا.
أي أمر ترسله إلى الداتابيز سواء إضافة أو قراءة، ويكون في هذا الأمر parameter، يجب تجهيزه بهذه الطريقة.
بالتوفيق
وصلت عزيزي
كل الشكر لك عزيزي
بتاريخ 2 ساعات قال عبود سمير:مرحباً مروان ..
للحماية من ثغرة SQL injection يُنصح دائما بإستعمال prepared statment و parameterized queriesفمثلا إن كنت تستخدم PDO تستعمل الشيفرة التالية:
<?php $stmt = $pdo->prepare('SELECT * FROM table_name WHERE name = :name'); $stmt->execute([ 'name' => $name ]);
و إن كنت تستخدم MySQLi تستعمل الشيفرة التالية:
<?php $stmt = $dbConnection->prepare('SELECT * FROM table_name WHERE name = ?'); $stmt->bind_param('s', $name); // 's' من أجل تعيين نوع المتغير => string $stmt->execute();
و للحماية من xss أي Cross-Site Scripting يُنصح بإستعمال الفلترة و التعقيم للبيانات التي تأتي من المُستخدم قبل تخزينها في قاعدة البيانات هناك قاعدة تقول لا تثق ابدا ً بمدخلات المستخدم
موضوع الحماية كبير جداً و إذا كنت تستخدم pure php بدون اي إطار عمل فسيتوجب عليك البحث عن الثغرات المشهورة و كيفية تجاوزها و تطبيق الحلول أما إن كنت تستخدم إطار عمل فستجد أنه قد تم توفير حلول لمُعظم الثغرات المشهورة من طرف مطورين الإطار
بالتوفيق
ربي يعطيك الف صحه وعافيه عزيزي
-
ايضا هل انا مجبور اني اعدل كل ملفات مشروعي او فقط ملفات في مواقع محدده؟ يعني مثلا عندي ملفات تعرض لي البيانات في listview مثلا هل تحتاج حمايه؟او فقط اعدل الملفات الي فيها insert مثل صفحة تسجيل عضويه وصفحة دخول بمعنى فيه مكان لداخل البيانات؟
-
السلام عليكم ورحمة الله وبركاته
مرحبا ي اخوان.. لدي استفسار لو تكرمتو رح اضع نموذجين من ملفات php واحتاج معرفة كيف ممكن احمي هذا النماذج من ثغرت SQL Injections
انا استخدم قواعد mysql لحفظ بيانات تطبيقي اندرويد
النموذج الاول:
<?php include 'conntion.php'; $studentid = $_POST['studentid']; $CheckSQL = "SELECT * FROM student WHERE studentid='$studentid'"; $check = mysqli_fetch_array(mysqli_query($con,$CheckSQL)); if(isset($check)){ echo 'studentid Already Exist'; } else{ $sql = "SELECT * FROM student"; if ( mysqli_query($con, $sql) ) { $result["success"] = "1"; $result["message"] = "success"; echo json_encode($result); mysqli_close($con); } else { $result["success"] = "0"; $result["message"] = "error"; echo json_encode($result); mysqli_close($con); } } ?>
النموذج الثاني:
<?php include 'conntion.php'; $query = " Select * FROM student WHERE IsActive = 5; "; $result = mysqli_query($con, $query); $number_of_rows = mysqli_num_rows($result); $temp_array = array(); if($number_of_rows > 0) { while ($row = mysqli_fetch_assoc($result)) { $temp_array[] = $row; } } header('Content-Type: application/json'); echo json_encode(array("students"=>$temp_array)); mysqli_close($con); ?>
ياليت يكون مع الشرح بشكل مختصر حتى افهم الفكره ولكم جزيل الشكر
-
بتاريخ الآن قال Hamada Sayed:
غير واضح بتفاصيل الخطط في بعض الاستضافات
اترك السؤال بشكل عام في القسم المخصص وقد تجد اجابه.
شكرا اخي
-
بتاريخ 40 دقائق مضت قال محمد ربيع زليول:
بالنسبة للإدراج فهو غير مهم، الطريقة التي تقوم بها بإدراج التاريخ صحيحة.
يجب تعديل التاريخ عند قرائته، في php يمكنك تعديل التاريخ بالطريقة التالية:
<?php $str = '2020-07-08 18:18:27'; echo date('g:i A', strtotime($str)); // 6:18 PM echo "\n"; echo date('d/M/Y', strtotime($str)); // 08/Jul/2020 ?>
شكرا على ردك عزيزي انا حليت المشكله بشكل مختلف قليلا قمت بدراج الوقت بالكود التالي :
SimpleDateFormat formatter = new SimpleDateFormat( "hh:mm:ss", Locale.US); Date date = new Date();
في الخلفية بدون تدخل المستخدم وحفظه بتنسيق الي اريده وبطبيعة الحال سيعود بتنسيق الذي حفظته فيها
اكرر شكري لك عزيزي
-
1
-
-
بتاريخ منذ ساعة مضت قال Hamada Sayed:
جرب التشغيل علي استضافه محليه localhost علي حاسوبك
ممكن تكون سرعه نقل البيانات من الاستضافه المجانيه السبب في البطئ
بالاضافه لنصائح محمد وصالح.
شكرا لك عزيزي
ولكن ياليت بس اعرف نقطة منك كيف اعرف سرعة نقل البيانات من خلال الخطة التي اشريها ؟ بماذا يرمز لها ؟
-
السلام عليكم ورحمة الله وبركاته
اقوم بحفظ الوقت من خلال ملف php الى قاعدة بيانات mysql من خلال الكود التالي:
<?php include 'con.php'; date_default_timezone_set("Asia/Muscat"); $sql = "insert into student(time)values(now())"; if(mysqli_query($con, $sql)) { } else { } mysqli_close($con); ?>
الان الوقت يصير له ادراج في قاعدة البيانات لا توجد مشكلة المشكلة فقط انه هو يعمل ادراج بنظام 24 ساعه . انا عامل حقل في قاعدة البيانات في جدول الطلاب باسم time وعامل نوع البيانات time
وهذا صورة للمشكلة لتوضيح اكثر
كيف يمكن تغير نظام حفظ الوقت الى نظام 12 ساعه بحيث لا يكون لدي ساعه 12-14-15
بل 1-2-3
-
بتاريخ الآن قال محمد بنرجب:
بالنسبة للصور انصحك تستخدم صور متوافقة مع الهاتف و باحجام صغيرة و ليست صور ويب
فمثلا صورة لمقال بموقع يكون حجمها كبير لانها ستضهر في شاشة كبيرة لكن في الهاتف الجوال فلا تحتاج صور بجودة عالية.
نصحية جميله اشكرك عزيزي
-
السلام عليكم ورحمة الله وبركاته
لدي استفسار لو تكرمتو .. انا قمت بعمل تطبيق اندرويد في اندرويد ستوديو بلغة الجافا .
وقمت باستخدام مكتبة volley في جميع الاتصالات لني قريت انها سريعه قبل ما ابدي تطوير تطبيقي
ولكن الاحظ الان بعد جاهزية التطبيق تقريبا انه فيه نوعا من البطى في جلب الصور مثلا في قرائة وتحميل الصور
ايضا مثلا بعض الازار الاستجابة بطيئة مثل زر الاعجاب
ايضا جلب بعض الارقام والبيانات نوعا ما بطية
ما هيا الاسباب التي تودي لمثل ذلك ؟ علما ان تطبيقي على استضافة مجانية حاليا
-
بتاريخ 7 ساعات قال عبود سمير:
أظن أن الإستعلام سيكون نفسه فقط ستُغير طريقة العرض و لنفرض أنك قمت مسبقاً بتخزين لغة المُستخدم في متغير بهذا الشكل:
String lang = "...."; // ar or en
و في الحلقة التي تقوم بها بعد جلب البيانات ستقوم بالتالي:
String imageUrl = hit.getString("name_" + lang);
و بهذا الشكل سيتم عرض البيانات حسب لغة المُستخدم التي يتصفح بها التطبيق
بالتوفيق
شكرا لك عزيزي لقد نجح الامر حسب تعليماتك السابقه
-
1
-
-
بتاريخ 4 دقائق مضت قال عبود سمير:
مرحباً مروان ...
الفكرة أنك تقوم بتخزين الخانة التي تريد ترجمتها بأكثر من لغة في قاعدة البيانات مثلا name_ar و name_en بحيث في الخانة name_ar تُخزن الإسم باللغة العربية و في الخانة name_en تُخزن الإسم باللغة الإنجليزية و عندما تريد أن تعرض البيانات يُمكنك عرض الإسم حسب لغة المُستخدم .الفكرة الثانية أنك مثلا تريد عمل ترجمة لجدول users فتقوم بجعل كافة البيانات التي تحتمل ترجمة في جدول ثاني و تُسميه user_translations بحيث الجدول الأول يحتوي على البيانات التي لا تحتاج ترجمة و الجدول الثاني يحتوي على البيانات التي تحتاج ترجمة بحيث تربط الجدولين معاً بعلاقة 1 لأكثر يعني صف واحد من جدول users يكون له صف أو أكثر من جدول user_translations مثلا نريد ترجمة خانة إسمها name سيكون جدول user_translations يحتوي على الخانات التالية:
- id
- user_id
- name
- locale
الخانة locale سنُخزن فيها لغة الصف فمثلا لو كنا نريد اللغتين العربية و الإنجليزية سيكون لكل صف من الجدول الأساسي صفين من الجدول الثاني صف يتم تخزين فيه الإسم باللغة العربية و تكون الخانة locale تحتوي على ar و صف يتم تخزين فيه الإسم باللغة الإنجليزية و تكون الخانة locale تحتوي على en
بالتوفيق
اهلا بيك عزيزي
اعتقد ان الفكرة الاولى اسهل واوضح لدي بحيث يمكنني فقط عمل استعلامين او اعمل دالة الاتصال مرتين لو كانت للغة التطبيق عربية شغل لي ميثود الفولي التاليه ولو كانت انجليزية شغل لي ميثود الفولي التالية
واضحه الغالي كل الشكر لك بطبقها ولو فيه شي ما فهمته الي عوده لك عزيزي تسلم
-
1
-
السلام عليكم ورحمة الله وبركاته
تحيه طيبه للجميع
لدي استفسار اعزائي
انا عامل ترجمة لتطبيقي وهو يدعم اللغة العربية والانجليزية الافتراضية بطبيعة الحال . مشكلتي الان اني عامل مجموعة كلمات في قاعدة البيانات بحيث اني اعرض صوره + النص المرافق لها الذي سبق وتم تخزينه في قاعدة البيانات ولكن اذا كان تطبيقي يعمل بلغة العربية الان مثل المستخدم مختار العربية كيف ممكن نترجم هذا النصوص التي تأتي لنا من قاعدة البيانات الى للغة العربية .
مع العلم اني احصل على البيانات من خلال الاتصال التالي :والحقل المطلوب ترجمته حول حقل name
private void parseJSON() { String url = "https://===========.000webhostapp.com/ww.php"; JsonObjectRequest request = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject response) { progressDialog.dismiss(); try { JSONArray jsonArray = response.getJSONArray("students"); for (int i = 0; i < jsonArray.length(); i++) { JSONObject hit = jsonArray.getJSONObject(i); JSONObject jsonObject=null; String creatorName = hit.getString("categoryID"); String imageUrl = hit.getString("name"); String movie_id = hit.getString("imageurl"); mExampleList.add(new ListCatgery(creatorName,imageUrl,movie_id)); } mExampleAdapter = new AdapterCatgeryMain(getContext().getApplicationContext(), mExampleList); mRecyclerView.setAdapter(mExampleAdapter); } catch (JSONException e) { e.printStackTrace(); } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { error.printStackTrace(); } }); mRequestQueue.add(request); }
أي فكرة لديكم اعزائي لذلك؟
-
بتاريخ 1 ساعة قال Yomna Raouf:
// build.gradle implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.0.0" // MyGlideModule.kt @GlideModule class MyGlideModule : AppGlideModule() // MainActivity.kt override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val circularProgressDrawable = CircularProgressDrawable(this) circularProgressDrawable.strokeWidth = 5f circularProgressDrawable.centerRadius = 30f circularProgressDrawable.start() GlideApp.with(applicationContext) .load("https://raw.githubusercontent.com/bumptech/glide/master/static/glide_logo.png") .placeholder(circularProgressDrawable) .into(a_main_image) }
يمكنك تنفيذ ذلك باستخدام CircularProgressDrawable
شكرا لك عزيزي
-
السلام عليكم ورحمة الله وبركاته
تحيه طيبه للجميع
لدي استفسار لو تكرمتو . انا عامل RecyclerView لتعرض مجموعة صور للمستخدم ولكن في بعض الاوقات بسبب اسباب مختلفة الصور تاخذ وقت حتى تظهر للمستخدم.
ما اريد عمله الان في وقت تحميل هذا الصور للمستخدم في RecyclerView اريد ان يتم عرض مثل تاثير او شكل دائرة يدور في داخل الصورة حتى يعرف المستخدم بوجود عملية جاريه
مثال على ما احتاجه الصورة التاليه:
كيف يمكنني عمل ذلك؟
مرفق لكم الكود الخاص فيني:
MyAdapter
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> { List<List_Data>list_data; Context ct; public MyAdapter(List<List_Data> list_data, Context ct) { this.list_data = list_data; this.ct = ct; } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.list_data,parent,false); return new ViewHolder(view); } @Override public void onBindViewHolder(ViewHolder holder, int position) { final List_Data listData=list_data.get(position); Picasso.with(ct) .load(listData.getImageurl()) .into(holder.img); } @Override public int getItemCount() { return list_data.size(); } public class ViewHolder extends RecyclerView.ViewHolder{ private ImageView img; public ViewHolder(View itemView) { super(itemView); img=(ImageView)itemView.findViewById(R.id.image_view); } }
MainActivity
private static final String HI = "https://uniqueandrocode.000webhostapp.com/hiren/androidtutorial/androidweb.php"; private List<List_Data> list_data; private MyAdapter adapter; private RecyclerView rv; private JsonArrayRequest request; private RequestQueue requestQueue; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); rv=(RecyclerView)findViewById(R.id.recycler_view); rv.setHasFixedSize(true); rv.setLayoutManager(new LinearLayoutManager(this)); list_data=new ArrayList<>(); getImageData(); } private void getImageData() { request=new JsonArrayRequest(HI, new Response.Listener<JSONArray>() { @Override public void onResponse(JSONArray response) { JSONObject jsonObject=null; for (int i=0; i<response.length(); i++){ try { jsonObject=response.getJSONObject(i); List_Data listData=new List_Data(jsonObject.getString("imageurl")); list_data.add(listData); } catch (JSONException e) { e.printStackTrace(); } } setupData(list_data); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { } }); requestQueue= Volley.newRequestQueue(this); requestQueue.add(request); } private void setupData(List<List_Data> list_data) { adapter=new MyAdapter(list_data,this); rv.setAdapter(adapter); } }
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <androidx.recyclerview.widget.RecyclerView android:id="@+id/recycler_view" android:layout_width="match_parent" android:layout_height="wrap_content"> </androidx.recyclerview.widget.RecyclerView> </RelativeLayout>
-
بتاريخ 13 ساعات قال Mohamd Imran:
السلام عليكم أخي ,أتوقع إنك تقوم بإستخدام ذلك في fragment لذلك يظهر لك الخطأ إن كنت تريد إستخدام الكود في fragment إستخدمه هكذا
getActivity().getResources();
أو
getApplicationContext().getResources();
هلا بيك عزيزي
تسلم على ردك
خلاص تم حل المشكله
مودتي لك
-
1
-
-
بتاريخ 2 دقائق مضت قال Yomna Raouf:
نعم بالضبط. أرجو أن يعمل هذه المرة
كل الشكر لك اختي
-
بتاريخ 14 دقائق مضت قال Yomna Raouf:
ما قصدته هنا هو استخدام جملة if
كلا الحلين سببا ذلك ؟؟
الان فهمت عليك يعني انتي تقصدي بيكون بهذا الشكل :
if (sharedPreferences != null){ }else { get(); }
-
بتاريخ 2 دقائق مضت قال Yomna Raouf:
public void setLocale(String lang) { myLocale = new Locale(lang); Resources res = getResources(); DisplayMetrics dm = res.getDisplayMetrics(); Configuration conf = res.getConfiguration(); conf.locale = myLocale; res.updateConfiguration(conf, dm); onConfigurationChanged(conf); /*Intent refresh = new Intent(this, AndroidLocalize.class); startActivity(refresh);*/ } @Override public void onConfigurationChanged(Configuration newConfig) { // refresh your views here lblLang.setText(R.string.langselection); super.onConfigurationChanged(newConfig); // Checks the active language if (newConfig.locale == Locale.ENGLISH) { Toast.makeText(this, "English", Toast.LENGTH_SHORT).show(); } else if (newConfig.locale == Locale.FRENCH){ Toast.makeText(this, "French", Toast.LENGTH_SHORT).show(); } }
declare in Manifest
android:configChanges="locale"
ماذا عن هذا ؟؟
ولكن الان لا يتم حفظ للغة التي تم اختيارها اختي ب هذا الطريقة
سابقا هو يحفظ الكود الذي عملت مشاركه له ولكن هو يعمل تحديث للاكتفتي في كل لحظة فقط
-
بتاريخ الآن قال Yomna Raouf:
اعتقد أنه يجب عليك التحقق من activity في ()onCreate اذا كان ال sharedPreference له القيمة null أم لا
اذا كانت null ستكون الشاشة هي شاشة اختيار اللغة و ان لم تكن ستكون الشاشة homescreen او أيا كان ما تريده.
اهلا بيك
المشكلة هنا على حسب اعتقادي ولكن كيف يمكن استبداله
Intent refresh = new Intent(this, Arabic.class); startActivity(refresh);
هو يعمل تحديث للاكتفي ويوصل ل sharedPreference ويرجع من دالة ()onCreate لما يصير استدعاء ل ملف sharedPreference
-
بتاريخ 1 دقيقة مضت قال Yomna Raouf:
لم أفهم ماذا تقصد ؟؟
ياليت تزوري هذا الموضوع لو امكن
-
اهلا ي اخوان
قمت بعمل كود لتمكين المستخدم من اختيار للغته المفضلة الكود شغال ولله الحمد وقمت باضافة له وهيا حفظ للغته المختاره حتى يتمكن بعد ايقاف التطبيق ورجوع له من جديد ان يستطيع اللغة التي اختارها والامر ناجح المشكلة الان الاكتفتي صاير يعمل تحديث باستمرار بدون توقف كل ما دخلت عليه ياليت اذا احد يعرف سبب المشكله يساعدنا بحلها
الكود المستخدم:
public class Arabic extends AppCompatActivity { Toolbar toolbar; SharedPreferences sharedPreferences; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.arabic); sharedPreferences=getSharedPreferences("mykedy",Context.MODE_PRIVATE); findViewById(R.id.BTN_ar).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { setLocale("ar"); } }); findViewById(R.id.BTN_en).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { setLocale("en"); } }); toolbar = findViewById(R.id.toolbar); toolbar.setTitle(getResources().getString(R.string.app_name)); setSupportActionBar(toolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setHomeButtonEnabled(true); toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { startActivity(new Intent(Arabic.this, MainActivity.class)); finish(); } }); // get(); } @SuppressWarnings("deprecation") public void setLocale(String lang) { Locale myLocale = new Locale(lang); DisplayMetrics dm = getResources().getDisplayMetrics(); Configuration conf = getResources().getConfiguration(); conf.locale = myLocale; getResources().updateConfiguration(conf, dm); Intent refresh = new Intent(this, Arabic.class); startActivity(refresh); SharedPreferences share = getSharedPreferences("Data", Context.MODE_PRIVATE); SharedPreferences.Editor edit = share.edit(); edit.putString("LOCALE",lang); edit.commit(); } public void get( ) { SharedPreferences share = getSharedPreferences("Data", Context.MODE_PRIVATE); String lan = (share.getString("LOCALE","")); setLocale(lan); } }
-
بتاريخ 1 دقيقة مضت قال Yomna Raouf:
public void loadLocale() { String langPref = "Language"; SharedPreferences prefs = getSharedPreferences("CommonPrefs", Activity.MODE_PRIVATE); String language = prefs.getString(langPref, ""); changeLang(language); } public void changeLang(String lang) { if (lang.equalsIgnoreCase("")) return; myLocale = new Locale(lang); saveLocale(lang); Locale.setDefault(myLocale); android.content.res.Configuration config = new android.content.res.Configuration(); config.locale = myLocale; getBaseContext().getResources().updateConfiguration(config,getBaseContext().getResources().getDisplayMetrics()); } public void saveLocale(String lang) { String langPref = "Language"; SharedPreferences prefs = getSharedPreferences("CommonPrefs", Activity.MODE_PRIVATE); SharedPreferences.Editor editor = prefs.edit(); editor.putString(langPref, lang); editor.commit(); }
و في ()onCreate
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_change_language); loadLocale(); }
أو:
SharedPreferences sharedPref = getActivity().getPreferences(MY_PREFS_NAME,Context.MODE_PRIVATE); SharedPreferences.Editor editor = sharedPref.edit(); editor.putString("lang", language); editor.commit();
لتحصل على ال sharedprefrence:
Context context = getActivity(); SharedPreferences sharedPref = context.getSharedPreferences( MY_PREFS_NAME, Context.MODE_PRIVATE); String language = sharedPref.getString("lang", null);
يمكنك الاستعانة بالمرجع التالي:SharedPreferences reference
او الدرس التالي:sharedPreference tutorial
اهلا اختي
شكرا على ردك
الان انا قمت بعمل الحفظ لا توجد مشكلة ولكن المشكلة اصبح الاكتفتي يتحدث لدي بستمرار في كل ثانية بدون توقف
-
قمت بعمل اختيار للغة في التطبيق الاختيار شغال لا توجد مشكله ولكن المشكلة بعد اغلاق المستخدم للتطبيق توجد اللغة الى للغة الجهاز الافتراضية وليس ما تم اختياره
انا اريد حفظ اللغة المختارة ولما يفتح المستخدم التطبيق يستعيد او يكمل على اللغة التي اختارها سابق
هذا كود الصفحة :
public class Arabic extends AppCompatActivity { Toolbar toolbar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.arabic); findViewById(R.id.BTN_ar).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { setLocale("ar"); } }); findViewById(R.id.BTN_en).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { setLocale("en"); } }); toolbar = findViewById(R.id.toolbar); toolbar.setTitle(getResources().getString(R.string.app_name)); setSupportActionBar(toolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setHomeButtonEnabled(true); toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { startActivity(new Intent(Arabic.this, MainActivity.class)); finish(); } }); } @SuppressWarnings("deprecation") public void setLocale(String lang) { Locale myLocale = new Locale(lang); DisplayMetrics dm = getResources().getDisplayMetrics(); Configuration conf = getResources().getConfiguration(); conf.locale = myLocale; getResources().updateConfiguration(conf, dm); Intent refresh = new Intent(this, Arabic.class); startActivity(refresh); } }
مشكلة في إغلاق ثغرة sql injection من خلال الprepared statement
في أسئلة البرمجة
نشر
اهلا بك اخي الكريم
في البداية ربي يعطيك الف صحه وعافيه عزيزي ويزيدك من واسع فضله من العلم باذن الله
اول نقطة افهمك من كلامك ان كل المشكلة في هذا اول 3 اسطر الي فيها الاستعلام فقط اما باقي الملف لا يتغير شكله سوى كان josn او لا.
الان قمت بتطبيق ما ذكرته لي وظهر لي الخطا التالي
ويمكنك التعامل مع الresult المرجعة ... بنسبة ل هذا الي فهمته رح يبقا شكل الكود على ما هو عليه صحيح ذلك؟
الكود كامل الان كالتالي: