পিএইচপি দিয়ে POST এর মাধ্যমে একটি বহুমাত্রিক অ্যারে জমা দেওয়া


102

আমার একটি পিএইচপি ফর্ম রয়েছে যার একটি পরিচিত সংখ্যক কলাম রয়েছে (উদাহরণস্বরূপ শীর্ষ ব্যাস, নীচের ব্যাস, ফ্যাব্রিক, রঙ, পরিমাণ), তবে সারিগুলির একটি অজানা সংখ্যা রয়েছে, কারণ ব্যবহারকারীরা সারিগুলি প্রয়োজন হিসাবে যুক্ত করতে পারেন।

আমি আবিষ্কার করেছি যে কীভাবে প্রতিটি ক্ষেত্র (কলাম) নিতে এবং সেগুলি তাদের নিজস্ব একটি অ্যারেতে স্থাপন করতে হয়।

<input name="topdiameter['+current+']" type="text" id="topdiameter'+current+'" size="5" />
<input name="bottomdiameter['+current+']" type="text" id="bottomdiameter'+current+'" size="5" />

এইচটিএমএলটিতে আমি যা শেষ করব তা হ'ল:

<tr>
  <td><input name="topdiameter[0]" type="text" id="topdiameter0" size="5" /></td>
  <td><input name="bottomdiameter[0]" type="text" id="bottomdiameter0" size="5" /></td>
</tr>
<tr>
  <td><input name="topdiameter[1]" type="text" id="topdiameter1" size="5" /></td>
  <td><input name="bottomdiameter[1]" type="text" id="bottomdiameter1" size="5" /></td>
</tr>

...and so on.

আমি এখন যা করতে চাই তা হল সমস্ত সারি এবং কলামগুলি একটি বহুমাত্রিক অ্যারেতে রেখে সেটির বিষয়বস্তু ক্লায়েন্টকে ইমেল করুন (পছন্দমত একটি সুন্দর বিন্যাসিত টেবিলের মধ্যে)। এই সমস্ত ইনপুট এবং নির্বাচনগুলি কীভাবে একটি দুর্দান্ত অ্যারেতে যুক্ত করা যায় তা আমি সত্যিই বুঝতে পারি না been

এই মুহুর্তে, আমি বেশ কয়েকটি 1D অ্যারে ব্যবহার করার চেষ্টা করব, যদিও আমার ধারণা রয়েছে যে একক 2D অ্যারে ব্যবহার করা বেশ কয়েকটি 1D অ্যারে ব্যবহারের চেয়ে ভাল অনুশীলন হবে be

উত্তর:


148

জমা দেওয়ার সময়, আপনি এমন একটি অ্যারে পাবেন যেন এটি তৈরি করা হয়:

$_POST['topdiameter'] = array( 'first value', 'second value' );
$_POST['bottomdiameter'] = array( 'first value', 'second value' );

তবে আমি পরিবর্তে আপনার ফর্মের নামগুলি এই ফর্ম্যাটে পরিবর্তন করার পরামর্শ দেব:

name="diameters[0][top]"
name="diameters[0][bottom]"
name="diameters[1][top]"
name="diameters[1][bottom]"
...

এই বিন্যাসটি ব্যবহার করে, মানগুলির মধ্য দিয়ে লুপ করা অনেক সহজ।

if ( isset( $_POST['diameters'] ) )
{
    echo '<table>';
    foreach ( $_POST['diameters'] as $diam )
    {
        // here you have access to $diam['top'] and $diam['bottom']
        echo '<tr>';
        echo '  <td>', $diam['top'], '</td>';
        echo '  <td>', $diam['bottom'], '</td>';
        echo '</tr>';
    }
    echo '</table>';
}

ধন্যবাদ! আমি এটির কাছাকাছি আসতে শুরু করেছি, যদিও আমার কলাম এবং সারিগুলি উল্টে গেছে।
ফায়ারলাইট

আপনি যদি পাঠ্য ক্ষেত্রগুলি ক্লোনিং করছেন এবং তালিকার জন্য নাম যুক্ত করার কোনও নিয়ন্ত্রণ নেই যেমন name="diameters[0][top]আমার একাধিক নাম থাকে তবে আমি কী করতে পারি? যেমন উপরে, নীচে, বাম এবং ডান? @ DisgruntledGoat
JMASTER বি

@ JMASTERB দেরীতে সংযোজন তবে আপনাকে জেএস এর সাথে কিছু প্রসেসিং যুক্ত করতে হবে, যদি সেগুলি ক্রমযুক্ত হয় তবে আপনি ক্লোনিংয়ের পরে পূর্ববর্তী ইনপুট নামটি পড়বেন এবং ক্লোনটিতে প্রতিটি ইনপুট নামের অ্যাট্রিবিউটের জন্য ম্যানুয়ালি 1 দ্বারা বৃদ্ধি পাবেন।
ড্যানিয়েল

16

আপনি যেমন নামকরণের সাথে সমস্ত পরামিতি জমা দিতে পারে:

params[0][topdiameter]
params[0][bottomdiameter]
params[1][topdiameter]
params[1][bottomdiameter]

তারপরে আপনি এই জাতীয় কিছু করুন:

foreach ($_REQUEST['params'] as $item) {
    echo $item['topdiameter'];
    echo $item['bottomdiameter'];
}

0

আমি একটি ফাংশন তৈরি করেছি যা অ্যারেগুলি পাশাপাশি একক জিইটি বা পোষ্ট মানগুলিকে পরিচালনা করে

function subVal($varName, $default=NULL,$isArray=FALSE ){ // $isArray toggles between (multi)array or single mode

    $retVal = "";
    $retArray = array();

    if($isArray) {
        if(isset($_POST[$varName])) {
            foreach ( $_POST[$varName] as $var ) {  // multidimensional POST array elements
                $retArray[]=$var;
            }
        }
        $retVal=$retArray;
    }

    elseif (isset($_POST[$varName]) )  {  // simple POST array element
        $retVal = $_POST[$varName];
    }

    else {
        if (isset($_GET[$varName]) ) {
            $retVal = $_GET[$varName];    // simple GET array element
        }
        else {
            $retVal = $default;
        }
    }

    return $retVal;

}

উদাহরণ:

$curr_topdiameter = subVal("topdiameter","",TRUE)[3];
$user_name = subVal("user_name","");
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.