سؤال

من المحتمل أن أكون سميكًا بعض الشيء ، لكن لا يمكنني العثور على إجابة على هذا. أنتقل من خادم مع سجلات تسجيل إلى واحدة مع واحد مع وجوده. إنه لأمر جيد ، لكن لسوء الحظ ، اعتدت على سنوات وسنوات من العمل مع Recordles Globals التي أدت إلى كتابة رمز قذرة. أحاول الآن إصلاح ذلك.

أحاول إعادة كتابة بعض التعليمات البرمجية القديمة التي لديها متغيرات متغيرة داخل $ _POST.

أعلم أن هذا مثال سخيف ، لكنه يوضح المشكلة التي أحاول حلها. ما يلي سيعمل مع Record Globals على:

<?php $variable = "fullname";?>
<form action="/test/" method="post">
<label for="fullname">Full Name:</label> <input name="fullname" type="text" value="<?php echo $$variable;?>" size="20" maxlength="150" />
<input name="submit" type="submit" value="Go!" />
</form>

كيف أجعل هذا العمل مع سجل Globals؟ من الواضح أن ما يلي لا يعمل:

<?php $variable = "fullname";?>
<form action="/test/" method="post">
<label for="fullname">Full Name:</label> <input name="fullname" type="text" value="<?php echo $_POST[$$variable];?>" size="20" maxlength="150" />
<input name="submit" type="submit" value="Go!" />
</form>

من فضلك اذهب بسهولة علي- أعلم أنني ربما أغبي ، لكن لا يمكنني أن أحصل على رأسي حول هذا.

هل كانت مفيدة؟

المحلول

بسيطة ، فقط $_POST[$variable]. (أو $_GET أو ربما $_REQUEST, ، حسب الاقتضاء.)

ومع ذلك ، لاحظ أنه عند إخراج النص إلى HTML ، يجب أن تشفره ، أو ستكون عرضة لهجمات النكهة عبر الموقع:

<input type="text"
    name="<?php echo htmlspecialchars($variable);?>"
    value="<?php echo htmlspecialchars($_POST[$variable]);?>" 
    size="20" maxlength="150"
/>

(عادةً ما أحدد وظيفة تسمى h هذا يفعل echo htmlspecialchars, ، لخفض هذا الكمية المفرطة من الكتابة.)

نصائح أخرى

لدي بعض التفاعلات بين الشكل المشابهة لك ولكن لا يمكنني أن أفهم لماذا تستخدم $ _post في نموذج ما. ما يجب أن يكون لديك هذا:

<?php $variable = $_POST["fullname"];?>
<form action="/test/" method="post">
<label for="fullname">Full Name:</label> <input name="fullname" type="text" value="<?php echo $variable; ?>" size="20" maxlength="150" /> 
<input name="submit" type="submit" value="Go!" />
</form>

$ _post عبارة عن صفيف ، أليس كذلك.

$_POST[$variable]

يمكنك التخلص من الكل $$ الجنون وببساطة تفعل $_POST[$variable].

أنت متأكد من أنك قصدتك $_POST[$$variable] في مقابل $_POST[$variable]

يعد استخدام المتغيرات المتغيرة مباشرة من $ _super globals فكرة سيئة ومخاطر أمان ، خاصة إذا كان أي من الكود مفتوح المصدر. يمكن للمرء تعديل المدخلات للتجول ومعرفة قيمة أي متغير تسمح به. على سبيل المثال ، يمكنهم المرور في "$ _env" والتي من شأنها أن تجعلهم تفريغًا من متغيرات البيئة الخاصة بك. في الواقع ، سجل Globals فكرة سيئة على أي حال.

يشار إلى هذا في إجابة bobince.

وفيما يتعلق بسؤالك ، لهذا السبب لا يعمل مثالك مع Globals Record's Record. PHP أكثر صرامة (لسبب وجيه) مع Off Record Global ، AFAIK ، من الصعب القيام بالخدعة المتغيرة المتغيرة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top