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

[php-mysql] ادخال Multidimensional Arrays لقاعدة البيانات

محمد المصري12

السؤال

سلام عليكم

عندي 4 مصفوفات وأحاول ادخال بيانات اكثر من قائمة متعددة الاختيارات

كل مصفوفة تحتوي على بيانات تأتي من ( قائمة منسدلة متعددة الاختيارات تسمى اللون - العدد - المجموع - السماح - الاجمالي )

عند اختيار قيمتين من القائمة المنسدلة متعددة الاختيارات المطلوب ادخال القيمتين في حقلين منفصلين و ادخال باقي عناصر المصفوفة امام كل حقل حسب المتغير

شكل قاعدة البيانات كالتالي

1.jpg.771f82e3bea100d30ea666117f0c219f.jpg

مثال 

هتختار من المصفوفة الاولى  قائمة اللون احمر و ابيض ، يبقى هاينزلي في الداتابيز 2 صف واحد فيهم للون الاحمر و التاني للابيض و باقي البيانات تدخل عادي بمتغيراتها 

هختار من المصفوفة التانية قائمة اللون ازرق ، يبقى هاينزل لي صف واحد فيه اللون الاصفر و باقي البيانات بمتغيراتها

لما بطبق الكود ما بيجليش غير لون واحد بس من كل قائمة حتى لو اخترت 4 الوان او 5

هو اول لون فقط ، فما الحل

الكود

$order = $_POST['order'];

$threads = $_POST['threads']; // كود الخيط

$items = array($_POST['colorSelect']); // مصفوفة اسماء الالوان

//  $colorSelect = $_POST['colorSelect']; // اختيار اللون

$colorNumber = $_POST['colorNumber'];

$hadr = $_POST['hadr']; // السماح

$last = $_POST['last']; // الاجمالي

$countPiece = $_POST['countPiece']; // عدد القطع الملبسية

$total = $_POST['total'];


  // $result = $conn->query("DELETE FROM order_threads WHERE order_id='$order'");

for ($i =0; $i < count($threads); $i++){

try
{

foreach ($items AS $item){

$result = $conn->query("INSERT INTO order_threads(order_id, thread_id, color_select, colorNumber_input, countPiece , total,hadr,egmaly ) VALUES('$order','$threads[$i]','$item[$i]' ,'$colorNumber[$i]','$countPiece[$i]','$total[$i]','$hadr[$i]','$last[$i]')");

}}
            catch (Exception $e)
            {
                var_dump($e->getTrace());
                // or to get the full error info, just
                var_dump($e);
            }

        }

        $result2 = $conn->query("UPDATE orders SET thread=1 WHERE id='$order'");

        if ($result2){
            echo 'done';
        }

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 1
بتاريخ 43 دقائق مضت قال محمد المصري5:

شكرا لك اخي الكريم

أرى أن المشكلة هي عدم القدرة على معرفة كل لون لأي خيط يتبع، لأن لديك مصفوفة threads و مصفوفة ألوان، وإن كان لديك خيطين، الأول له لون، و الثاني لونين، لن تستطيع التعرف على عدد الألوان لكل خيط بشكل منفصل.

الحل يكمن في Frontend بشكل أولي، يفترض إرسال البيانات بتجميع مناسب. لأن المرور على حلقتين بهذا الشكل غير صحيح لهذه الحالة.

سوف نستفيد من المتغير colorNumber[$i]$ لمعرفة عدد الخطوات المطلوبة للحلقة الداخلية الخاصة بالألوان.

حسب ما فهمت، لكل خيط عدد ألوانه مخزن في colorNumber وبالتالي نعرف عداد عام خارج الحلقات، و لكل خيط، سوف يتم التحرك على مصفوفة الألوان بعدد ألوان الخيط الحالي، أي نزيد العداد الخارجي وهو لكل خيط، سوف يتحرك على لون أو أكثر حسب عدد ألوان هذا الخيط، حاولت عمل التعديل، لكن ينقصه التجريب يمكنك متابعة الفكرة بالشيفرة التالية: 

<?php

$j = 0;

for ($i =0; $i < count($threads); $i++){

  try
  {

    for ($k =0; $k < $colorNumber[$i]; $k++,$j++) {
      $item = $items[$j];
      $result = $conn->query("INSERT INTO order_threads(order_id, thread_id, color_select, colorNumber_input, countPiece , total,hadr,egmaly ) VALUES('$order','$threads[$i]','$item[$i]' ,'$colorNumber[$i]','$countPiece[$i]','$total[$i]','$hadr[$i]','$last[$i]')");

    }}
  catch (Exception $e)
  {
    var_dump($e->getTrace());
    // or to get the full error info, just
    var_dump($e);
  }

}

$result2 = $conn->query("UPDATE orders SET thread=1 WHERE id='$order'");

if ($result2){
  echo 'done';
}

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 1
بتاريخ 10 ساعات قال محمد المصري5:

يعني البيانات كلها دخلت تمام ( تم التعرف على عدد الالوان لكن المشكلة الان في اسمها)

المشكلة في الشيفرة هي عدم وضوح تسمية المتغيرات بعض الشيء، 

في الحقل المقابل ل color_select والذي هو item[$i]$ يمكن تبديله ب item$ في SQL.

