اذهب إلى المحتوى

Flutter Dev

الأعضاء
  • المساهمات

    787
  • تاريخ الانضمام

  • تاريخ آخر زيارة

  • عدد الأيام التي تصدر بها

    2

أجوبة بواسطة Flutter Dev

  1. مرحبا جميعا 

    تحيه طيبه للجميع

    وكل عام والجميع بألف صحه وعافيه وعيد مبارك لكم جميعا 

    لدي استفسار لو تكرمتم 

    قمت بإضافة حقول متعددة من text filed   وعددهم أربعة 

    الهدف منهم هو إضافة بيانات في نفس العمود في قاعدة بيانات MySQL بالإضافة الى حقل عددهم أربعة من مربع الاختيار 

    ثم قمت بإضافة دالة الحفظ التالية لحفظ البيانات بشكل متسلسل ومتتابع بمعنى كل text filed  سوف يقابله في العمود الثاني مربع الاختيار  true or false:

      void startUpload() async {
    
          var url = uploadEndPoint;
          var response = await http.post(Uri.parse(url), body: {
            "answers": ControllerOne.text,
            "state": _checkboxOne.toString(),
            "answers": ControllerTwo.text,
            "state": _checkboxTwo.toString(),
            "answers": ControllerThree.text,
            "state": _checkboxthree.toString(),
            "answers": ControllerFore.text,
            "state": _checkboxfore.toString(),
          });
    
          if (response.statusCode == 200) {
            print(response.statusCode);
          } else {}
    
      }

     

    المشكلة في وقت تشغيل الكود الكود يذهب لحفظ اخر حقل فقط ويقوم بتجاوز الـ 3 حقول الأولى وهذا خطاء المفترض ان يعمل بشكل متتابع او متسلسل حسب ما هو معمول في الدالة أعلاه.

    الجدول في قاعدة البيانات يحتوي على حقلين فقط answers + state

    مرفق صوره :

    627262bee15c7_Screenshot2022-05-04152529.png.70dc0ffb188852d027b59305fe57e40a.png

    هل يوجد حل لفعل ذلك ؟بشكل مختلف او ما هو الخطاء لدي  

  2. بتاريخ 2 ساعات قال بلال زيادة:

    هناك طريقة يتم استخدامها و هي إرجاع متغير وليكن باسم page في api و يحمل رقم الصفحة التي تريد عرض السجلات فيها ( مثل فكرة تعدد الصفحات في المواقع الالكترونية ) و بالتالي يكون الرابط الأفتراضي كالتالي 

    
    http://127.0.0.1:8000/api/posts?page=1

    الأن تقوم بعرض السجلات المرجعة من هذا api في ListView كالمعتاد و لكن لاحظ أنه يتم إنشاء متغير جديد و ليكن باسم page في فلاتر كالتالي 

    
    var page = 1;

    ثم عند مناداة رابط api يتم استبدال رقم 1 بقيمة متغير page الذي قمنا بإنشائه فيصبح الرابط كالتالي 

    
    var url = "127.0.0.1:8000/api/posts?page=" + page;

    لاحظ القيمة الافتراضية لهذا المتغير هي 1 ، ثم عند النقر على الزر تقوم بزيادة متغير page بمقدار 1 ويجب إحاطة العملية ب Setstate ليتم تحديث متغير page كالتالي 

    
    TextButton(
    child: Text("Pressed Here"),
    onPressed: (){
    
    	setState(() {
                page = page + 1;
              });
    }

    لاحظ عند الضغط في المرة الاولى سيتم تغيير قيمة متغير page من رقم 1 إلى 2 و هكذا . 

    اهلا اخي الكريم

    اشكرك على ردك 

    اخي العزيز الفكرة جميله ولكن لدي شيء لم استطيع فهمه الان المتغير يحمل قيمة وهذا القيمة قيمة شرطيه ستكون في ملفات php  ما هو الشرط المقصود وضعه في هذا الحالة هل تقصد ان يكون الشرط هو id ?  في هذا الحالة ستكون لدينا مشكلة ان ارقام id  لن تكون متسلسله مع مرور الوقت في جدول البيانات قاعدة البيانات 

    لو تكرمت توضح هذا النقطة 

  3. تحيه طيبه للجميع

    استفسار لو تكرمتم 

    انا أقوم بعرض سجل من خلال قاعدة البيانات للمستخدم في ListView.builder من خلال  استعمال FutureBuilder

    أقوم بعرض نص على سبيل المثال للمستخدم وقمت بوضع زر كتب عليه التالي  احتاج الى طريقة لتمكين المستخدم بعد الضغط على الزر الانتقال الى السجل الثاني او next row في table in MySQL

     لو كان المستخدم يشاهد الان السجل رقم 1 بعد الضغط سوف ينتقل الى السجل رقم 2 ليتم تحديث ليسته وعرض النص الثاني او السطر الثاني في الجدول 

    نوع قاعدة البيانات MySQL استعمل ملفات php  للاتصال لها

     

     

  4. بتاريخ On 4/12/2022 at 19:04 قال Wael Aljamal:

    حاول استخدام غير اسم لكل منها.

    وتأكد من ربط onTap مع المتحكم ما بعد تحميل البيانات

    مرحبا اخي الكريم

    جمعه مباركه عليكم

    اعتذر على تأخر الرد قررت اعمل تحديث إلى فلاتر كامل وحاليا لدي بعض المشاكل بس احلها بشوف هل فلاتر الجديدة مع تحديثات تحل هذا المشكلة / حسب ما شفت بعض المواقع كان فيه بلاغات بسببها لدى كثير من المستخدمين قد يكون تم حلها من قبل فريق تطوير فلاتر في الإصدارات الحديثة

     

    سوف اعود بعد الانتهاء مع النتائج التي وصلت لها

    • أعجبني 1
  5. بتاريخ 2 ساعات قال Wael Aljamal:

    عند مراجعة الشيفرة تبين أنك تقوم ببناء اثنين من Controllerphone وهما غير مرتبطين ببعضهم لم أفهم سبب ذلك.

    مرة ضمن الصنف و مرة ضمن Build.

    اهلا اخي الكريم استعمل واحده لتحرير البيانات اما الثانية لتعبئتها بالبيانات وعرضها

    اذا كنت ترى الطريقة خطاء ياليت تعدل عليه لو فيه إمكانية بشكل الصحيح اذا كانت الطريقة سوف تحل المشكلة السابقه

     

  6. بتاريخ 14 ساعات قال Wael Aljamal:

    هل يمكنك إرفاق شيفرة Controllerphone? أي بعد تعريفه سنتمكن من تطبيق الدوال عليه، تأكد من تطبيق الشيفرة السابقة بعد تحميل البيانات 

    
    class _MyCustomFormState extends State<MyCustomForm> {
    
      final myController = TextEditingController();
    
      @override
      void initState() {
        super.initState();
      // تهئية
      myController.addListener(_myListener);
      }
    
      @override
      void dispose() {
        // تنظيف
        myController.dispose();
        super.dispose();
      }
      void _myListener() {
      controller.selection = TextSelection.fromPosition(TextPosition(offset: controller.text.length));
      }
    }

    كما يمكن نقلع عند النقر عليه onTap

    
    TextField(
        controller: _controller,
        onTap: () => _controller.selection = TextSelection(baseOffset: 0, extentOffset: _controller.value.text.length),
    )
    
    أو
    
    TextField(
        controller: _controller,
        onTap: () => _controller.selection = TextSelection.fromPosition(TextPosition(offset: controller.text.length));
    )

     

    أهلا اخي الكريم

    نعم هذا الصفحة كامله / حاولت تطبيق الامر في onTap ولم ينجح الامر

    
    
    
    void main() {
      runApp(
        EasyLocalization(
          saveLocale: true,
          supportedLocales: [Locale('en', 'US'), Locale('ar', 'SA')],
          path: 'assets/translations',
          fallbackLocale: Locale('en', 'US'),
          child: UpdateProfile(),
        ),
      );
    }
    
    class UpdateProfile extends StatefulWidget {
      @override
      _UpdateState createState() => new _UpdateState();
    }
    
    class _UpdateState extends State<UpdateProfile> {
      
      @override
      void initState() {
        super.initState();
        _fetchData();
      }
      
      var _phone = "";
      var Controllerphone = new TextEditingController();
      void _editData() async {
        var url = 'https://********************fyProfile.php';
    
        var response = await http.post(Uri.parse(url), body: {
    
          "phone": Controllerphone.text,
        
        });
        if (response.statusCode == 200) {
          Navigator.of(context, rootNavigator: true).pop();
        
        } else {
          
        }
      }
      
    List data=[];
      _fetchData() async {
        final url =
            "https://*********************Profile.php";
        final response = await http.get(Uri.parse(url));
        if (response.statusCode == 200) {
          final map = json.decode(response.body);
          final videosMap = map["result"];
          setState(() {
            this.data = videosMap;
            _phone = data[0]['phone'];
    
          });
        }
      }
    
      final TextEditingController controller = TextEditingController();
      @override
      Widget build(BuildContext context) {
        
        Controllerphone = new TextEditingController(text: _phone);
        
        return MaterialApp(
            localizationsDelegates: context.localizationDelegates,
            supportedLocales: context.supportedLocales,
            locale: context.locale,
          home: Scaffold(
    
          appBar: AppBar(
            title: Text("Profile",
                style: TextStyle(
                     color: CustomColors.firebaseNavy))
                .tr(),
            backgroundColor: CustomColors.firebaseGrey,
            elevation: 1.5,
            centerTitle: true,
            leading: BackButton(
              color: CustomColors.firebaseNavy,
              onPressed: () {
                Navigator.pop(context);
              },
            ),
         
          ),
          body:  Form(
     
        child: Center(
            child: data == null
                ? new CircularProgressIndicator(
              valueColor: new AlwaysStoppedAnimation<Color>(Colors.black),
            )
                : new ListView(
              children: <Widget>[
              
                Card(
                    child: Column(children: <Widget>[
                      
                 Row(
                   children: [
    
                     Expanded(
                       child: Container(
                         margin: const EdgeInsets.all(4),
                         child: Row(
                           children: [
                             Expanded(
                               child:
                               TextFormField(
                                 validator: (value) {
                                   if (value.isEmpty) {
                                     return 'cannot be empty'.tr();
                                   }
                                   return null;
                                 },
                                 keyboardType: TextInputType.number,
                                
                                 decoration: InputDecoration(
                                     border: OutlineInputBorder(),
                                     labelText: 'Phone'.tr(),
                                     filled: true,
                                     hintText: ''),
    
                    controller: Controllerphone,
                                   onTap: () => Controllerphone.selection = TextSelection.fromPosition(TextPosition(offset: Controllerphone.text.length)),
        ),
    
                             ),
                           ],
                         ),
                       ),
                     ),
                   ],
                 ),
                      
                    ])),
              ],
            ),
          ),
          ),
          )
    
        );
      }
    }

     

  7. بتاريخ 1 ساعة قال Wael Aljamal:

    يبدو أنها عبارة عن خطأ أو سهوة برمجية في المكتبة Big بسيطة.

    سوف نحاول نقل مؤشر الكتابة عن طريق الكود التالي:

    • بعد إسناد النص في شيفرة المتحكم
    • نقوم بنقل مؤشر الكتابة لنهاية النص
    • fromPosition تحدد بداية النص مكان الكتابة
    • تم تحديد طول النص من خلال controller.text.length يمكنك وضعه بأي قيمة مثلاً من طول السلسة التي تستخدمها
    
    controller.text = '...'; النص
    
    controller.selection = TextSelection.fromPosition(TextPosition(offset: controller.text.length));

     

    مرحبا اخي الكريم

    شاكر لك ردك 

    لو تكرمت توضح كيفية استعماله في الكود الذي قمت بمشاركته في اول المشاركة انا / اعتذر ولكن حقيقه لم افهم طريقة عمل ذلك

  8. انا عامل حقل من نوع textformfield   

    TextFormField(
    
                                 validator: (value) {
                                   if (value.isEmpty) {
                                     return 'cannot be empty'.tr();
                                   }
                                   return null;
                                 },
                              
    
                                
                                 keyboardType: TextInputType.number,
         
                                 decoration: InputDecoration(
                                     border: OutlineInputBorder(),
                                     labelText: 'Phone_number'.tr(),
                                     filled: true,
                                     hintText: ''),
    
                                 controller: Controllerphone,
                               ),

    طبعا المستخدم من المفترض ان يكون قادر على ادخال رقم هاتفه في هذا الحقل / المشكلة انني قمت بربط هذا الحقل مع قاعدة البيانات من خلال 

    controller: Controllerphone,

    بمعنى لو كانت هنالك بيانات يتم جلبها مع بداية تشغيل الصفحة هذا واذا لم تكن هنالك بيانات سيكون الحقل فارغ

    هذا الامر سبب لدي مشكلة الان لو كانت هنالك بيانات ورقم هاتف مع بداية تشغيل الصفحة سوف يتم جلبهم ولكن المستخدم لو قام بضغط على الحقل مؤشر الماوس بشكل تلقائي ينتقل الى بداية النص في حقل textformfield  بمعنى يصبح موقعه قبل النص الذي تم جلبه.

     ولو حاول الان استعمال الأرقام والقيام بإضافة رقم لن يستطيع الكتابة الا في حالة قام بضغط مره أخرى وتغير موقع مؤشر الماوس لبداية النص او موقع مختلف في  حقل textformfield  بمعنى وكانه سوف يكمل البيانات الموجودة / قمت بتأكد بالنسبة إلى كتابة النصوص هيا تعمل ولا توجد مشكلة في موقع مؤشر الماوس لا اعلم لماذا تحدث فقط مع الأرقام.

    أيضا لو قمت بكتابة  نص في البداية ثم حذفه ومحاولة كتابة رقم بعد ذلك الامر يعمل بشكل طبيعي والمشكلة تختفي مع ان موقع المؤشر لا يزال في بداية الكلام وقبل النص الموجود.

     

    أيضا لو قمت بحذف هذا السطر المشكلة يتم حلها ولكني لن احصل على الرقم لو كان موجود في قاعدة البيانات 

     controller: Controllerphone,

    هل يوجد تفسير لهذا المشكلة وحل لها؟ ياليت اذا احد لديه فكره عن الامر او حل لتغير موقع المؤشر في البداية

    • أعجبني 1
  9. تحيه طيبه للجميع

    قمت بعمل مشروع من خلال فلاتر ارغب بعمل نظام serial key له بحكم ان المشروع offline  حتى يحتاج المستخدم رمز التفعيل كل سنة لتجديد اشتراك البرنامج ( المشروع ليس مجاني)

    هل توجد مكتبات لعفل ذلك في فلاتر او طريقة مختلفة ؟

  10. بتاريخ 4 ساعات قال Wael Aljamal:

    يبدو أن Back End يعيد مصفوفة من النتائج للتطبيق، حاول عرضهم في قائمة، أي نفس مجموعة الحقول لديك مكررة ضمن عناصر قائمة.

    يمكنك المرور على المصفوفة data

    
          data = convertDataToJson['result'];

    ولكل كائن منها تقوم بإنشاء عنصر من قائمة و تعرض بيانات المستخدم.

    شيفرة تقريبية:

    
    create list 
    
    usersList
    
    for(var user in data){
      txtName = user['Name'];
      txtNumber= user['Number'];
      txt['Adress'] = user['Adress'];
      
      new ListItem {txtName, txtNumber, .. }
      
      usersList.append(ListItem)
    }

     

    مرحبا بك اخي الكريم

    المشكله ليست في النتائج اخي هو شغال 100% ولكني احتاج اعمل طريقة لتغير بين السجلات

    بمعنى تغير البيانات المعروضه بشكل متسلسل 

     

    احمد الاول وبياناته ثم يمكنني الانتقال بسهم وعرض احمد الثاني وبياناته ثم احمد الثالث بمعنى الانتقال بين السجلات هذا الفكره التي احاول تطبيقها

  11. تحيه طيبه للجميع

    لدي دالة لجلب البيانات من قاعدة بيانات MySQL  من خلال اسم العميل أقوم بكتابة اسم العميل في حقل text filed  واحصل على النتائج في حقول متعددة من  text filed 

    على سبيل المثال لدي Text Field بعد جلب النتائج يعرض لدي عنوان العميل

    أيضا Text Field مختلف يعرض عمر العميل ...الخ

    المشكلة الان الـ Text Field الذي اقم بالبحث من خلاله لو قمت بكتابة اسم أحمد سوف  احصل على اول بيانات أحمد في ترتيب جدول البيانات ولكن قد أكون ارغب بالحصول على بيانات عميل اسمه أحمد مختلف 

    بمعنى ان قاعدة البيانات يوجد فيه اكثر من اسم أحمد واحد / طبعا كتابة الاسم الثاني والثالث ليس حل قد أكون فقط اعرف اول اسم من اسم العميل.

    هل توجد طريقة على سبيل المثال اضع مؤشر الماوس في Text Field الخاص بخانة البحث واقوم بضغط سهم ( الذهاب الى الأسفل من الكيبورد) ثم احصل على بيانات أحمد التالي من قاعدة البيانات ؟

     

    الدالة التي تجلب البيانات لدي :

      _fetchData() async {
         var response = await http.get(
            Uri.parse("http:********************"),
            headers: {"Accept": "application/json"}
            );
    
        setState(() {
          var convertDataToJson = json.decode(response.body);
          data = convertDataToJson['result'];
          if (data.length >0){
          txtName = data[0]['Name'];
          txtNumber= data[0]['Number'];
          txt['Adress'];= data[0]['Adress'];
    
         
          }else{
         
    
          }
        });
      }

    ملف php :

    <?php
    
    header('access-control-allow-origin: *');
    header('Access-Control-Allow-Headers: *');
    
    require_once 'con.php';
    
    $Name=$_GET['Name'];
    
    $sql="SELECT * FROM empl left join tcity  ON empl.Idcity = tcity  Idcity where empl.Name  LIKE  '%$Name%' ";
    $con -> set_charset("utf8");
    $stmt = $con->prepare($sql); 
    $stmt->execute();
    $result = $stmt->get_result();
    
    $array = array();
    
    while ($row  = mysqli_fetch_assoc($result))
    {
    	$array[] = $row;
    }
    
    
    echo ($result) ?
    json_encode(array("code" => 1, "result"=>$array)) :
    json_encode(array("code" => 0, "message"=>"Data not found !"));
    
    
    ?>

     

    • أعجبني 1
  12. @Wael Aljamal

    اخي الكريم اذا كنت محتاج استبدال الاسماء بكلمات هل يمكن عملها بشكل التالي:

    BEGIN
    
    set @id1 := 1;
    set @id2 := 104;
    
    set @i := @id1;
    
    
    SET @names = '1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,'; 
    
    
    
    select @i,@names,Locate(',', @names);
    LABEL1: WHILE @names is not null and  @i < @id2 do
    SET @Name = SUBSTRING_index(@names, ',',1);
    select @i,@names,@name;
    SET @names = replace(@names,concat(@name,','),'');
    UPDATE employees SET NAME = @Name
    WHERE
      id = @i;
    
     SET  @i = @i + 1;
    
    END WHILE label1;
    SET @Name = SUBSTRING_index(@names, ',',1);
    select 'and finally' ,@i,@names,@name;
    end

    لنني حاولت ولم ينجح  الامر توقف الكود لدى اول row  فقط تم الإضافة في اول واحد

  13. بتاريخ 3 ساعات قال Wael Aljamal:

    أهلا بك،

    ملاحظة: Replace تستبدل جميع السلاسل الجزئية و في حال تكرار اسم ما، سيحدث مشكلة

    كل الشكر لك اخي الكريم جاري التجربة الان لنقل قاعدة البيانات لو نجحت بنسبة 95% الامر كافي بيكون

  14. بتاريخ 35 دقائق مضت قال Wael Aljamal:

    غريب، أنا جربت كلا الدالتين بشكل منفصل، اول مرو يقتطع الاسم ثم يتم حفظ الباقي في المتغير names ..

    سأجرب حل جديد.. 

    مشكلة SQL انها غير مرنة بشكل كاف 

    تحديث اخي الكريم

    ولتعم الفائدة للجميع لقد عمل الكود الان طريقتك فعالة 100% كل الشكر لك الغالي

    هذا التعديل النهائي:

    BEGIN
    
    set @id1 := 2591;
    set @id2 := 2594;
    
    set @i := @id1;
    
    SET @names = 'marwan,wael,adnan,sameh,';
    select @i,@names,Locate(',', @names);
    LABEL1: WHILE @names is not null and  @i < @id2 do
    SET @Name = SUBSTRING_index(@names, ',',1);
    select @i,@names,@name;
    SET @names = replace(@names,concat(@name,','),'');
    UPDATE employees SET NAME = @Name
    WHERE
      id = @i;
    
     SET  @i = @i + 1;
    
    END WHILE label1;
    SET @Name = SUBSTRING_index(@names, ',',1);
    select 'and finally' ,@i,@names,@name;
    end
    
    

     

    • أعجبني 1
  15. بتاريخ 15 ساعات قال Wael Aljamal:

    آخر تعديل 

    
      @Name = SUBSTRING(@names, 1, LOCATE(',', @names)-1);

    لأن الدالة تأخذ أول عنصر بترقيم 1 و ليس 0

    أرجو الانتباه، أن وضع الفاصلة في آخر السلسلة النصية إجباري

    مرحبا بك اخي الكريم

    حقيقه انا لم ارغب بطرح المزيد من الأسئلة حول هذا الفاكشن ولكني حاولت إيجاد حل للمشكلة ولم ينجح الامر حتى لا يطول السؤال ويسبب الازعاج

    هيا تعمل بشكل جيد ولكن المشكلة انها تقوم فقط بإضافة اول اسم من الأسماء الموجودة وفي اول row  فقط ولا يتم استكمال الباقي 

     

    BEGIN
    
    set @id1 := 2591;
    set @id2 := 2594;
    
    set @i := @id1;
    
    SET
      @names = 'marwan,wael,adnan,sameh,';
    
    LABEL1: WHILE (Locate(',', @names) > 0) do
    SET
      @Name = SUBSTRING(@names, 1, LOCATE(',', @names));
    
    SET @names = SUBSTRING(@names,1, LOCATE(',', @names)-1);
    UPDATE employees SET NAME = @Name
    WHERE
      id = @i;
    
    SET
      @i = @i + 1;
    
    END WHILE label1;
    end

     

    بشكل التالي:

    622b2c0191f22_Screenshot2022-03-11144017.png.bcd147aad7c69e2fea70a2427d4fca88.png

  16. بتاريخ 6 دقائق مضت قال Wael Aljamal:

    حاول التالي:

    
    BEGIN
    SET
      @id1 := 2595;
    
    SET
      @id2 := 2592;
    
    SET
      @i := @id1;
    
    SET
      @names = 'marwan,wael,adnan,sameh,';
    
    LABEL1: WHILE (Locate(',', @names) > 0) do
    SET
      @Name = SUBSTRING(@names, 0, LOCATE(',', @names));
    
    SET
      @names = Substring(@names, Locate(',', @names) + 1);
    
    UPDATE
      employees
    SET
      NAME = @Name
    WHERE
      id = @i;
    
    SET
      @i = @i + 1;
    
    END WHILE label1;
    
    END

    استبدلت الدالة ELT ب substring

    اهلا اخي الكريم

    اصبح الان يظهر الخانة فارغة مرفق لك صوره :

    622a4c0bc4903_Screenshot2022-03-10230531.png.37937d412a1a7963d97cfcf00d33de97.png

    • أعجبني 1
  17. بتاريخ 21 ساعات قال Wael Aljamal:

    يوجد نقص في الشيفرة يجب أن تكون بهذا الشكل:

    
    DELIMITER //
    CREATE PROCEDURE addNames()
    BEGIN
    
    set @id1 := 5;
    set @id2 := 10;
    
    set @i := @id1;
    
    SET @names = 'marwan,wael,adnan,sameh,eyad,';
    
    label1: WHILE (LOCATE(',', @names) > 0)
    do
        SET @name = ELT(1, @names);
        SET @names= SUBSTRING(@names, LOCATE(',',@names) + 1);
    
      UPDATE users SET userName = @name WHERE userId = @i;
    set @i = @i + 1;
    end while label1;
    end;

     

    مرحبا اخي الكريم

    اعتذر على تأخر الرد أولا

    بنسبة الى الحل هو يعمل بدون أخطاء الان ولكن المشكلة الوحيدة لما اعمل تشغيل للعملية يقوم بإضافة الأسماء في سطر واحد او في Row 1 / المفترض ان يقوم بتوزيع الأسماء على row  بشكل متسلسل.

    مرفق لك صوره

    622a4689dd958_Screenshot2022-03-10224201.png.ba3fa069833513b94e1045fde2652238.png

     

    الكود كالتالي:

    BEGIN
    
    set @id1 := 2595;
    set @id2 := 2592;
    
    set @i := @id1;
    
    SET @names = 'marwan,wael,adnan,sameh,';
    
    label1: WHILE (LOCATE(',', @names) > 0)
    do
        SET @Name = ELT(1, @names);
        SET @names= SUBSTRING(@names, LOCATE(',',@names) + 1);
    
      UPDATE employees SET Name = @Name WHERE Id = @i;
    set @i = @i + 1;
    end while label1;
    end

     

    • أعجبني 1
  18. بتاريخ منذ ساعة مضت قال Wael Aljamal:

    mySQL لا تستعمل المصفوفات، لذلك كحل بديل عليك كتابة الأسماء جميها ضمن سلسلة نصية (بينهم فاصلة) و من ثم ضمن الحلقة نستخلص اسم لكل تكرار و نستعمله في الشيفرة، لتصبح كما يلي:

    
    set @id1 := 5;
    set @id2 := 10;
    
    set @i := @id1;
    
    SET @names = 'marwan,wael,adnan,sameh,eyad,';
    
    while (LOCATE(',', @names) > 0) //@i <= @id2
    do
        SET @name = ELT(1, @names);
        SET @names= SUBSTRING(@names, LOCATE(',',@names) + 1);
    
      UPDATE users SET userName = @name WHERE userId = @i;
    set @i = @i + 1;
    end while;

     

    مرحبا اخي الكريم

    يظهر لدي الخطاء التالي: صورة مرفقة

    622906828e7fa_Screenshot2022-03-09235613.thumb.png.8dcded13807041dc62c3270fc2300997.png

  19. لو كان لدي جدول بيانات يحتوي على حقول مختلفة منها ارقام الهواتف على سبيل المثال قمت انا بأدراج بيانات الهواتف في حقل phone من خلال أوامر sql- Insert () واصبح لدي على سبيل المثال حقول بيانات تحتوي على تسلسل ID  من رقم 1 الى 100

    ثم اصبح لدي بيانات مختلفة وليكون أسماء وانا امتلك عمود اسمه Name  ولكن ارغب بإضافة الأسماء حسب تسلسل ارقام الهواتف ولكن ليس من البداية بمعنى ارغب بأدراج من تسلسل   ID  مثلا  8 وحتى 34  فقط

    وسيكوون في نفس موقع  row الذي سابقا وضعنا ارقام هواتف فيه 

    رسم توضيحي :

    هذا اول مرحلة قمت بها : 

    انا اقوم بتنفيذ ذلك من خلال صفحة MySQL مباشر ولا استعمل صفحة php  لفعل ذلك 

    صورة لتوضيح : 

    6228ef082435c_Screenshot2022-03-09221626.thumb.png.10fca5bd23b416d44d5c92ec210016e7.png

    حاولت القيام بشي مثل ذلك :

    INSERT INTO employees 
      (Name) 
    VALUES 
      (('ahame'),
       ('sfgtg'),
      ('yosu') WHERE Id > 2594 AND id < 2592);
     

    ولكن الامر لم ينجح 

    من

    +----+-------------------+------+--------+
    | id | Name              | phone| Date   |
    +----+-------------------+------+--------+
    |  1 |                   |563824|        |   
    |  2 |                   |525225|        |
    |  3 |                   |546542|        |
    |  4 |                   |464625|        |
    |  5 |                   |654525|        |
    |  6 |                   |849842|        |
    |  7 |                   |654446|        |          
    +----+-------------------+------+--------+

    إلى

    +----+-------------------+------+--------+
    | id | Name              | phone| Date   |
    +----+-------------------+------+--------+
    |  1 |                   |563824|        |   
    |  2 |                   |525225|        |
    |  3 | Ali               |546542|        |
    |  4 | Ahmad             |464625|        |
    |  5 | Ayob              |654525|        |
    |  6 |                   |849842|        |
    |  7 |                   |654446|        |          
    +----+-------------------+------+--------+

     

    • أعجبني 1
  20. لو كان لدي جدول بيانات يحتوي على حقول مختلفة منها ارقام الهواتف على سبيل المثال قمت انا بأدراج بيانات الهواتف في حقل phone من خلال أوامر sql- Insert () واصبح لدي على سبيل المثال حقول بيانات تحتوي على تسلسل ID  من رقم 1 الى 100

    ثم اصبح لدي بيانات مختلفة وليكون أسماء وانا امتلك عمود اسمه Name  ولكن ارغب بإضافة الأسماء حسب تسلسل ارقام الهواتف ولكن ليس من البداية بمعنى ارغب بأدراج من تسلسل   ID  مثلا  8 وحتى 34  فقط

    وسيكوون في نفس موقع  row الذي سابقا وضعنا ارقام هواتف فيه 

    رسم توضيحي :

    هذا اول مرحلة قمت بها : 

    // الارقام توضيحية فقط
    INSERT INTO table_name (phone)
    VALUES 
    (654656),
    (546546),
    (456456),
    (645645),
    (546546),
    (456456);
    +----+-------------------+------+--------+
    | id | Name              | phone| Date   |
    +----+-------------------+------+--------+
    |  1 |                   |563824|        |   
    |  2 |                   |525225|        |
    |  3 |                   |546542|        |
    |  4 |                   |464625|        |
    |  5 |                   |654525|        |
    |  6 |                   |849842|        |
    |  7 |                   |654446|        |          
    +----+-------------------+------+--------+

     

    الان لدي حقول هواتف حتى تسلسل 7 من تسلسل id 

    ارغب بعمل التالي:

    +----+-------------------+------+--------+
    | id | Name              | phone| Date   |
    +----+-------------------+------+--------+
    |  1 |                   |563824|        |   
    |  2 |                   |525225|        |
    |  3 | Ali               |546542|        |
    |  4 | Ahmad             |464625|        |
    |  5 | Ayob              |654525|        |
    |  6 |                   |849842|        |
    |  7 |                   |654446|        |          
    +----+-------------------+------+--------+

     

    احتاج إضافة أسماء في تسلسل id من 3 الى 5 ليصبح شكل الجدول كما في المثال في أعلاه بحيث اني استطيع تعبئة بيانات مجموعة من الأشخاص دفعة واحده في كل مره احتاج ذلك واستثناء الاخرين

    هل يوجد طريقة لفعل ذلك؟ من خلال أوامر SQL 

    • أعجبني 1
  21. بتاريخ منذ ساعة مضت قال Wael Aljamal:

    يتوفر ل PHP واجهة برمجية تدعى PDO تعمل على تحقيق التوافق بين الشيفرات البرمجية التي نكتبها ب SQL لتعمل مع مختلف محركات قواعد البيانات mySQL و SQL Server كما توفر عمل اتصال مع قواعد بيانات Access.

    • الشيفرة التالية تعمل على قراءة بيانات من ملف Access حيث نحتاج لتوفر مسار الملف وهو accdatabase
    • و اتصال مع قاعدة بيانات mySQL عن طريق معلوماتها، اسم القاعدة و بيانات المستخدم
    • قراءة البيانات من الملف مع تحديد الحقول المطلوبة ثم حشرها في قاعدة البيانات 
    
    <?PHP
    
    // مسار ملف ACCESS
    $accdatabase="C:\Path\To\database.accdb";
    
    // بيانات اتصال قاعدة البيانات
    $host="localhost";
    $mydatabase="****";
    $username="****";
    $password="****";
    
    try { 
      # عمل اتصال مع قاعدتي البيانات
      $accConn = new PDO("odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)}; DBq=$accdatabase;Uid=Admin;Pwd=;"); 
    
      $myConn = new PDO("mysql:host=$host;dbname=$mydatabase",$username,$password); 
      $myConn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    	
    	// جلب بيانات الملف SELECT
      $sql = "SELECT * FROM Table ..."; 
      $accstmt = $accConn->query($sql);
      $accstmt->setFetchMode(PDO::FETCH_ASSOC); 
    
      // جلب الأسطر من الملف
      while($row = $accstmt->fetch()) { 
        // حشرالبيانات من ناتج استعلام SQL
        $mystmt = $myConn->prepare("INSERT INTO Table ... (col1, col2, col3, col4) VALUES (?, ?, ?, ?)");
    
        # تجهيز الحقول
        $mystmt->bindParam(1, $row['col1'], PDO::PARAM_STR, 50); 
        $mystmt->bindParam(2, $row['col2'], PDO::PARAM_STR, 50);    
        $mystmt->bindParam(3, $row['col3'], PDO::PARAM_STR, 50); 
        $mystmt->bindParam(4, $row['col4'], PDO::PARAM_STR, 50);
    
        # تنفيذ الاستعلام
        $mystmt->execute();
      }
    } 
    catch(PDOException $e) {         
        echo $e->getMessage()."\n"; 
        exit; 
    }
    
    // إغلاق قنوات الاتصال
    $accConn = null;
    $myConn = null;

    تبقى عليك بعض التعديلات لكي يعمل الملف، ثم قو باستدعائه من خلال localhost مثلما تشغل أي ملف PHP.. 

    يمكنك عمل قاعدة بيانات تجريبية قبل تطبيق الشيفرة مباشرة على قاعدة بياناتك

    اهلا بك اخي الكريم

    شاكر لك ردك الغالي

    ما فيه طريقة اسهل من خلال موقع  لفعل ذلك؟

  22. هل يوجد موقع او برنامج يقوم بعملية كتابة البيانات لي على شكل sql statement

    على سبيل المثال لدي جدول بيانات في الاكسس وارغب بأخذ عمود الهواتف منه  وهو يحتوي على عدد كبير من الأرقام ارغب بتحويلها الى  sql statement ثم أقوم بأدرجها في  قواعد mysql على شكل statement

    هل توجد موقع تقدم هذا الخدمة ؟احد لديه فكره عن الامر؟

    بحيث انني اقوم بنقل بيانات العمود مثلا : 

    12365

    24654

    23154

    واحصل على نتيجة insert  sql statement لهم 

    • أعجبني 1
  23. تحيه طيبه للجميع

    لو كان لدي عمود يحتوي على أسماء الدول ولنفترض لدي السعودية الأردن ومصر الخ..

    وكنت ارغب بالحصول  على كل الحقول ما عدا السعودية على سبيل المثال كيف ممكن نعمل هذا الامر؟

    طبعا لا ارغب بتحديد جمله شرطيه فيها أسماء الدول المتبقية والسبب ان لدي مجموع كبير من الدول احتاج الى طريقة لتخطي الدول التي لا احتاجها الامر ابسط بشكل هذا

    هل توجد طريقة لفعل ذلك؟

    • أعجبني 1
  24. بتاريخ 18 ساعات قال Mohamd Imran:

    مرحباً بك @مروان مروان3

    جوجل بلاي وأبل ستور تقريباً نفس السياسة من ناحية تغيير إسم التطبيق بعد نشره أي يصبح Live , بالنسبة لجوجل بلاي إن قمت بنشر التطبيق أي بعد ما تنتهي فترة مراجعته من جوجل ويصبح متاح للتحميل من الجوجل بلاي ,أي تعديل ستقوم به سواء تحديث إسم التطبيق أو سياسة الخصوصية أو تقريباً أي شيء مشابه لذلك , سيتطلب مراجعة أخرى من جوجل بلاي وبعد أن تتم الموافقة يتم تطبيق التغييرات التي قمت بها ,أما من ناحية أبل الأبل ستور إن أردت تغيير إسم التطبيق ستحتاج إلى عمل نسخة أخرى من التطبيق أي من ال Xcode بإصدار أعلى أو أحدث من النسخة السابقة التي مرفوعة مسبقاً على المتجر ,وهذه النسخة الأخرى التي قمت بعملها ستكون كتحديث للتطبيق في المتجر وهنا يمكنك تغيير إسم التطبيق فقط , أو يمكنك تغيير إسم التطبيق في حالة أن التطبيق ليس Live أو لم تتم الموافقة عليه من أبل - أي تم رفضه - ,هذه السياسة المتبعة لكل من جوجل بلاي وأبل ستور .

    مرحبا بك اخي الكريم شاكر لك ردك 

    بس توضيح لو تكرمت الذي فهمته من كلامك انني استطيع تغير الاسم وما شابه بطريقة اتباع تحديث التطبيق بمعنى لن افقد عدد التنزيلات الخاصة بتطبيق وما شابه لو قمت بتغير الاسم العام لتطبيق صحيح هذا الكلام؟

    • أعجبني 1
×
×
  • أضف...