"ফর্মটি পুরানো হয়ে গেছে" পাওয়ার ত্রুটি


12

আমার একটি মাল্টিস্টেপ নোড ফর্ম রয়েছে। একটি পপআপ ডায়ালগের মাধ্যমে ফর্মের অর্ধেক পথটি ব্যবহারকারীরা লগইন করতে বলা হয় যদি তারা আগে লগ ইন না করে।

নোড ফর্মের পরবর্তী পৃষ্ঠায় এগিয়ে যাওয়ার সময় সফল লগইন করার পরে, আমি এই বৈধতা ত্রুটিটি পেয়েছি:

ফর্মটি পুরানো হয়ে গেছে। নীচের ফর্মটিতে কোনও সংরক্ষিত কাজ অনুলিপি করুন এবং তারপরে এই পৃষ্ঠাটি পুনরায় লোড করুন।

আমি বুঝতে পেরেছি কারণ এটি drupal_validation_form()যাচাই করে $form['#token']এবং $form_state['values']['form_token']একই are

আমি কীভাবে এটি এড়াতে পারি, কারণ এটি একটি বিশেষ ব্যবহারের মামলা (এবং এটি কোনও বাহ্যিক স্টাফ দ্বারা জালিয়াতি নয়)।

এই ফ্রন্টে কোনও ইনপুট?


1
উত্তরের জন্য খুব দেরি হয়ে গেছে তবে আমি একই সমস্যাটি ঘটিয়েছি। আমি $ ফর্ম ["# টোকেন"] = ড্রুপাল_জেট_ টোকেন ($ ফর্ম ['# ফর্ম_আইডি']) নিয়ে একটি সমস্যা পেয়েছি; আমি আমার $ ফর্ম প্রস্তুত যখন।

1
আমি আসলে একটি পৃষ্ঠায় একটি ফর্ম হার্ড-কোডিং করেছিলাম, এবং টোকেন যুক্ত করার দরকার ছিল। যোগ <input name='form_token' type='hidden' value='<?php print drupal_get_token('MY_FORM_ID'); ?>'>করে ফর্মটি সঠিকভাবে জমা দিতে সক্ষম হয়েছিল।
থার্ডেন্ডার

উত্তর:


2

আপনার পোস্টটি আমাকে সবেমাত্র মারাত্মক দুর্দশা থেকে রক্ষা করেছে। কীভাবে সেই সংযোগটি তৈরি হয়েছিল তা বেশ জানেন না তবে আপনার পোস্ট আমাকে আমার মডিউল কোডটিতে একটি ছোট পরিবর্তন আনতে পরিচালিত করে। "ফর্মটি পুরানো হয়ে গেছে" কেন ত্রুটি এখনই ঘটছিল তা বোঝা সহজ। সুতরাং দেখুন এটি আপনার চিন্তা জাগ্রত করে এবং আপনার ক্ষেত্রে সাহায্য করতে পারে কিনা।

আমার পৃষ্ঠা অ্যাডমিন / মায়োমডের একটি মেনু আইটেম সেট আপ ছিল যা নিম্নলিখিতগুলি অন্তর্ভুক্ত করে।

'page callback' => 'drupal_get_form', 
'page arguments' => 'mymod_main',

ইন mymod_main($op = '')আমি শর্তসাপেক্ষে 2 ধরনের এক বিল্ডিং করছি কিন্তু প্রতিটি বিল্ড অবশ্যই একটি নতুন ফর্ম, যেমন হয় $build['mymod_admin'] = drupal_get_form('mymod_admin')বা $build['mymod_delete'] = drupal_get_form('mymod_delete')

পৃষ্ঠা অ্যাডমিন / মায়োমড প্রথমে লোড হওয়া এবং মায়োড_এডমিন বলা হলে কোনও সমস্যা নেই। কিন্তু যখন মায়োমড_ডমিনে তৈরি সাবমিট বাটনটি ক্লিক করা হয় তখন মায়োমড_ডিলেট কল করে এটি ফর্ম তৈরি করে। "ফর্মটি পুরানো হয়ে গেছে" ত্রুটি আসে যা ফর্ম প্রক্রিয়াজাতকরণকে নষ্ট করে দেয়। mymod_main()ফিক্সটি কেবল পৃষ্ঠা কলব্যাক হিসাবে ব্যবহার করা।

এখন ম্যানু কলব্যাক থেকে আরম্ভিক ফর্ম না থাকায় অ্যাডমিন / মায়োমড পৃষ্ঠা প্রতিটি ফর্মের জন্য পুনরায় লোড করার সময় ফর্মগুলির ক্রসিং আপ নেই $build


আপনি কি আপনার 'ফিক্স' ব্যাখ্যা করতে পারেন, আমার মনে হয় আমারও একই সমস্যা আছে তবে '---' এবং '+++' দিয়ে আপনি কী বোঝাতে চেয়েছেন তা আমি বুঝতে পারি না, ধন্যবাদ
iain maitland

এর অর্থ পৃষ্ঠা কলব্যাকটি পরিবর্তিত হয়েছিল mymod_main()
kiamlaluno

0

ত্রুটির অর্থ হল যে form_tokenপ্রয়োজনগুলি অবৈধ এবং পুনরায় জন্মানোর দরকার। এটি মূলত একটি লুকানো ফর্ম ক্ষেত্র (সাধারণত ক্রস-সাইট জালিয়াতির বিরুদ্ধে সুরক্ষার জন্য ব্যবহৃত হয়)।

সাধারণত প্রতিটি দ্রুপাল ফর্মের সাথে একটি টোকেন উপাদান স্বয়ংক্রিয়ভাবে যুক্ত হয় drupal_prepare_form(), সুতরাং আপনি নিজের কোডটি না লিখে আপনার সাধারণত নিজেকে যুক্ত করতে হবে না।

আপনি যদি কয়েকটি মাল্টি-পৃষ্ঠার ফর্মটি প্রোগ্রাম করার চেষ্টা করছেন, আপনার সম্ভবত প্রতিটি জমাতে টোকেনটি পুনরায় জেনারেট করতে হবে drupal_get_token(), যেমন এখানে দেখানো হয়েছে :

$form_state['input']['form_token'] = drupal_get_token($form['#token']);

ফর্ম_ল্টারে ফর্ম টোকেনটির পুনর্জন্মকে বাধ্য করার লক্ষ্যে নিচের উদাহরণটি দেখুন:

/**
 * Implements hook_form_alter().
 */
function mymodule_form_alter(&$form, &$form_state, $form_id) {
    if ($form_id === 'your_form_entityform_edit_form' && !empty($form_state['input']['form_id'])) {
      $form_id = $form_state['input']['form_id'];
      $form ['#token'] = $form_id;
      $form ['form_token'] = array(
        '#id' => drupal_html_id('edit-' . $form_id . '-form-token'),
        '#type' => 'token',
        '#default_value' => drupal_get_token($form['#token']),
        '#parents' => array('form_token'),
      );
    }
}

সমস্যা সমাধান

  • আপনার ফর্মটি হার্ডকোডযুক্ত না রয়েছে কিনা ডাবল পরীক্ষা করুন, অন্যথায় @ থার্ডেন্ডারের পরামর্শ অনুসারে টোকেন যুক্ত করুন :

    <input name='form_token' type='hidden' value='<?php print drupal_get_token('MY_FORM_ID'); ?>'>
  • অন্য ফর্মের (যেমন ফর্মের মধ্যে ফর্ম) যেমনটি আপনার ফর্মটিতে ত্রুটিটি ঘটেছে কিনা তা পরীক্ষা করে দেখুন।

  • ডিবাগ drupal_valid_token()
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.