পিএইচপি ত্রুটি বার্তা "বিজ্ঞপ্তি: অপরিজ্ঞাত ধ্রুবক ব্যবহার" এর অর্থ কী?


163

পিএইচপি লগগুলিতে এই ত্রুটিটি লিখছে: "বিজ্ঞপ্তি: সংজ্ঞায়িত ধ্রুবক ব্যবহার"।

লগগুলিতে ত্রুটি:

PHP Notice:  Use of undefined constant department - assumed 'department' (line 5)
PHP Notice:  Use of undefined constant name - assumed 'name' (line 6)
PHP Notice:  Use of undefined constant email - assumed 'email' (line 7)
PHP Notice:  Use of undefined constant message - assumed 'message' (line 8)

কোডের প্রাসঙ্গিক লাইন:

$department = mysql_real_escape_string($_POST[department]);
$name = mysql_real_escape_string($_POST[name]);
$email = mysql_real_escape_string($_POST[email]);
$message = mysql_real_escape_string($_POST[message]);

এর অর্থ কী এবং আমি কেন এটি দেখছি?

উত্তর:


217

আপনার অ্যারে কীগুলি উদ্ধৃত করা উচিত:

$department = mysql_real_escape_string($_POST['department']);
$name = mysql_real_escape_string($_POST['name']);
$email = mysql_real_escape_string($_POST['email']);
$message = mysql_real_escape_string($_POST['message']);

হিসাবে, এটা ধ্রুবক বলা খুঁজছেন ছিল department, name, email, message, ইত্যাদি যখন এটি যেমন একটি ধ্রুবক খুঁজে নেই, পিএইচপি (bizarrely) এটি একটি স্ট্রিং ( 'বিভাগের', ইত্যাদি) হিসাবে ব্যাখ্যা করে। স্পষ্টতই, আপনি যদি এইরকম ধ্রুবককে পরে সংজ্ঞায়িত করেন তবে এটি সহজেই ভেঙে যেতে পারে (যদিও এটি নিম্নতর ক্ষেত্রে স্থির হওয়া খারাপ স্টাইল)।


এটি কি _P _POST ভেরিয়েবলের কথা উল্লেখ করছে?
নিক

3
@Col। Shrapnel, যখন আমি বললাম যে কেবল অ্যারে কীগুলি উদ্ধৃত করা দরকার? তাকে কীগুলি উদ্ধৃত করার দরকার নেই, তবে কেবল সেগুলি নয়।
ম্যাথু ফ্ল্যাশেন

1
আমি বলতে চাইছি অ্যারের কীগুলি উদ্ধৃত করার দরকার নেই । একটি অ্যারে কী না, স্ট্রিং উদ্ধৃত করতে হবে। একটি কী জন্য বিশেষ উদ্ধৃতি প্রয়োজন হয় না।
আপনার সাধারণ জ্ঞান

4
এটি "উদ্ভট" নয় ... এটি "পিছনে সামঞ্জস্যপূর্ণ"। পিএইচপি মূলত অনুমোদিত এবং এমনকি কী হিসাবে অনাবৃত স্ট্রিংগুলি ব্যবহার করে প্রচারিত। (ঠিক আছে, সম্ভবত এটি এখনও "উদ্ভট"। :-)
ব্রায়ান হোয়াইট

1
@ ব্রায়ানহাইট ফান ফ্যাক্ট, যখন এই কার্যকারিতাটি হ্রাস করার প্রস্তাব দেওয়ার সময় আমি কোনও প্রমাণ পাইনি যে এটি কখনও সরকারীভাবে উত্সাহিত হয়েছিল এবং পিএইচপি 3.0 এর কেবল বিটা প্রকাশে নোটিশ ছাড়াই আচরণ অন্তর্ভুক্ত ছিল, সুতরাং এটি এমন কোনও বৈশিষ্ট্যের সাথে পিছনে সামঞ্জস্যপূর্ণ বলে মনে হয় কখনও মুক্তি দেওয়া হয়নি। যাইহোক, এটি পিএইচপি 8.0 এ চলে যাবে, যখনই এটি বরাবর আসে।
আইএমএসওপি

77

ত্রুটি বার্তাটি দুর্ভাগ্যজনক কারণে যে পিএইচপি সুস্পষ্টভাবে একই নামের ধ্রুব স্ট্রিং হিসাবে একটি অজানা টোকেনকে ঘোষণা করবে।

