• الإعلانات

    • فيصل الحربي

      تسجيل عضوية جديدة في المنتدى   01/31/2016

      السلام عليكم ورحمة الله وبركاته  عزيزي العضو الجديد :  حاليا رسالة الإيميل لتأكيد صحة إيميلكم تذهب للبريد العشوائي ( جاري حل المشكلة )  فإذا لم تجد رسالة التحقق من إيميلكم في صندوق الوارد لديكم إتجه للبريد العشوائي ( JUNK)  وقم بتفعيل إشتراككم من هناك   

البحث في المنتدى

Showing results for tags 'json'.

  • البحث بالتاقات

    اكتب الكلمات المفتاحيه بينها علامه الفاصله
  • البحث بكاتب الموضوع

تم إيجاد 14 نتيجة

  1. بحاول أحصل على قيمة String من ملف JSON  بس المشكله ان القيمة عباره عن: Object > Array > String و حاولت بأكتر من طريق بس الطريقه الاخيره حاسس ان ناقص فيها حاجه بسيطه او فى جزء مش عامله صح, الكود مرفق, و ارجو منكم توضيح اين المشكله. انا بحاول اعمل iteration لل JsonObject  و بعديها بعمل مره كمان فوق الJsonArray علشان احصل على القيمه.  أنا عامل فى التطبيق بتاعى 3 ملفات. ملف MainActivity و دا اللى عامل فيه Parsing وبقرأ فيه ملف الJSON و بقرأ منه القيم. DetailActivity دا اللى هحتاج فيه الString بتاعة videoID. PostModel القائمة اللى فيها ال getter  و ال setter و كل الStrings اللى بحتاج لها فى الملفين الاخرين. JSON: { "status":"ok", "count":10, "count_total":184, "pages":19, "posts":[ { }, { "id":2413, , "categories":[ { "id":100, "slug":"logging", "title":"logging", "description":"", "parent":0, "post_count":1 } ], "comments":[ { "id":3564, "content":"<p>\u47 <\/p>\n", "parent":0 } ], "comment_count":1, "thumbnail":"http:\/\/www.5.com\/wtent\g", "custom_fields":{ "dsq_thread_id":[ "2365140" ], "videoID":[ "--ffwf92jvDFy" ] }, "thumbnail_images":{ "full":{ "url":"http:\/\/www.5.com\/jpg", "width":727, "height":454 }, "thumbnail":{ "url":"http:\/\/www.5.com\/wp-con50.jpg", "width":150, "height":150 } } } ] } القيمة المطلوب الحصول عليها هى قيمة الــ videoID    PostModel: private List<CategoryCast> categoryCastList; private List<VidCast> videoIDList private String videoID; private JSONObject obj; public JSONObject getObj() { return obj; } public void setObj(JSONObject obj) { this.obj = obj; } public String getVideoID() { return videoID; } public void setVideoID(String videoID) { this.videoID = videoID; } public List<VidCast> getvideoIDList() { return videoIDList; } public void setvideoIDList(List<VidCast> videoIDList) { this.videoIDList = videoIDList; } public List<CategoryCast> getCategoryCastList() { return categoryCastList; } public void setCategoryCastList(List<CategoryCast> categoryCastList) { this.categoryCastList = categoryCastList; } public static class CategoryCast { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } } public static class VidCast { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } }   MainActivity: List<PostModel.VidCast> videoIDList = new ArrayList<>(); for (int y = 0; y < finalObject.getJSONObject("custom_fields").length(); y++) { PostModel.VidCast vidCast = new PostModel.VidCast(); for (int s = 0; s < finalObject.getJSONArray("videoID").length(); s++){ { postModel.setVideoID(videoID); postModelList.add(postModel); }; } vidCast.setName(finalObject.getJSONObject("custom_fields").getJSONObject(y).get("0")); videoIDList.add(vidCast); } postModel.setvideoIDList(videoIDList); postModelList.add(postModel); List<PostModel.CategoryCast> categoryCastList = new ArrayList<>(); for (int j = 0; j < finalObject.getJSONArray("categories").length(); j++) { PostModel.CategoryCast categoryCast = new PostModel.CategoryCast(); categoryCast.setName(finalObject.getJSONArray("categories").getJSONObject(j).getString("title")); categoryCastList.add(categoryCast); } postModel.setCategoryCastList(categoryCastList); // adding the final object in the list postModelList.add(postModel); } return postModelList; DetailActivity: StringBuffer stringBuffer = new StringBuffer(); for(PostModel.CategoryCast categoryCast : postModel.getCategoryCastList()){ stringBuffer.append(categoryCast.getName() + ", "); } StringBuffer videoStringBuffer = new StringBuffer(); for(PostModel.VidCast videoIDList : postModel.getvideoIDList()) { videoStringBuffer.append(videoStringBuffer.toString()); } دا اللى هحتاج فيه الString بتاعة videoID. وشكراً
  2. من فضلكم أريد أن أعرف كيف يتم إستخراج داتا معينة من Json Object بمعنى اني أريد أن أعرض بيانات معينة من الاوبجكت بشروط معينة. مثلا الأوبجكت به أخبار 10 أيام وأنا أريد أن أعرض الأخبار إذا كان التاريخ هو تاريخ اليوم فقط وبداخل اليوم يوجد لغتين وأنا أريد أن أعرض الأخبار إذا كانت اللغة العربي فقط ثم داخل اللغة أقسام وأنا أريد أن أعرض قسم معين .... وهكذا لأن الأوبجكت عبارة عن مصفوفة متداخلة Associative Array. من يعرف كيف يكون هذا بالكود سواء php أو JavaScript يكون مشكورا لأني تعبت من البحث ولم أجد كود يفي بالغرض المطلوب.
  3. السلام عليكم ورحمة الله وبركاته   لدي ملف من نوع JSON واود ان اقوم بالتعيديل عليه وحفظ التعديلات من خلال الـ  jQuery عن طريق الدالة getJSON   المشكلة التي لدي هي ان التححديث يتم فقط على مستوى المتصفح ولا يتم حدوث اي تعديل على الملف   ملف الـ JSON {"users":[ { "firstName":"Ray", "lastName":"Villalobos", "joined": { "month":"January", "day":12, "year":2012 } }, { "firstName":"John", "lastName":"Jones", "joined": { "month":"April", "day":28, "year":2010 } }]}ملف html <html> <head> <title>TODO supply a title</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <script src="http://code.jquery.com/jquery-1.7.1.min.js"></script> </head> <body> <div id="placeholder"></div> <script> $.getJSON('data.json', function(data) { var output="<ul>"; for (var i in data.users) { data.users[0].firstName = "Saleh"; output+="<li>" + data.users[i].firstName + " " + data.users[i].lastName + "--" + data.users[i].joined.month+"</li>"; } output+="</ul>"; document.getElementById("placeholder").innerHTML=output; }); </script> </body></html>
  4.   السلام عليكم إخوتي إن الله تكونو بخير اليوم أنا جايب لكم موضوع أنا شرحته  . وهو كيف تبرمج دردشة, شات على الموقع ب php jQuery JSON  وقد بينت بعض أخطاء الشروحات على اليوتيوب أتمنى إن شاء الله تستفيدو منها وأي مشكل أترك تعليقك حتى نجيبك إن شاء الله .أخوكم سفيان يسألكم الدعاء إليكم الدرس
  5. السلام عليكم ورحمة الله وبركاته .. إهداءً للأخ أحمد أبو السعود والأخ عبد اللطيف عرفانا لهما بالجميل ..فقد تعلمت php حقيقة من خلال دروسهما في دورة (لنبدأ مع PHP ) أقدّم هذا البرنامج ... كتابة خريطة على هيئة شجرة وتحويلها إلى ترميز JSON . فكرة البرنامج : نحتاج في كثير من التطبيقات إلى تشكيل شجرة من البيانات .. مثلاً لنفترض أننا نصنّف الدول .. هناك دول آسيوية ودول افريقية .. والدول الآسيوية تحوي دول عربية .. والدول العربية الآسيوية تحوي دول المتوسط ودول الخليج ودول البحر الأحمر .. وهنا يمكننا الاعتماد على الترميز التالي (فكرته بسيطة جدا من تصميمي :P ) 1- نبدأ بالجذر بكتابة اسم الجذر دون أي فراغ قبله.. 2- اذا اردنا أن نتفرّع عن الفرع الحالي نضيف فراغا قبل كتابة اسم الفرع .. 3- اذا اردنا اغلاق الفرع الحالي والعودة الى جذره أو جذر جذره ..الخ .. فقط ننقص عدد الفراغات السابقة للاسم بحيث يتساوى مع عدد فراغات الفرع الذي نريد ان نكون فيه . (ملاحظة : جميع الحقوق محفوظة :D ) لنبدأ بمثال بسيط : مثال مثال برمجي  لغات البرمجة   C   C++   Php   والمزيد مثال حقيقي  مشرفو الفريق العربي   أحمد    أحمد سعود    أحمد أبو عبد البر   حسام    حسام الشامي   المزيديوضّح المثال السابق الآلية البسيطة جدا لتمثيل شجرة (بالفراغات السابقة للاسم ) وكما ترون يمكننا تمثيل الكثير من البنى بشكل شجرة كالفهارس مثلا .. جاءت الفكرة عندما احتاج احدهم ان يكون الترميز السابق مفهوما من قبل لغات البرمجة .. ووقع الاختيار على JSON بدون سبب :D والآن إليكم الكود : والذي يقوم بقراءة محتويات ملف ما .. مكتوبة بالصيغة المبتكرة السابقة .. ثم يحول البنية كاملة إلى تنسيق JSON .. طبعا كالعادة الكود يحتاج التطوير والتنقيح والتحسين والتسريع الخ الخ ... ولكن لن أنتظر اكتماله ... فالكمال لله .. والتحسين على كواهلكم أيها الأخوة الأكارم :) الكود مشروح سطرا سطرا ....(حسب الطريقة التي اتبعها أخي أحمد أبو السعود في أول مشاركة تعرفت عليه بها :) ) أرجو أن يكون فيه النفع والفائدة للجميع .. وارجو أن يكون فيه رد ولو بسيط لما قدّمه الأخوة أحمد أبو السعود والأخ عبد اللطيف في دورة الphp الرائعة :) <!--//ملاحظة حتى لا يحدث خلط بين العربي والأجنبي قد أكتب كلمات انكليزية بالعربي مثل جيسن أو بي اتش بي .. رغم أني أكره فعل ذلك--!><?php//بداية الكود$output="";//متحول الخرج : ويحتفظ بكل ما سنطبعه لا حقاfunction Print_($a)//دالة الطباعة وتأخذ وسيطا النص المراد طباعته{// بداية جسم الدالةglobal $output;//الاشارة الى اننا سنستعمل متحول الخرج الموجود خارج الدالة    echo $a;//طباعة النص على المتصفح    $output.=$a;//وحفظ النص في المتحول}//نهاية جسم الدالة$Rhandler=fopen("1.txt",'r');//فتح الملف والقراءة منه وحفظ المقبض في متحول$llevel=0;//متحول يحفظ عمق آخر فرع مررنا عليه//كلمة عمق أعني بها مقدار التفرع داخل الشجرةPrint_("{");//طباعة بداية نص الجيسن$x=false;//متحول يستعمل مرة واحدة لمنع كتابة الفاصلة في بداية الملف (أرجو التحسين ) وشكراfor($i=0;//حلقة!feof($Rhandler);//طالما لم نصل لنهاية المف الذي نقرأ$i++,//ملاحظة : هذا المتحول ليس له أي عمل$llevel=$clevel)//عند نهاية كل دورة نحفظ العمق الحالي في المتحول الدال على آخر عمق مررنا عليه//l = last//c = current{//بدء الحلقة    $content=fgets($Rhandler);//قراة سطر وحيد من الملف وحفظه في متحول    for($clevel=0;$content[$clevel]==' ';$clevel++);//حلقة تعد الفراغات في بداية الاسم    //عدد الفراغات هو نفسه عمق الفرع في الشجرة    //الاسم يحتوي فراغات في بدايته ورموز نهاية السطر في نهايته لذلك سنقوم بازالتها    $buffer="";//المتحول الذي سنحفظ فيه الاسم بعد التعديل    for($i=$clevel;$i<strlen($content)&&$content[$i]!="\r"&&$content[$i]!="\n";$i++)        $buffer.=$content[$i];//نأخذ حرفا حرفا من السطر حتى نصل الى نهايته دون أخذ محارف نهاية السطر    $content=$buffer;//نعيد حفظ المحتوى في المتحول القديم    //سنبدأ بخوارزمية التحول إلى جيسن    if($clevel==$llevel)//في حال كان العمق الحالي هو نفس العمق السابق    {//فهذا يعني أننا في نفس المصفوفة وعلينا اضافة عنصر فقط    if($x)//محقق من اجل جميع العناصر عدا أول جذر أي عند بداء الملف فقط        {            Print_(":\"info\"");//نضع أي محتويات تخص العنصر حتى لا نتركه بدون محتوى فنحن في حاوية ترابطية تحفظ الاسم وتحفظ المحتوى معا            Print_(",\"$content\"");//ثم نضع فاصلة ونطبع امحتوى السطر        }    else        {            Print_("\"$content\"");//نفس الكلام السابق ولكن بدون فاصلة البدء            $x=true;//حتى لا ندخل الى هنا ثانية        }    }    else if($clevel<$llevel)//حالة الخروج من الفرع الى مستوى سابق    {        Print_(":\"info\"");//نطبع اي محتوى لآخر فرع كنا فيه        for($k=$clevel;$k<$llevel;$k++)            Print_("}");//لقة تقوم بإغلاق الأقواس بنفس كمية الفرق بين المستويين        Print_(",\"$content\"");//ثم نطبع محتوى السطر بعد الفاصلة بعد أن وصلنا الى المستوى المطلوب    }    else//حالة انشاء فرع جديد    {        Print_(":{\"$content\"");//نضع نقطتين للدلالة على وجود محتوى للفرع الحالي وأول عنصر فيه هو المحتوى الحالي    }}//عند الخروج من الحقة يكون الملف قد انتهىPrint_(":\"info\"");//نضع أي محتوى لآخر فرع كنا فيهfor($k=0;$k<$llevel;$k++)    Print_("}");//ونغلق كل الاقواس المفتوحةPrint_("}");//ونغلق قوس البدايةfclose($Rhandler);//ونغلق الملف//والآن للتأكد سنقوم بالتحويل والتحويل العكسي للتأكد أن التنسيق صحيح والمفترض طباعة كل ما تم طباعته ساقبا مرة أخرى بتطابق تامecho "</BR>\n".json_encode(json_decode($output));?>//نهاية الكود//الحمد لله على فضله ونعمائه//أخوكم مصطفى(أرجو من الله ألا يتم استعمال البرنامج لأي غرض لا يرضيه بأي شكل . وأن يكون استخدامه لخير المسلمين في اي مكان ... وهو ولي التوفيق) والسلام عليكم ورحمة الله وبركاته ... (ملاحظة : أرجو عدم كتابة ردود تحتوي على عبارات الشكر فقط ... فليس فيها نفع لمن سيقرأ المشاركة من بعدك  .. بل حاول الإفادة بملاحظة على الكود أو بتحسين أو تطوير أو اقتراح أو فكرة جديدة .. وجزاك الله خيرا )  
  6. السلام عليكم ورحمة الله وبركاته   لدي ملف .json يحتوي على التالي [ { "id": 2, "name": "An ice sculpture", "price": 12.50, }, { "id": 3, "name": "A blue mouse", "price": 25.50, }]أريد ان اطبق عليه الـ Schema التالية { "$schema": "http://json-schema.org/draft-04/schema#", "title": "Product", "description": "A product from Acme's catalog", "type": "object", "properties": { "id": { "description": "The unique identifier for a product", "type": "integer" }, "name": { "description": "Name of the product", "type": "string" }, "price": { "type": "number", "minimum": 0, "exclusiveMinimum": true } }, "required": ["id", "name", "price"]}فما هي الخطوات المطلوبة لربط الـ JSON مع الـ JSON Scheam  وكيف أتأكد من ان الـ Schema تعمل وما هو نوع امتداد الملف المخصص للـ Schema
  7. الحمد لله والصلاة والسلام على رسول الله   السلام عليكم ورحمة الله وبركاته   * إستخدام النمط JSON لتخزين وجلب البيانات :   هذا الدرس ضمن سلسة دروس الدورة التالية لتعلم لغة php !   تخزين البيانات : - تتم عملية تخزين البيانات إما بإستخدام قواعد البيانات أو إستخدام الملفات , واليوم بإذن الله سنتعرف على كيفية حفظ البيانات بواسطة الملفات ولن نتطرق كثيراً لدوال التعامل مع الملفات إلا فتح الملف لحفظ سلسة نصية أو إستيرادها وسيأتي الحديث عن التعامل مع الملفات بشئ من التفصيل فيما بعد , وربما لا تحتاج لها بعد تناولنا الدرس التالي   - ولكن قبل أن نتعرف على تنسيق الـ JSON لحفظ البيانات سأذكر موضوع مدى المتغيرات * مدى المتغيرات : - يقصد بمدى المتغيرات هي الفترة من لحظة تعريف المتغير إلى أن يصبح غير مُعَرَف ولا تستطيع إستخدامه والوصول للقيمة التي يحملها . - عند تعريف متغير فهو متاح لكل العناصر تحته - أي بعد تعريفه - وحتى إذا تم تضمين ملف بعد تعريف المتغير يكون هذا المتغير متاح للإستخدام داخل أكواد الملف , ولكن لا يكون المتغير معرف داخل الدوال مثال لتتضح الصورة : <?php$var1 = 'ahmed';function test(){    echo $var1;}test();?> - هذا الكود سيعطي خطأ لأنها عملية وصول لمتغير غير معرف بالنسبة للدالة - المتغيرات داخل الدوال أو وسائط الدالة تعتبر متغيرات محلية تنتهي بإنتهاء الدالة ولا نستطيع إستخدام هذه المتغيرات وهذا مثال على ذلك : <?phpfunction test(){    $var1 = 'ahmed';}echo $var1;?>- فالكود السابق أيضاً يعطينا خطأ عند تنفيذه لمحاولة الوصول لمتغير محلي خاص بالدالة - إذاً على هذا يمكن لنا إستخدام نفس اسماء المتغيرات خارج الدالة وداخلها لأنها تعتبر متغيرات منفصلة عن بعضها البعض كالمثال التالي : <?php$var1 = 'ahmed';function test(){    $var1 = 'Mohammed <br>';    echo $var1;}test();echo $var1;?>- وواضح من الكود السابق أن قيمة المتغير الأول لم تتأثر عند إستدعاء الدالة على الرغم من أن اسم المتغير واحد - إذا أردنا إستخدام نفس المتغير داخل الدالة وإجراء تعديلات عليه فعلينا - كما تعلمنا من الدرس الثالث - تمرير عنوان المتغير كوسيط للدالة بإستخدام العلامة & قبل اسم المتغير كالتالي : <?php$var1 = 'ahmed';function test(&$var1){    $var1 = 'Mohammed <br>';    echo $var1;}test($var1);echo $var1;?>أو استخدام الكلمة المحجوزة gobal لتعريف الدالة على أن هذا المتغير هو متغير عام وليس خاص بالدالة كالتالي : <?php$var1 = 'ahmed';function test(){    global $var1;    $var1 = 'Mohammed <br>';    echo $var1;}test();echo $var1;?>- وعلى هذا تتعامل الدالة مع المتغير العام وأي تعديل على قيمة هذا المتغير تتم على المتغير العام , نعود لموضوعنا ... التنسيق JSON : - JSON وهي إختصار لـ javaScript Object Notation وهي طريقة في لغة javaScript للتعامل مع البيانات , وتم إنتشارها ودعمها في أغلب لغات البرمجة الأخرى لسهولة وديناميكية التعامل مع هذه الطريقة ويمكن لنا إستخدام هذه الصيغة كبديل أمثل لنقل البيانات بدلاً من إستخدام ملفات XML . وأيضاً تستخدم هذه التقنية في جلب البيانات من مواقع شهيرة كموقع twitter من خلالـ twitter json api وحالة الطقس من موقع yahoo من خلالـ yahoo json weather api هذه كانت مقدمة لموضوع كنت قد كتبته عن هذه التقنية في قسم لغة java على هذا الرابط . الموضوع بسيط سأوضحه هنا بشكل سريع : - يتم حفظ البيانات في تنسيق JSON على شكل كائن وتوضع العناصر بين الأقواس {} أو على شكل مصفوفة وتوضع عناصر المصفوفة بين الأقواس [] - القيم التي يتم حفظها داخل الكائن أو المصفوفة هي أعداد صحيحة وأعداد كسرية وسلاسل نصية وقيم منطقية وكائنات أخرى أو مصفوفات أخرى ويمكن الجمع بين جميع هذه الأنواع داخل كائن واحد أو مصفوفة واحدة ويتم إسناد القيم للعناصر بإستخدام الرمز : ويتم الفصل بين العناصر بإستخدام الفاصلة ,   * أمثلة للقيم داخل الكائن : {"var1":10,"var2":true,"var3":null,"var4":"Ahmed","var5":12.55}ملاحظة : يجب أن يكون اسم العنصر بين علامتي إقتباس لأن بعض لغات البرمجة لا تقبل اسم العنصر بدونها , وأيضاً يجب وضع السلسة النصية بين علامتي إقتباس .   * أمثلة للعناصر داخل المصفوفة : [10,20.25,"Ahmed",null,true]كما يمكن الجمع بين الإثنين معاً كأن يحتوي الكائن على مصفوفات أو تحتوي المصفوفات على كائنات   * كائن يحتوي على مصفوفة : {"var1":10,"var2":[10,20,30]}مصفوفة تحتوي على كائن : [10,20,{"var1":"ahmed","var2":900},"Khaled"]وهكذا يتم إحتواء الكائنات والمصفوفات داخل بعضها البعض وهكذا ... وما سبق هو كيفية هيكلة البيانات بإستخدام أسلوب الـ JSON والتالي الدوال التي تتعامل مع هذا التنسيق في لغة php : - دالة json_encode للتحويل إلى تنسيق الـ JSON - دالة json_ decode لتحويل تنسيق JSON إلى كائنات ومصفوفات يمكن التعامل معها من خلال لغة php ملاحظة : المصفوفات الترابطية hash table في لغة php يتم تحويلها إلى كائن في تنسيق JSON - أولاً : تحويل البيانات إلى صيغة JSON بإستخدام دالة json_encode   * أمثلة :   1- لدينا مصفوفة ترابطية بها قيم مختلفة سيتم تحويلها لتنسيق JSON كالتالي : <?php    $data['var1'] = 10;    $data['var2'] = 20.13;    $data['var3'] = null;    $data['var4'] = true;    $data['var5'] = 'Ahmed';    echo json_encode($data);?>* المخرجات : {"var1":10,"var2":20.13,"var3":null,"var4":true,"var5":"Ahmed"} 2- لدينا مصفوفة عادية -أي معرفاتها عبارة عن أرقام- وتحتوي على قيم مختلفة لاحظ شكل المصفوفة في المخرجات : <?php    $data[] = 10;    $data[] = 20.13;    $data[] = null;    $data[] = true;    $data[] = 'Ahmed';    echo json_encode($data);?>* المخرجات : [10,20.13,null,true,"Ahmed"]    3- مصفوفة عادية تحتوي على قيم وعلى مصفوفة ترابطية وعلى مصوفة عادية أخرى كالتالي : <?php    $data[] = 300;    $data[] = array(10,20,30);    $data[] = array("var1"=>12.3,12.8,"var2"=>"Ahmed",9000,"var3"=>array(true,false));    echo json_encode($data);?>* المخرجات : [300,[10,20,30],{"var1":12.3,"0":12.8,"var2":"Ahmed","1":9000,"var3":[true,false]}]  4- مصفوفة ترابطية تحتوي على قيم وعلى مصفوفة عادية كالتالي : <?php    $data = array("var1"=>12.3,12.8,"var2"=>array("Ahmed","Jamal","Mostafa"),9000);    echo json_encode($data);?>* المخرجات : {"var1":12.3,"0":12.8,"var2":["Ahmed","Jamal","Mostafa"],"1":9000} - ثانياً : تحويل صيغة JSON إلى كائنا ومصفوفات يمكن التعامل معها من خلال لغة php بإستخدام دالة json_encode ملاحظة : بما أننا لم نتطرق للتعامل مع الكائنات حتى الآن فدالة json_encode تأخذ وسيط ثاني في حالة إعطائه القيمة true يتم تحويل كائنات الـ JSON إلى مصفوفات ترابطية hash table وإن أردت إستخدام الكائن بدون تحويله لمصفوفة يمكنك الوصول للعناصر بإستخدام الرمز -> * أمثلة :   1- جلب كائن في تنسيق JSON وتحويله إلى مصفوفة ترابطية في لغة PHP وبه الشكلان إما إستخدام الكائن مباشراً أو تحويله لمصفوفة ترابطية واستخدامه كالتالي : <?php    $json = '{"var1":10,"var2":true,"var3":null,"var4":"Ahmed","var5":12.55}';    $data1 = json_decode($json);    $data2 = json_decode($json,true);    // الوصول للعناصر من خلال الكائن    echo $data1->var4;    echo "<br>";    // الوصول للعناصر عن طريق مصفوفة ترابطية    echo $data2['var4'];?>* المخرجات : AhmedAhmed    2- هنا تنسيق JSON لمصفوفة تحتوي على قيم ومصفوفات وكائنات تحتوي أيضاً بداخلها على قيم ومصفوفات وهكذا يمكن العملية أن تتابع والكود التالي تم استخدام وسم العناصر ul لترتيب المخرجات وتوضيح العملية كالتالي : <?php    $json = '[300,[10,20,30],{"var1":12.3,"0":12.8,"var2":"Ahmed","1":9000,"var3":[true,false]}]';    $data = json_decode($json,true);    $HTML = "<ul>";    foreach($data as $key=>$value)    {                if(is_array($value))        {            $HTML .= "<li>$key=>Array<ul>";            foreach($value as $key2=>$value2)            {                                if(is_array($value2))                {                    $HTML .= "<li>$key2=>Array<ul>";                    foreach($value2 as $key3=>$value3)                    {                        $HTML .= "<li>$key3=>$value3</li>";                    }                    $HTML .= "</ul></li>";                }                else                {                    $HTML .= "<li>$key2=>$value2</li>";                }            }            $HTML .= "</ul></li>";        }        else        {            $HTML .= "<li>$key=>$value</li>";        }    }    $HTML .= "</ul>";        echo $HTML;?>* المخرجات : 0=>3001=>Array    0=>10    1=>20    2=>302=>Array    var1=>12.3    0=>12.8    var2=>Ahmed    1=>9000    var3=>Array        0=>1        1=>والآن وكمثال تطبيقي لما سبق عملية التسجيل وتسجيل الدخول في موقع ما , في الدرس الرابع تم شرح التعامل مع النماذج وكيفية الحصول على البيانات منها , وفي الدرس السابق تعلمنا كيفية التعامل مع التعابير القيايسية والدوال المستخدمة معها في لغة php .   سنقوم بتقسيم العمل لمجموعة دوال وشرح كل دالة على حدة   - سنقوم بإنشاء نموذج لعملية التسجيل كما تعلمنا سابقاً ونضعه في ملف وليكن باسم signup.php وسيكون ملف معالجة البيانات هو نفسه ملف النموذج أي سنضع للخاصية الـ action للنموذج اسم الملف ذاته والكود التالي كود هذا الملف : <!doctype html><html dir="rtl">    <head>        <meta charset="utf-8">        <title>            تسجيل مستخدم جديد        </title>        <link href="style.css" rel="stylesheet" type="text/css" />    </head>    <body>        <div class="mainLayout">            <div class="header">                <a href="#"> الرئيسية </a>                <a href="login.php"> تسجيل الدخول </a>                <a href="signup.php"> تسجيل مستخدم جديد </a>            </div>            <div class="content">                <form action="signup.php?action=submit" method="POST">                    <table>                        <tr>                            <td><label> اسم المستخدم : </label></td>                            <td><input type="text" name="username" value="<?php echo isset($_POST['username'])?$_POST['username']:''; ?>"></td>                        </tr>                        <tr>                            <td><label>البريد الإلكتروني : </label>                            <td><input type="text" name="email" value="<?php echo isset($_POST['email'])?$_POST['email']:''; ?>"><br>                        </tr>                        <tr>                            <td><label>تأكيد البريد الإلكتروني :</label>                            <td><input type="text" name="email2" value="<?php echo isset($_POST['email2'])?$_POST['email2']:''; ?>"><br>                        </tr>                        <tr>                            <td><label> كلمة المرور : </label>                            <td><input type="password" name="password"><br>                        </tr>                        <tr>                            <td><label>تأكيد كلمة المرور :</label>                            <td><input type="password" name="password2"><br>                        </tr>                        <tr>                            <td colspan="2"><input type="submit" name="submit" value="  تسجيل  "></td>                        </tr>                    </table>                </form>            </div>            <div class="footer">                <span > حقوق كذا وكذا محفوظة لشركة كذا وكذا :) </span><br />            </div>        </div>    </body></html>- لاحظ أنني في خاصية القيمة لكل عنصر وضعت كود php وهو عبارة عن حالة if المختصر , ففي حالة الضغط على زر الإرسال سيتم إرسال البيانات للملف نفسه وبهذا يمكن لنا إستخدامها ووضعها كقيم للحقول حتي لا يتم إعادة كتابة هذه القيم في كل مرة يتم الضغط فيه على زر الإرسال , فالشرط هو في حالة كون العنصر معرف يتم طباعة قيمته وإلا تكون قيمة الحقل فارغة .   والآن سنقوم بكتابة دوال للتحقق من قيم النموذج , وسنقوم بتعريف متغير عام لنضع به صيغة الخطأ وليكن $error   * دالة التحقق من اسم المستخدم username_v وهي لا تأخذ وسائط كالتالي : function username_v(){    global $error;        if(isset($_POST['username']) and $_POST['username'] != null)    {        if(preg_match('/^([a-zA-Z0-9._-]){6,30}$/',$_POST['username']))        {            return true;        }        else        {            $error = "يجب أن يكون اسم المستخدم مكون من الحروف الإنجليزية الكبيرة أو الصغيرة أو الأرقام أو العلامات الخاصة . و _ و - أو خليط منهم فقط ويكون طول اسم المستخدم من 6 إلى 30 عنصر";            return false;        }    }    else    {        $error = "يرجى ملئ حقل اسم المستخدم";        return false;    }}- تم إخبار الدالة باسم المتغير العام لإستخدامه داخلها - الشرط في حالة أن اسم المستخدم username معرف داخل المصفوفة  $_POST ويحمل قيمة بخلاف القيمة الفارغة يتم يتم تنفيذ الشرط التالي وإلا يتم حفظ نص الخطأ في المتغير $error وتعود الدالة بالقيمة الخطأ false . - في حالة تحقق الشرط الأول يتم الإنتقال للشرط التالي وهو التحقق من اسم المستخدم باستخدام دالة preg_match والتعابير القياسية , فهنا جعلنا اسم المستخدم يجب أن يتكون من الحروف الإنجليزية الكبيرة أو الصغيرة أو الأرقام أو العلامات الخاصة . و _ و -  وأن لا يقل اسم المستخدم عن 6 عناصر ولا يزيد عن 30 ففي حالة تحقق هذا الشرط تعود الدالة بالقيمة الصحيحة true وإذا لم يتحقق الشرط يتم حفظ نص الخطأ في المتغير $error والعودة بالقيمة الخطأ false .   * دالة pass_v للتحقق من كلمة المرور  ومطابقتها بحقل تكرار كلمة المرور : function pass_v(){    global $error;        if((isset($_POST['password']) and $_POST['password'] != null)        and (isset($_POST['password2']) and $_POST['password2'] != null))    {        if(preg_match('/^([a-zA-Z0-9]){6,20}$/',$_POST['password']))        {            if($_POST['password'] != $_POST['password2'])            {                $error = "كلمة المرور غير متطابقة";                return false;            }            else            {                return true;            }        }        else        {            $error = "يرجى كتابة كلمة مرور تحتوي على حروف إنجليزية كبيرة أو ضغيرة أو أرقام أو خليط منهم فقط وأن يكون طول كلمة المرور من 6 إلى 20 عنصر";            return false;        }    }    else    {        $error = "يرجى ملئ حقول كلمة المرور";        return false;    }}- الشرط في حالة أن حقل كلمة المرور password وحقل تكرار كلمة المرور password2 معرفين وبهما قيم بخلاف القيم الفارغة يتم تنفيذ الشرط التالي وإلا يتم حفظ نص الخطأ والعودة بالقيمة الخطأ . - الشرط التالي هو شرط التحقق من كلمة السر فيجب أن تكون مكونة من الحروف الإنجليزية الكبيرة والصغيرة والأرقام فقط بحد أدنى 6 عناصر وحد أقصى 20 عنصر , في حالة تحقق الشرط يتم الإنتقال للشرط التالي وإلا يتم حفظ نص الخطأ والعودة بالقيمة الخطأ . - الشرط التالي يتم مطابقة كلمة المرور مع تأكيد كلمة المرور في حالة تحقق الشرط تعود الدالة بالقيمة الصحيحة true وإلا تقوم بحفظ نص الخطأ والعودة بالقيمة الخطأ .   * دالة email_v للتحقق من البريد الإلكتروني ومطابقته كالتالي : function email_v(){    global $error;        if((isset($_POST['email']) and $_POST['email'] != null)        and (isset($_POST['email2']) and $_POST['email2'] != null))    {        if(preg_match('/^([a-zA-Z])([a-zA-Z0-9._-]){2,30}@([a-zA-Z0-9.-])+\.([a-zA-Z0-9]){2,5}$/',$_POST['email']))        {            if($_POST['email'] != $_POST['email2'])            {                $error = "البريد الإلكتروني غير متطابق";                return false;            }            else            {                return true;            }        }        else        {            $error = "يرجى كتابة بريد إلكتروني صحيح";            return false;        }    }    else    {        $error = "يرجى ملئ حقول البريد الإلكتروني";        return false;    }}- بنفس مبدأ عمل الدوال السابقة لعملية التحقق والمطابقة بخلاف تغير التعبير القياسي لللتحقق من صحة البريد الإلكتروني .   * سنقوم بحفظ بيانات المستخدمين على شكل مصفوفة بتنسيق JSON وهذه المصفوفة تحتوي على مصفوفات أخرى بعدد المستخدمين كل مصفوفة تحتوي على اسم المستخدم وكلمة المرور والبريد الإلكتروني ويتم حفظ هذا الكود في ملف وليكن باسم login.json كما في الشكل التالي : [{"username":"ahmed","password":"123456","email":"[email protected]"},{"username":"mohammed","password":"333666999","email":"[email protected]"}]* دالة checkUser للتحقق من وجود هذا المستخدم في الملف login.json أم لا , كما سنقوم بتعريف متغير عام باسم $data لحفظ البيانات التي سيتم جلبها من الملف كالتالي :     function checkUser()    {        global $data;        $jsonData = file_get_contents('login.json');        if($jsonData == false ) return false;        $data = json_decode($jsonData,true);        foreach($data as $value)        {            if($value['username'] === $_POST['username']) return true;        }        return false;    }- قمنا بإخبار الدالة باسم المتغير العام - وقمنا بتعريف متغير محلي باسم $jsonData لحفظ البيانات يتم جلبها من الملف بإستخدام الدالة file_get_contents وتأخذ وسيط هو مسار الملف . - في حالة عدم جلب محتوى من الملف تعود الدالة file_get_contents بالقيمة false وعلى هذا ستعود هذه الدالة بالقيمة false وتعني أن الملف فارغ . - في حالة لم يكن الملف فارغ وبه بيانات نقوم بتحويل تنسيق JSON إلى مصفوفة ترابطية بإستخدام الدالة json_decode  وإعطائها الوسيط الأول محتوى الملف والوسيط الثاني القيمة الصحيحة true وحفظ الناتج في المتغير العام $data - الآن لدينا مصفوفة ترابطية نقوم بالمرور على محتوياتها بإستخدام حلقة الدوران foreach وفي حالة وجود مستخدم بهذا الاسم يتم العودة بالقيمة الصحيحة true وإلا تتم العودة بالقيمة الخطأ false   * دالة signUp لتسجيل مستخدم جديد وحفظ البيانات في ملف signup.json كالتالي : function signUp(){    global $data;    $data[] = array('username'=>$_POST['username'],                    'password'=>$_POST['password'],                    'email'=>$_POST['email']);    $FH = fopen("login.json", 'w') or die("خطأ في فتح الملف للقراءة");    fwrite($FH, json_encode($data));    fclose($FH);}- سنستخدم المتغير العام $data في بإضافة مستخدم جديد للمصفوفة $data وسيتم جلب اسم المستخدم وكلمة المرور والبريد الإلكتروني من النموذج وإدخال مستخدم جديد في المصفوفة $data - الآن سنقوم بفتح الملف بإستخدام fopen الوسيط الأول مسار الملف والثاني نوع العملية سنختار w أي عملية الكتابة على الملف , ودالة die للخروج من الكود في حالة حدوث خطأ في عملية فتح الملف وطباعة ما بداخلها على المتصفح , والدالة die  تستخدم بشكل عام للخروج من الكود كالدالة exit . - وتعود الدالة fopen في حالة نجاحها في فتح الملف بما يعرف بمقبض الملف ويتم حفظه في متغير أو إعطائه لدالة الكتابة مباشراً. - دالة الكتابة على الملف fwrite تقوم بالكتابة على الملف الوسيط الأول هو مقبض الملف الذي تم فتحه والوسيط الثاني البيانات التي سيتم كتابتها في الملف . - دالة fclose لإغلاق مقبض الملف .   وبعد أن إنتهينا من شرح الدوال المستخدمة سنقوم بكتابة الكود الأساسي لعملية تسجيل مستخدم جديد , وهذا الكود سيكون اسفل النموذج وهو كالتالي : <?php        // متغير لحفظ البيانات التي يتم جلبها من الملف    $data;        // متغير لحفظ نصوص الأخطاء    $error;        if(isset($_GET['action']) and $_GET['action'] == 'submit')    {        if( username_v() and email_v() and pass_v() )        {            if(checkUser())            {                echo ("<h4 style='color:#FF0;'>هذا المستخدم موجود بالفعل !</h4>");            }            else            {                signUp();                echo ("<h4 style='color:#0F0;'>تم التسجيل بنجاح !</h4>");            }            }        else        {            echo "<h4 style='color:#F53;'>$error</h4>";        }    }?>- تعريف المتغيرات العامة $error و $data والدوال سيتم وضعها اسفل الوثيقة . - لو لاحظنا أن الـ action للنموذج هو signup.php?action=submit  أي هناك متغير يضاف للرابط عند الضغط على زر التسجيل وهذا الأمر حتي لا يتم طباعة جملة الخطأ بوجود حقول فارغة عند الدخول لأول مرة للنموذج , ومن خلال هذا يمكن لي أن أقوم بتنفيذ أكثر من كود في نفس الصفحة كالتسجيل وتسجيل الدخول ولكن هنا سنكتفي بأن يكون كل ملف مختص بشئ . - الشرط يتم التحقق من تعريف المتغير action وإحتوائه على القيمة submit وإلا لا يتم تنفيذ الكود . - الشرط التالي هو إستدعاء دالة التحقق من اسم المستخدم وكلمة المرور والبريد الإلكتروني وأن جميعهم يجب أن يعودوا بالقيمة الصحيحية true وإلا يتم طباعة رسالة الخطأ للمستخدم المخزنة في المتغير العام $error . - في حالة تحقق الشرط يتم إستدعاء دالة التحقق من وجود مستخدم بهذا الاسم مخزن من قبل في الملف , فهي تعود بالقيمة الصحيحة True في حالة وجود مستخدم بنفس الاسم أو تعود بالقيمة false إذا كان الملف فارغ أو ليس هناك مستخدم بهذا الاسم وعلى هذا يتم تسجيل مستخدم جديد وطباعة رسالة تفيد بذلك أو إظهار رسالة بأن هذا الاسم مستخدم من قبل .   وبهذا إنتهينا من عملية تسجيل الدخول ولكن هذه الطريقة لا تصلح للمواقع التي يكون بها عدد مستخدمين كبير , فهنا علينا إستخدام قواعد البيانات أو تطوير بنية هذا النظام لمزيد من سرعة البحث والمعالجة .   والتالي رابط تنزيل نموذج التسجيل كامل json.zip   * ثانياً : عملية تسجيل الدخول : - في البداية سنحتاج نموذج لتسجيل الدخول كالتالي : <form action="login.php?action=submit" method="POST">    <table>        <tr>            <td><label> اسم المستخدم : </label></td>            <td><input type="text" name="username"></td>        </tr>        <tr>            <td><label> كلمة المرور : </label>            <td><input type="text" name="password"><br>        </tr>        <tr>            <td colspan="2"><input type="submit" name="submit" value="تسجيل الدخول"></td>        </tr>    </table></form>وسنحتاج لدالة لعملية تسجيل الدخول وهي   * دالة login لعملية تسجيل الدخول : function login($username,$password){    $jsonData = file_get_contents('login.json') or die("لم يتم جلب محتوى الملف");    $data = json_decode($jsonData,true);    foreach($data as $value)    {        if($value['username'] == $username and $value['password'] == $password) return true;    }    return false;}- تأخذ هذه الدالة وسيطين هما اسم المستخدم وكلمة المرور -يمكن لنا تفيذ هذه الدالة كالدوال السابقة بدون وسائط ولكن أردت التنويع فقط - - نقوم بجلب محتوى الملف كما تم شرحه في الأعلى - نقوم بالمرور على عناصر المصفوفة للتحقق من وجود المستخدم , ففي حالة مطابقة اسم المستخدم وكلمة المرور يقوم الدالة بالعودة بالقيمة الصحيحة true وإلا تعود بالقيمة الخطأ false   والآن مع الكود الأساسي للصفحة : <?php    if(isset($_GET['action']) and $_GET['action'] == 'submit')    {        if(isset($_POST['username']) and $_POST['username'] != null and isset($_POST['password']) and $_POST['password'] != null)        {            $username = preg_replace('/[^a-zA-Z0-9._-]/','',$_POST['username']);            $password = preg_replace('/[^a-zA-Z0-9]/','',$_POST['password']);            if(login($username,$password))            {                echo "<h3 style='color:#0F0;'> تم تسجيل الدخول مرحباً بك <h3>";            }            else            {                echo "<h3 style='color:#F33;'> لم تتم عملية تسجيل الدخول حاول مجدداً <h3>";            }        }        else        {            echo "<h3 style='color:#F33;'>يرجى ملئ جميع الحقول<h3>";        }    }?>- في البداية التحقق من أن المستخدم قد ضغط على زر تسجيل الدخول من خلال متغير الرابط action وقيمته هي submit - الشرط في حالة تعريف اسم المستخدم وكلمة المرور وإحتوائهم على قيم غير القيمة الفارغة يتم تنفيذ الشرط التالي وإلا طباعة رسالة بالخطأ . - يتم إزالة أي رموز غير الحرورف الإنجليزية والأرقام والرموز المسموح بها -وهذه العملية تعتبر عملية أمنية لحماية الموقع من الإختراق- فمن خلالها يمكن إختراق قاعدة البيانات وتعرف بـ sql injection -ونفس الشئ لكلمة المرور مع إختلاف التعبير القياسي فهنا يزيل كل شي بخلاف الحرورف الإنجليزية والأرقام - بعد هذه العملية يتم إستدعاء دالة تسجيل الدخول للتحقق من وجود المستخدم من عدمة وطباعة رسالة تفيد بذلك   رابط تنزيل الملف json2.zip   التمرين : - أكتب تطبيق لملئ إستمارة لأحد المصالح الحكومية بها بيانات التسجيل التي تحتاجها وقم بحفظها في ملف بتنسيق JSON , وعمل صفحة لعرض وتنسيق محتويات الملف .   وإلى هنا والسلام عليكم ورحمة الله وبركاته , نلقاكم على خير بإذن الله تعالى   الدرس السابق | الإنتقال للموضوع الأساسي
  8. سؤال عن تقنية الـ Json

    السلام عليكم   بدأت من فترة بسيطة بتعلم تقنية  الـ Json وهدفي هو أن استخدمها مع الجافا ويب JEE على كل حال اثناء تصفحي لبعض المنتديات التي تقدم شروحات وصلت الى مدونة العم مكيونغ mkyong وفيها بعض الشروحات المتقدمة عن  الـ Json وهو يستخدم مكتبة اسمها Jackson المشكلة انه لدى محاولتي تطبيق الشرح احصل على خطأ في الكود قبل تنفيذه ولا اعرف السبب مع انني قمت بتضمين المكتبة مع الكود   import java.io.File;import java.io.IOException;import org.codehaus.jackson.JsonGenerationException;import org.codehaus.jackson.map.JsonMappingException;import org.codehaus.jackson.map.ObjectMapper;public class JacksonExample {   public static void main(String[] args) {User user = new User();ObjectMapper mapper = new ObjectMapper();try {// convert user object to json string, and save to a filemapper.writeValue(new File("c:\\user.json"), user);// display to consoleSystem.out.println(mapper.writeValueAsString(user));} catch (JsonGenerationException e) {e.printStackTrace();} catch (JsonMappingException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} }}import java.util.ArrayList;import java.util.List;public class User {private int age = 29;private String name = "mkyong";private List<String> messages = new ArrayList<String>() {{add("msg 1");add("msg 2");add("msg 3");}};//getter and setter [email protected] String toString() {return "User [age=" + age + ", name=" + name + ", " +"messages=" + messages + "]";}}الخطأ يحدث في الأمر التالي  System.out.println(mapper.writeValueAsString(user));كما هو واضح في الصورة التالية    رابط المثال الأصلي http://www.mkyong.com/java/how-to-convert-java-object-to-from-json-jackson/ فهل من فكرة لحل هذا الخطا الغير مفهوم وهل المشكلة من المكتبة   المكتبة في المرفقات   jackson.jar
  9. السلام عليكم أخوتي في الله ، أريد مساعدة منكم في سكريبت جزاكم الله خيرا السكريبت يرفع ملفات مستخدمي موقعي مباشرة إلى سيرفر jheberg المشكل هو كيفية استرجاع إجابة السيرفر (json) لوضعها في قاعدة للبيانات السكريبت : <html><body><form action="2.php" method="post"enctype="multipart/form-data"><label for="file">Filename:</label><input type="file" name="file" id="file"><br><input type="submit" name="submit" value="Submit"></form></body></html> <?php$allowedExts = array("gif", "jpeg", "jpg", "png");$extension = end(explode(".", $_FILES["file"]["name"]));if ((($_FILES["file"]["type"] == "image/gif")|| ($_FILES["file"]["type"] == "image/jpeg")|| ($_FILES["file"]["type"] == "image/jpg")|| ($_FILES["file"]["type"] == "image/pjpeg")|| ($_FILES["file"]["type"] == "image/x-png")|| ($_FILES["file"]["type"] == "image/png"))&& ($_FILES["file"]["size"] < 20000)&& in_array($extension, $allowedExts)) { if ($_FILES["file"]["error"] > 0) { echo "Return Code: " . $_FILES["file"]["error"] . "<br>"; } else { echo "Upload: " . $_FILES["file"]["name"] . "<br>"; echo "Type: " . $_FILES["file"]["type"] . "<br>"; echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>"; echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br>"; if (file_exists("upload/" . $_FILES["file"]["name"])) { echo $_FILES["file"]["name"] . " already exists. "; } else { $url = 'http://zoidberg.jheberg.net/jheberg/index.php?method=apiUpload'; /******************************************/ /* Envoie du fichier */ /******************************************/ $postData = array('file' => '@'.realpath($file), 'username' => false, 'password' => false); $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $postData); $data = curl_exec($ch); curl_close($ch); $data = json_decode($data, true); // Afficher les résultatvar_dump($data); } } }else { echo "Invalid file"; }?>السكريبت يعطي إجابة  data  = null  
  10. التعامل مع JSON

    JSON سنتحدث اليوم عن صيغة JSON وهي إختصار ل Javascript Object Notation وهي صيغة تستخدم بكثرة في تبادل البيانات وخدمات الويب وكذلك في الإعدادات للبرامج وذلك لسهولتها كقراءة وإنشاء ومعالجة  فلننظر إلى مثال توضيحي{"menu": {    "header": "SVG Viewer",    "items": [        {"id": "Open"},        {"id": "OpenNew", "label": "Open New"},        null,        {"id": "ZoomIn", "label": "Zoom In"},        {"id": "ZoomOut", "label": "Zoom Out"},        {"id": "OriginalView", "label": "Original View"},        null,        {"id": "Quality"},        {"id": "Pause"},        {"id": "Mute"},        null,        {"id": "Find", "label": "Find..."},        {"id": "FindAgain", "label": "Find Again"},        {"id": "Copy"},        {"id": "CopyAgain", "label": "Copy Again"},        {"id": "CopySVG", "label": "Copy SVG"},        {"id": "ViewSVG", "label": "View SVG"},        {"id": "ViewSource", "label": "View Source"},        {"id": "SaveAs", "label": "Save As"},        null,        {"id": "Help"},        {"id": "About", "label": "About Adobe CVG Viewer..."}    ]}} وهذا المقابل له ب XML <menu>    <header>Adobe SVG Viewer</header>    <item action="Open" id="Open">Open</item>    <item action="OpenNew" id="OpenNew">Open New</item>    <separator/>    <item action="ZoomIn" id="ZoomIn">Zoom In</item>    <item action="ZoomOut" id="ZoomOut">Zoom Out</item>    <item action="OriginalView" id="OriginalView">Original View</item>    <separator/>    <item action="Quality" id="Quality">Quality</item>    <item action="Pause" id="Pause">Pause</item>    <item action="Mute" id="Mute">Mute</item>    <separator/>    <item action="Find" id="Find">Find...</item>    <item action="FindAgain" id="FindAgain">Find Again</item>    <item action="Copy" id="Copy">Copy</item>    <item action="CopyAgain" id="CopyAgain">Copy Again</item>    <item action="CopySVG" id="CopySVG">Copy SVG</item>    <item action="ViewSVG" id="ViewSVG">View SVG</item>    <item action="ViewSource" id="ViewSource">View Source</item>    <item action="SaveAs" id="SaveAs">Save As</item>    <separator/>    <item action="Help" id="Help">Help</item>    <item action="About" id="About">About Adobe CVG Viewer...</item></menu> هناك فارق واضح في المقروئية  الصيغة النحوية الخاصة ب JSON صغيرة والكثير يقوم بعملها كتدريب على عملية ال parsing object{}{ members }memberspairpair , memberspairstring : valuearray[][ elements ]elementsvalue value , elementsvaluestringnumberobjectarraytruefalsenullstring""" chars "charscharchar charscharany-Unicode-character-    except-"-or-\-or-    control-character\"\\\/\b\f\n\r\t\u four-hex-digitsnumberintint fracint expint frac expintdigitdigit1-9 digits - digit- digit1-9 digitsfrac. digitsexpe digitsdigitsdigitdigit digitseee+e-EE+E-  أي كائن object هو مايوضع بين { } وهو عبارة عن مجموعة من العناصر المكونة من قيمة ومفتاح مفصولين ب : كما في القاموس dict في بايثون "key":"value" Valueوالقيمة قد تكون عبارة عن سلسلة نصية أو رقم أو كائن آخر أو مصفوفة أو قيم true, false, nullلاحظ المصفوفة هي مجموعة عناصر من أنواع القيم موضوعة بين []  *أنظر هنا: http://www.json.org/ الآن تعلمنا الصيغة النحوية ل json كيف نقوم بمعالجة ملفات json ؟ سنقوم بإستخدام المثال المستخدم في توضيح المقروئية بالأعلى   json_string="""{"menu": {    "header": "SVG Viewer",    "items": [        {"id": "Open"},        {"id": "OpenNew", "label": "Open New"},        null,        {"id": "ZoomIn", "label": "Zoom In"},        {"id": "ZoomOut", "label": "Zoom Out"},        {"id": "OriginalView", "label": "Original View"},        null,        {"id": "Quality"},        {"id": "Pause"},        {"id": "Mute"},        null,        {"id": "Find", "label": "Find..."},        {"id": "FindAgain", "label": "Find Again"},        {"id": "Copy"},        {"id": "CopyAgain", "label": "Copy Again"},        {"id": "CopySVG", "label": "Copy SVG"},        {"id": "ViewSVG", "label": "View SVG"},        {"id": "ViewSource", "label": "View Source"},        {"id": "SaveAs", "label": "Save As"},        null,        {"id": "Help"},        {"id": "About", "label": "About Adobe CVG Viewer..."}    ]}}""" بايثون توفرلنا مكتبة لمعالجة json قم بإستدعائها عبر import jsonيوجد قاعدة عامة، في pickle وغيرها إذا أردت أن تحصل على الكائن من string أو تحوله إلى الصيغة المطلوبة قم بإضافة s للدالة المستخدمة لتصبح loads, dumpsأماإذا تريد التعامل عبر ملف فلاتستخدم ال s لتصبح load, dump كما قمت بالتخمين .. الدالة loads قامت بتحويل النص json_string إلى قاموس dict لتستطيع استخدامه بطريقتك المعتادة في بايثون>>> type(obj)<type 'dict'> تستطيع إستخدامه بطريقتك المعتادة .. على سبيل المثال >>> obj['menu']['header']u'SVG Viewer'>>> obj['menu']['items'][{u'id': u'Open'}, {u'id': u'OpenNew', u'label': u'Open New'}, None, {u'id': u'ZoomIn', u'label': u'Zoom In'}, {u'id': u'ZoomOut', u'label': u'Zoom Out'}, {u'id': u'OriginalView', u'label': u'Original View'}, None, {u'id': u'Quality'}, {u'id': u'Pause'}, {u'id': u'Mute'}, None, {u'id': u'Find', u'label': u'Find...'}, {u'id': u'FindAgain', u'label': u'Find Again'}, {u'id': u'Copy'}, {u'id': u'CopyAgain', u'label': u'Copy Again'}, {u'id': u'CopySVG', u'label': u'Copy SVG'}, {u'id': u'ViewSVG', u'label': u'View SVG'}, {u'id': u'ViewSource', u'label': u'View Source'}, {u'id': u'SaveAs', u'label': u'Save As'}, None, {u'id': u'Help'}, {u'id': u'About', u'label': u'About Adobe CVG Viewer...'}] >>> obj['menu']['header']='SVG VIEWER 2'>>> obj['menu']['header']'SVG VIEWER 2' ولتحويله لصيغة json مرة أخرى قم بإستخدم dumps>>> json.dumps(obj)'{"menu": {"header": "SVG VIEWER 2", "items": [{"id": "Open"}, {"id": "OpenNew", "label": "Open New"}, null, {"id": "ZoomIn", "label": "Zoom In"}, {"id": "ZoomOut", "label": "Zoom Out"}, {"id": "OriginalView", "label": "Original View"}, null, {"id": "Quality"}, {"id": "Pause"}, {"id": "Mute"}, null, {"id": "Find", "label": "Find..."}, {"id": "FindAgain", "label": "Find Again"}, {"id": "Copy"}, {"id": "CopyAgain", "label": "Copy Again"}, {"id": "CopySVG", "label": "Copy SVG"}, {"id": "ViewSVG", "label": "View SVG"}, {"id": "ViewSource", "label": "View Source"}, {"id": "SaveAs", "label": "Save As"}, null, {"id": "Help"}, {"id": "About", "label": "About Adobe CVG Viewer..."}]}}'    مصادر :http://www.json.org/http://www.json.org/example.html http://docs.python.org/2/library/json.html
  11. السلام عليكم ورحمة الله وبركاته إخواني وجدت سكريبت يعمل chained selects بالجافاسكريبت على الرابط التالي: http://tutorialzine.com/2011/11/chained-ajax-selects-jquery تحميل   معاينة لكن لم أعرف كيف أستخدم هذه القيم التي قد تم اختيارها؟ يعني أنني أريد أن أضيف زر (button) عندما أضغط عليه يرسلني إلى صفحة php أخرى، ومن ثم أطبع القيم التي تم اختيارها هذا السكريبت يستعمل  json  ... لكن لا اعرف كيف استخدمه للأسف الرجاء المساعدة
  12. بسم الله الرحمن الرحيم   الحمد لله والصلاة والسلام على خير خلق الله -صلى الله عليه وسلم-   غير إسلوبك في كتابة دوال php يمكن التحكم في وسائط الدالة في لغة php إما عن طريق القيم الإفتراضية أو إستخدام دوال وسائط الدالة كـ func_ num_ args و func_ get_ args للتحكم في وسائط وسائط الدالة ولكن يعيب هذه الطرق أنه يجب معرفه ترتيب وسائط الدالة حتى تعمل الدالة بشكل سليم ولكن ما سنتناوله اليوم شئ مختلف في php ولكنه شئ معروف في لغة javaScript وهو تنسيق JSON وتم الحديث عن هذا التنسيق في هذا الموضوع بعد قراءه الجزء الخاص بتنسيق JSON في الموضوع السابق أكمل معنا متابعة الموضوع التالي دوالنا الآن ستصبح وحيدة المتغير فقط , وهو كود بتنسيق JSON ومن خلال دالة json_decode سيتم تحويل هذا التنسيق لنستطيع التعامل معه من خلال لغة php سيتم كتابة التنسيق بين علامتي إقتباس مزدوجتين كالتالي : "{}" اسم المتغير والقيم النصية سيتم وضعها بين علامتي إقتباس مفردتين كالتالي : "{'var1':10,'var2':'Ahmed','var3':true}"مثال : <?phpfunction test($json){    print_r(json_decode(str_replace("'",'"',$json),true));}$var = 'Jamal';test("{'var1': 'Ahmed','var2': 23,'var3': true,'var4': '$var'}");// تم بحمد الله?> ملاحظة : نستخدم علامتي الإقتباس المزدوجتين حتى نستطيع طباعة متغيرات php داخل تنسيق JSON وإن أردت كتابة علامتي الإقتباس المزدوجتين داخل التنسيق عليك أن تضع قبلها العلامة \ حتى لا يحدث تداخل أو إستخدام علامتي الإقتباس المردتين كما في الأعلى الآن سنقوم بوضع قيم إفتراضية لوسائط الدالة في حالة عدم وضع قيم لها من خلال الدالة أن اسم الخاصية (الوسيط) غير صحيح أو به خطأ إملائي كالتالي : <?phpfunction test($json){    $vars = array('var1'=>'No name','var2'=>-1,'var3'=>false,'var4'=>'No name');    $json = json_decode(str_replace("'",'"',$json),true);    if(is_array($json))    {        foreach($json as $key=>$value)        {            if(isset($vars[$key]))            {                $vars[$key] = $value;            }        }    }    print_r($vars);}$var = 'Jamal';test("{'var1': 'Ahmed','var2': 23,'var3': true,'var4': '$var'}");// تم بحمد الله?>- وبهذا يتم تغيير القيم فقط في حالة إدخالها ولا يشترط ترتيب القيم كما نعم وبهذا ستكون دوال php تكتب بإسلوب شيق كما عهدناه في التعامل مع مكتبة jQuery الرائعة المبنية على لغة javaScript ومن اليوم بإذن الله سأبدأ بكتابة دوالي في php بإستخدام هذا الإسلوب الجديد والرائع . دمتم في أمان الله وإلى لقاء أخر
  13. السلام عليكم ورحمة الله وبركاته اخواني ليا عندكم طلب على فرض انه عندي activity فيها مربع نص انا عاوز احفظ النص كيف ممكن ارسل النص لقاعدة بيانات my sql واعرضها بصفحة ويب عن طريق ال php مع العلم انو انا لسا مبتدئ بال php بس عاوز طريقة حفط النص من activity الى ال my sql كل الشكر مقدما والتحية
  14. السلام عليكم ورحمة الله وبركاته   لدي مشروع تخرج بالاندرويد   عباره عن برنامج تعريفي بالإسلام    ومع البرنامج منتدى مكون بالphp ومرفوع على سيرفر محلي   الان وصلت لخطوه انه اليوزر بعد مايسجل الدخول من الجوال (تم توحيد جدول بيانات المستخدم للجوال وللمنتدى بحيث نفس بيانات المستخدم للمنتدى وللجوال) يمكنه كتابة موضوع (بوست) وإرساله للمنتدى بشرط ان يكون الواجهه المستخدمه هي واجهة الاندوريد وليس واجهة المنتدى وايضا يمكنه عرض المواضيع اللي في المنتدى واختيار احدها للرد(التعليق) عليها.   هذه الخطوه قمت باستخدام كود  php ك ويب سيرفس يقوم بعمل استعلام عن عنوان الموضوع والid الخاص بالموضوع واسم كاتب الموضوع وارسالها ك(json object) للاندوريد من اجل عرض قائمة المواضيع على شكل (list view) بس الان لدي مشكله لما اطلب عرض القائمه في الاندوريد تظهر لي الصفحه فاضيه  وهنا سؤالي اللي وضعته ومبين فيه بعض الاكواد ولكن الى حد الان لم استطع حل المشكله اللي واقع فيها من كم يوم http://stackoverflow.com/questions/15473237/error-with-parsing-json-objecthttp://stackoverflow.com/questions/15473237/error-with-parsing-json-object   اتمنى من لديه خبره ياخذ نظره على السؤال ولو فيه اجزاء اخرى من الكود مطلوبه حاضر سوف ارسلها   وجزيتم خيرا