حاول طباعة المتغيرات و معرفة القيم التي تحملها ومن ثم كيفية استخدام index مثلاً

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 13 ساعات قال Wael Aljamal:

عند تجريبك لإضافة بيانات، ما هو محتوى المتغير $items حاول طباعتها 


print_r($items)

 

شكرا لك اخي الكريم

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

1.thumb.jpg.a58c3842089cb89d04174ef9a659b8d2.jpg

 

لكن في الحقيقه دي بتدخل قاعدة البيانات بالشكل ده

2.jpg.35287deb867cf2e31bd7fe1ad7d1354a.jpg

 

ناتج طباعة  محتوى المتغير $items  كما أمرت كالتالي

 

 

 
Array
(
    [0] => Array
        (
            [0] =>   احمر
            [1] =>   زيتي
            [2] =>   اصفر
        )

)

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 23 دقائق مضت قال Wael Aljamal:

أرى أن المشكلة هي عدم القدرة على معرفة كل لون لأي خيط يتبع، لأن لديك مصفوفة threads و مصفوفة ألوان، وإن كان لديك خيطين، الأول له لون، و الثاني لونين، لن تستطيع التعرف على عدد الألوان لكل خيط بشكل منفصل.

الحل يكمن في Frontend بشكل أولي، يفترض إرسال البيانات بتجميع مناسب. لأن المرور على حلقتين بهذا الشكل غير صحيح لهذه الحالة.

سوف نستفيد من المتغير colorNumber[$i]$ لمعرفة عدد الخطوات المطلوبة للحلقة الداخلية الخاصة بالألوان.

حسب ما فهمت، لكل خيط عدد ألوانه مخزن في colorNumber وبالتالي نعرف عداد عام خارج الحلقات، و لكل خيط، سوف يتم التحرك على مصفوفة الألوان بعدد ألوان الخيط الحالي، أي نزيد العداد الخارجي وهو لكل خيط، سوف يتحرك على لون أو أكثر حسب عدد ألوان هذا الخيط، حاولت عمل التعديل، لكن ينقصه التجريب يمكنك متابعة الفكرة بالشيفرة التالية: 


<?php

$j = 0;

for ($i =0; $i < count($threads); $i++){

  try
  {

    for ($k =0; $k < $colorNumber[$i]; $k++,$j++) {
      $item = $items[$j];
      $result = $conn->query("INSERT INTO order_threads(order_id, thread_id, color_select, colorNumber_input, countPiece , total,hadr,egmaly ) VALUES('$order','$threads[$i]','$item[$i]' ,'$colorNumber[$i]','$countPiece[$i]','$total[$i]','$hadr[$i]','$last[$i]')");

    }}
  catch (Exception $e)
  {
    var_dump($e->getTrace());
    // or to get the full error info, just
    var_dump($e);
  }

}

$result2 = $conn->query("UPDATE orders SET thread=1 WHERE id='$order'");

if ($result2){
  echo 'done';
}

 

رائع تم اختيار البيانات كالتالي و كما واضح تحتوي على 6 الوان ببياناتهم

1.thumb.jpg.e4a4bc455b78a7a4648940b6e318f2b1.jpg

و تظهر رسالة خطأ بالشكل التالي 

2.thumb.jpg.ea85b4c1644a921c735541f1a69bc8dc.jpg

الاسطر 82 و 82 كالتالي

82 : $item = $items[$j];
83 : $result = $conn->query("INSERT INTO order_threads(order_id, thread_id, color_select, colorNumber_input, countPiece , total,hadr,egmaly ) VALUES('$order','$threads[$i]','$item[$i]' ,'$colorNumber[$i]','$countPiece[$i]','$total[$i]','$hadr[$i]','$last[$i]')");

لكن تم ادخال البيانات في الداتابيز كالتالي

3.jpg.de9b0f5fcef9bdb7ca22adf7fae8f1d9.jpg

يعني البيانات كلها دخلت تمام ( تم التعرف على عدد الالوان لكن المشكلة الان في اسمها)

بخصوص لتمرير المتغيرات من الفرونت اند للباك اند عن طريق jQuery فهو كالتالي

let threads = [];

let colorSelect =[];

let colorNumber =[];

let countPiece =[];

let total =[];

let hadr =[];

let last = [];

$(".threads-value").each(function () {
threads.push($(this).val());
});


$(".color_select_thread option:selected").each(function() {

let text = $(this).text();
//let tempVal = $(".color_select_thread").text();

if(text.indexOf(text) >= 0 && colorSelect.indexOf(text) < 0) {
    colorSelect.push(text);
} else if(text.indexOf(text) < 0 && colorSelect.indexOf(text) >= 0) {
    colorSelect.splice(colorSelect.indexOf(text) , 1);
}
  //  colorSelect.push($(this).text());
});

$(".colorNumber_input_thread").each(function() {
colorNumber.push($(this).val());
});

$(".countPiece_thread").each(function() {
countPiece.push($(this).val());
});

$(".total_thread").each(function() {
total.push($(this).val());
});

$(".hadr_thread").each(function() {
    hadr.push($(this).val());
});

$(".last_thread").each(function() {
    last.push($(this).val());
});

لك خالص شكري و تقديري يا باش مهندس على مساعدتك الكريمة 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...