এটি, এটি এটি ব্যাখ্যা করার চেষ্টা করছে (অনুপস্থিত উদ্ধৃতি চিহ্নগুলি নোট করুন):

$_POST[department]

পিএইচপি-তে এটি বৈধ সিনট্যাক্স হওয়ার একমাত্র বৈধ উপায় হ'ল যদি এর আগে ধ্রুবক departmentসংজ্ঞা দেওয়া হত । অত্যন্ত দুঃখের বিষয়, এই মুহুর্তে মারাত্মক ত্রুটির সাথে মারা যাওয়ার পরিবর্তে এটি এই নোটিশটি জারি করে এবং কাজ করে যেমন একটি ধ্রুবককে একই নাম এবং মান দিয়ে সংজ্ঞায়িত করা হয়েছিল:

// Implicit declaration of constant called department with value 'department'
define('department', 'department');  

আপনি এই ত্রুটি বার্তাটি পেতে বিভিন্ন উপায়ে থাকতে পারেন তবে তাদের সকলেরই মূল কারণ রয়েছে - একটি টোকেন যা একটি ধ্রুবক হতে পারে।

স্ট্রিংসের অনুপস্থিত উদ্ধৃতি: $my_array[bad_key]

আপনার ক্ষেত্রে সমস্যাটি এটিই and কারণ আপনার কাছে স্ট্রিং অ্যারে কীগুলি পাওয়া গেছে যা উদ্ধৃত হয়নি। স্ট্রিং কীগুলি ঠিক করা বাগটি ঠিক করবে:

পরিবর্তন:

$department = mysql_real_escape_string($_POST[department]);
...(etc)...

প্রতি:

$department = mysql_real_escape_string($_POST['department']);
...(etc)...

পরিবর্তনশীল অনুপস্থিত ডলার সাইন: var_without_dollar

আপনি এই ত্রুটি বার্তাটি দেখতে পাবার আর একটি কারণ হ'ল যদি আপনি $কোনও ভেরিয়েবল বা $this->কোনও সদস্যের কাছ থেকে বাদ দেন। উদাহরণস্বরূপ, নিম্নলিখিত যে কোনও একটি অনুরূপ ত্রুটি বার্তা সৃষ্টি করতে পারে:

my_local;   // should be $my_local
my_member;  // should be $this->my_member

চলক নামে অবৈধ অক্ষর: $bad-variable-name

অনুরূপ তবে আরও সূক্ষ্ম ইস্যুটির ফলস্বরূপ যদি আপনি একটি চলক নামে একটি নিষ্ক্রিয় চরিত্রটি ব্যবহার করার চেষ্টা করেন - -আন্ডারস্কোরের পরিবর্তে হাইফেন ( ) _একটি সাধারণ ক্ষেত্রে হয়ে থাকে।

উদাহরণস্বরূপ, এটি ঠিক আছে, যেহেতু আন্ডারস্কোর পরিবর্তনশীল নামের অনুমতি দেওয়া হয় :

if (123 === $my_var) {
  do_something();
}

তবে এটি নয়:

if (123 === $my-var) {
  do_something();
}

এটি এর মতোই ব্যাখ্যা করা হবে:

if (123 === $my - var) {  // variable $my minus constant 'var'
  do_something();
}

শ্রেণীর ক্ষেত্র উল্লেখ না করে একটি শ্রেণির ধ্রুবককে উল্লেখ করা

কোনও ক্লাস ধ্রুবককে উল্লেখ করার জন্য আপনাকে ক্লাসের ক্ষেত্রটি নির্দিষ্ট করতে হবে ::, আপনি যদি এই মিস করেন তবে পিএইচপি ভাববে আপনি কোনও বিশ্বব্যাপী কথা বলছেন define()

উদাহরণ:

class MyClass {
  const MY_CONST = 123;

  public function my_method() {
    return self::MY_CONST;  // This is fine
  }


  public function my_method() {
    return MyClass::MY_CONST;  // This is fine
  }

  public function my_bad_method() {
    return MY_CONST;  // BUG - need to specify class scope
  }
}

একটি ধ্রুবক ব্যবহার করে যা পিএইচপি-র এই সংস্করণে সংজ্ঞায়িত হয় না বা ইনস্টল না হওয়া কোনও এক্সটেনশনে সংজ্ঞায়িত হয়

কিছু সিস্টেম-সংজ্ঞায়িত ধ্রুবক রয়েছে যা কেবলমাত্র পিএইচপি এর নতুন সংস্করণগুলিতে বিদ্যমান, উদাহরণস্বরূপ মোড বিকল্প ধ্রুবক round()যেমন PHP_ROUND_HALF_DOWNকেবলমাত্র পিএইচপি 5.3 বা তার পরে বিদ্যমান থাকে।

