كيفية تمرير مصفوفة في query string: شرح كامل بلغة PHP

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

لماذا تحتاج إلى تمرير مصفوفة في URL؟ وما الذي يجعل الأمر ليس بهذه البساطة؟

\n

تخيل أنك تكتب بلغة PHP فلتر منتجات لمتجر إلكتروني. يختار المستخدم عدة فئات، عدة ألوان، ونطاق سعري. كيف تمرر كل هذه البيانات إلى الخادم عبر طلب GET؟ الحل الواضح هو ?category=1&category=2&category=3. لكن الخادم سيرى القيمة الأخيرة فقط، ما لم تستخدم حيلة ذكية.

\n

على Stack Overflow، سؤال "How to pass an array within a query string?" حصد عشرات الآلاف من المشاهدات. المطورون يتعثرون في هذا الأمر يومياً. اليوم سنشرح هذا الموضوع بالكامل: سأوضح لك كيفية تمرير مصفوفة عبر URL بشكل صحيح، وكيفية معالجتها على الخادم، وما هي العقبات التي تنتظرك.

\n

هل أنت مستعد لتحويل معاملات GET العشوائية إلى بنية بيانات منظمة؟ هيا بنا!

\n\n

الأساسيات: كيف يعالج PHP query string

\n

عند إرسال طلب GET، يقوم PHP تلقائياً بملء المصفوفة الشاملة $_GET. إذا كان في URL ?name=John&age=25، فستبدو $_GET هكذا:

\n
array(2) {\n  ["name"] => string(4) "John"\n  ["age"] => string(2) "25"\n}
\n

لكن ماذا لو حاولنا تمرير عدة قيم بنفس المفتاح؟ لنكتب URL: ?color=red&color=green&color=blue. سيتلقى الخادم فقط color=blue. سيتم استبدال القيم الأخرى لأن PHP لا يعرف ماذا يفعل بالمفاتيح المكررة.

\n

هنا يأتي دور تركيب الأقواس المربعة، الذي صُمم خصيصاً لهذه المهمة.

\n\n

الطريقة الأولى: تركيب الأقواس المربعة (الأكثر شيوعاً)

\n

أضف أقواساً مربعة إلى اسم المعامل: color[]. عندما يرى PHP هذا النمط، يقوم تلقائياً بإنشاء مصفوفة. مثال على URL:

\n
?color[]=red&color[]=green&color[]=blue
\n

على الخادم، سيحتوي $_GET على:

\n
array(1) {\n  ["color"] => array(3) {\n    [0] => string(3) "red"\n    [1] => string(5) "green"\n    [2] => string(4) "blue"\n  }\n}
\n

والآن مثال على كود PHP يعالج هذا:

\n
<?php\n// URL: example.com?color[]=red&color[]=green&color[]=blue\nif (isset($_GET['color']) && is_array($_GET['color'])) {\n    echo "الألوان المحددة:<br>";\n    foreach ($_GET['color'] as $index => $color) {\n        echo ($index + 1) . ". " . htmlspecialchars($color) . "<br>";\n    }\n}\n?>
\n

النتيجة في المتصفح:

\n
الألوان المحددة:\n1. red\n2. green\n3. blue
\n\n

المفاتيح المسماة: عندما لا يكون الترتيب مهماً

\n

أحياناً تحتاج إلى تمرير مصفوفة ترابطية (مفتاح ← قيمة). لهذا استخدم تركيب key[] مع تحديد المفتاح:

\n
?filter[category]=books&filter[price]=100&filter[in_stock]=1
\n

سيحولها PHP إلى:

\n
array(1) {\n  ["filter"] => array(3) {\n    ["category"] => string(5) "books"\n    ["price"] => string(3) "100"\n    ["in_stock"] => string(1) "1"\n  }\n}
\n

المعالجة على الخادم:

\n
<?php\nif (isset($_GET['filter'])) {\n    $filter = $_GET['filter'];\n    $query = "SELECT * FROM products WHERE 1=1";\n    if (!empty($filter['category'])) {\n        $query .= " AND category = '" . mysqli_real_escape_string($conn, $filter['category']) . "'";\n    }\n    if (!empty($filter['price'])) {\n        $query .= " AND price <= " . (int)$filter['price'];\n    }\n    // ... باقي الشروط\n}\n?>
\n\n

الطريقة الثانية: JSON في query string (متقدم)

\n

إذا كانت المصفوفة معقدة (متعددة المستويات ومتداخلة)، يصبح تركيب الأقواس المربعة مرهقاً. البديل هو تمرير سلسلة JSON مشفرة في URL.

\n

تكوين URL من جهة العميل (JavaScript):

\n
const data = {\n    colors: ['red', 'green', 'blue'],\n    sizes: ['S', 'M', 'L'],\n    options: {\n        gift_wrap: tr                

المدونات

توصيات الكتب