Re: [請益] PHP接變數問題
原po如果是考慮表單被加入額外的欄位而覆蓋原有變數的話
用extract()加prefix就可以了, 例如以下範例
<?php
$test = "my_data"; // 原有變數
extract($_POST, EXTR_PREFIX_ALL, "post");
if(isset($_POST['submit']))
{
echo $post_data; // data
echo $post_test; // hack
echo $test; // my_data
}
?>
<form method="post">
<input type="hidden" value="data" name="data">
<input type="hidden" value="hack" name="test">
<input type="submit" value="submit" name="submit">
</form>
※ 引述《tkdmaf (皮皮快跑)》之銘言:
: ※ 引述《chan15 (ChaN)》之銘言:
: : 接變數不外乎
: : $xxx = $_POST['xxx']
: : 如果變數有10幾個就要下10幾次
: : 請問各位朋友有比較便捷的寫法嗎?
: 先前有人提及用foreach做$$key = $value
: 也有提及$key的來源造成的變數異常的情況。
: 這會有安全性的問題(包含sql injetion之類的問題。)
: 這麼一來就是得要對$key做處理還有將$value所傳入的字串做安全性的判斷。
: 比如說過濾不該存在的符號,將html字碼轉成普通字元……等等的方法。
: 改一改就長成這個樣子了。如果有更好的方法請指教:
: 前一個欄位增加一個隱藏欄位表單。
: <input type="hidden" name="input_code" value="<?=md5("編碼值")?>" />
: $post = $_POST; //有人說不要將$_POST直接放入foreach處理,那就先用變數。
: 要做foreach前得先解編碼值:
: if($post["input_code"] == md5("編碼值")){
: unset($post["input_code"]); //因為不需要把他也解進變數,就刪了他。
: foreach($post as $key => $value){
: $$key = desave($value);
: }
: }else{
: 看你要幹嘛!
: }
: function desave($value){
: 看你要怎麼處理安全性,將值放入$re_value,最後:
: return $re_value;
: }
: 還有一種方式就是利用action取$get;
: <form name="xxxxx" method="post" action="xxxx.php?input_code=
: <?=md5("xxxxxx")?>">
: $post = $_POST;
: if($_GET["input_code"] == md5("xxxxxx")){
: foreach($post as $key => $value){
: $$key = $desave($value);
: }
: }else{
: 看你要幹嘛!
: }
: 因為基本上md5是無法反解的。
: 所以除非對方能猜到你md5給的值不然就一定無法通過程式判斷。
: 這樣多少可稍微避免外來的侵害。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.96.83.220
討論串 (同標題文章)
PHP 近期熱門文章
PTT數位生活區 即時熱門文章