সুতরাং আপনি যদি এই বৈশিষ্ট্যটি পিএইচপি 5.2 এ ব্যবহার করার চেষ্টা করেন, বলুন:

$rounded = round($my_var, 0, PHP_ROUND_HALF_DOWN);

আপনি এই ত্রুটি বার্তাটি পাবেন:

অপরিজ্ঞাত ধ্রুবক ব্যবহার PHP_ROUND_HALF_DOWN - ধরে নেওয়া 'PHP_ROUND_HALF_DOWN' সতর্কতা (2): রাউন্ডের জন্য ভুল পরামিতি গণনা ()


শেয়ার করার জন্য ধন্যবাদ. আমি self::অংশটি মিস করেছি । এটা এখন কাজ করছে.
moreirapontocom

কোনও সন্দেহ ছাড়াই, এই উত্তরটি অন্যের তুলনায় আরও ব্যাপক এবং সেরা উত্তরের ব্যাজটির দাবিদার! আমি খুব ক্লাস স্কোপ মিস করলাম এবং ভবিষ্যতের জন্য কিছু মূল্যবান তথ্য পেয়ে শেষ হলাম। ধন্যবাদ, জন!
হরিশ এসটি

6

আপনি সম্ভবত ব্যবহার করতে ভুলে গেছেন ""

উদাহরণ স্বরূপ:

$_array[text] = $_var;

পরিবর্তন:

$_array["text"] = $_var;


1

পোস্ট ভেরিয়েবলগুলি ব্যবহারের সঠিক উপায় হ'ল

<?php

$department = $_POST['department'];

?>

একক উদ্ধৃতি (') ব্যবহার করুন


1
<?php 
  ${test}="test information";
  echo $test;
?>

বিজ্ঞপ্তি: অপরিজ্ঞাত ধ্রুবক পরীক্ষার ব্যবহার - D: am xampp \ htdocs \ sp \ test \ envoirnmentVariables.php লাইন 3 পরীক্ষার তথ্যের উপর 'পরীক্ষা' ধরে নেওয়া


1

একক উদ্ধৃতি .োকান।

উদাহরণ

$department = mysql_real_escape_string($_POST['department']);
$name = mysql_real_escape_string($_POST['name']);
$email = mysql_real_escape_string($_POST['email']);
$message = mysql_real_escape_string($_POST['message']); 

0

কোড ইগনিটার ব্যবহার করে আমি কোনও পার্থক্য রয়েছে কিনা তা নিশ্চিত নই এবং আমি নামগুলির জন্য "" ব্যবহার করি এবং এটি দুর্দান্ত কাজ করে।

$department = mysql_real_escape_string($_POST["department"]);
$name = mysql_real_escape_string($_POST["name"]);
$email = mysql_real_escape_string($_POST["email"]);
$message = mysql_real_escape_string($_POST["message"]);

শুভেচ্ছান্তে,

হোর্হে।


1
এক্ষেত্রে একক এবং ডাবল উদ্ধৃতিগুলির মধ্যে কোনও পার্থক্য নেই।
রবি অ্যাভেরিল

1
@ রবিবিএভারিল এই ক্ষেত্রে আসলে তেমনটি নেই - একক উদ্ধৃত স্ট্রিংগুলি যেমনটি দেখায় সেখানে ডাবল উদ্ধৃতি স্ট্রিংগুলি পলায়নের অক্ষরগুলিকে বিশ্লেষণ করবে এবং ভেরিয়েবলগুলি মূল্যায়ন করবে এই দৃশ্যে একক উদ্ধৃত স্ট্রিংগুলি ব্যবহার করা ভাল স্টাইল style
ফ্রাঙ্কি

0

দেখে মনে হচ্ছে পূর্বনির্ধারিত আনার ধ্রুবকগুলি মাইএসকিউএল এক্সটেনশান দিয়ে চলে গেছে, সুতরাং প্রথম ফাংশনের আগে আমাদের সেগুলি যুক্ত করা দরকার ...

// পূর্বনির্ধারিত আনার ধ্রুবক

define('MYSQL_BOTH',MYSQLI_BOTH);
define('MYSQL_NUM',MYSQLI_NUM);
define('MYSQL_ASSOC',MYSQLI_ASSOC);

আমি পরীক্ষা এবং সফল।

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