iT邦幫忙

0

php隱藏網址中get變數!!!

php
小哈 2017-02-18 11:46:2711680 瀏覽
  • 分享至 

  • xImage

Dear 前輩們~
我有一個小的問題要提問,要怎麼把php get變數傳到下一個網頁中,顯示不要秀出變數呢?
是否能請IT前輩,稍微提示小弟...
麻煩大大ˊˋ
http://127.0.0.1/search_assess_page.php?workno=xxx&department=xxx&cname=xxx&ename=xxx&season=xxx

送你一個關鍵字,可以查到很多
『URL rewrite』
louischou iT邦新手 4 級 ‧ 2017-02-18 15:01:19 檢舉
URL rewrite 是不錯啦,不過看樓上那get的數量真的太多了,或許還是post或部份放session比較實際?畢竟網址長度還是有物理限制
pratnket iT邦新手 5 級 ‧ 2017-02-19 14:11:25 檢舉
下方我的方法你再用看看
幫你包成函式了...
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
3
海綿寶寶
iT邦大神 1 級 ‧ 2017-02-18 11:50:03

改用POST

看更多先前的回應...收起先前的回應...
小哈 iT邦新手 4 級 ‧ 2017-02-18 12:08:11 檢舉

海綿大,因為有別需求,會看到網址上的資訊...
才臨時改需求...

之前是用您的方法處理,想說把它隱藏掉ˊˋ

<table width="900" border="3">
   <tr>
    <td align="center">工號</td>
    <td align="center">部門</td>
    <td align="center">中文姓名</td>
    <td align="center">英文姓名</td>
    <td align="center">考核區間</td>
    <td align="center">工作態度</td>
    <td align="center">工作績效</td>
    <td align="center">工作品質</td>
    <td align="center">本職技能</td>
    <td align="center">總分</td>
	<td align="center">等第</td>
	<td align="center">表單</td>

	
  </tr>
<?php



  for($i=1;$i<=mysql_num_rows($data);$i++){
$rs=mysql_fetch_row($data);

?>

  <tr>
    <td align="center"><?php echo $rs[0]?></td>
    <td align="center"><?php echo $rs[1]?></td>
    <td align="center"><?php echo $rs[2]?></td>
    <td align="center"><?php echo $rs[3]?></td>
    <td align="center"><?php echo $rs[4]?></td>
    <td align="center"><?php echo $rs[5]?></td>
    <td align="center"><?php echo $rs[6]?></td>
    <td align="center"><?php echo $rs[7]?></td>
    <td align="center"><?php echo $rs[8]?></td>
    <td align="center"><?php echo $rs[9]?></td>
	<td align="center"><?php echo $rs[10]?></td>
	<td align="center"><?php echo '<input type="button" name="id" value="Form" onclick=window.open("search_assess_page.php?workno='.$rs[0].'&department='.$rs[1].'&cname='.$rs[2].'&ename='.$rs[3].'&season='.$rs[4].'")>'?></td>
  </tr>



<?php
}
?>
fillano iT邦超人 1 級 ‧ 2017-02-18 12:56:04 檢舉

...你知道在html中怎樣送出表單嗎?

小哈 iT邦新手 4 級 ‧ 2017-02-18 13:15:29 檢舉

fillano大大,當然阿...
上面還有CODE,只是我是以按鈕的方式去連接變數到下一頁

fillano iT邦超人 1 級 ‧ 2017-02-18 14:24:57 檢舉

你知道<form>嗎?

https://www.w3schools.com/tags/ref_httpmethods.asp

GET requests should never be used when dealing with sensitive data

0
allenlwh
iT邦高手 1 級 ‧ 2017-02-18 12:46:54

使用Base64編碼後,
workno=xxx&department=xxx&cname=xxx&ename=xxx&season=xxx就成為
d29ya25vPXh4eCZkZXBhcnRtZW50PXh4eCZjbmFtZT14eHgmZW5hbWU9eHh4JnNlYXNvbj14eHg=

https://www.base64encode.org/

pratnket iT邦新手 5 級 ‧ 2017-02-19 00:55:09 檢舉

可以包成 Json 或 Get 到本頁 class 處理 return 在轉到你要的頁面

0
pratnket
iT邦新手 5 級 ‧ 2017-02-19 01:02:17

你要GET的頁面
search_assess_page.php

給你思維
A頁
*
index.php
*
Get 變數 -> A頁 -> 處理成陣列 -> 函式傳遞

函式概念 ->Echo 做出假的網頁-> 去轉址 -> 補充:如不想理解就直接套用程式碼

直接給你 函式 與 範例

範例說明

index.php
//假設參數
$_GET['name'] = "八雲橙" ;
$_GET['money'] = 100 ;

轉換陣列
$form_array = array(
'sc_idn' => $_GET['name'],
'sc_money' => $_GET['money'],
);
目標頁面
$TargetPage = "index2.php" ;

陣列POST
Form_Post ($form_array,$TargetPage)
參數1 : 要POST的陣列
參數2 : 目標位置, 為網址

B頁
*
search_assess_page.php
*

search_assess_page.php
//測試接收數值
print_r($_POST);

程式碼

<?php include("DB.php") ?>

 <?php 
	
	//假設參數
	$_GET['name'] = "八雲橙" ;
	$_GET['money'] = 100 ;
	
	//轉換陣列	
	$form_array = array(
		'sc_idn'  => $_GET['name'],
		'sc_money' 	=> $_GET['money'],
	);	
	//目標頁面
	$TargetPage = "search_assess_page.php" ;
	
	/**
	 * //陣列POST
	 * Form_Post ($form_array,$TargetPage)
	 * 		參數1 : 要POST的陣列
	 * 		參數2 : 目標位置, 為網址
	 * 
	 **/
	 
	function Form_Post ($form_array,$TargetPage) {
		echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
			<html xmlns="http://www.w3.org/1999/xhtml">
			<head>
			<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
			<title>POST</title>
			<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
			<script>
				$(function () {
					$("#BankForm").submit();
					return false;
				}) ;
			</script>
			</head>
			<body style="background: white;">' ;
		echo '<form id="BankForm" method="POST" action=' . $TargetPage . '>' ;
				
			$html_code = '' ;
			foreach ($form_array as $key => $val) {
				$html_code .= "<input type='hidden' name='" . $key . "' value='" . $val . "'><BR>";
			}
			echo $html_code ;
			
		echo '</form></body></html>' ;
	}	

	Form_Post($form_array,$TargetPage);
 ?> 

看更多先前的回應...收起先前的回應...

名稱首字大寫一般是用在class名稱才這樣用。
定函式名要不就以底線做為區隔的全小寫。
要不就是駝峰式的第一單字小寫,第二單字起字首大寫。
例:

//建議
class Demo {

}

//不建議
class demo {

}
//建議
function demo(){

}
//不建議

function Demo(){

}
//建議
function foo_name(){

}
//建議
function fooName(){

}

//不建議
function Foo_Name(){

}

//不建議
function foo_Name(){

}
//建議
echo 'Hello';

//不建議
Echo 'Hello';
//建議
define(PI,3.14);

//不建議
define(pi,3.14);

以上的不建議雖然不會出錯,但是在跟別人參考及維護時
會造成困擾。

另外,不要直接echo html以及js,尤其是一整段的。
因為這樣根本無法維護html和其中的js。
可以研究一下template的載入方式,可以減輕開發的問題。

pratnket iT邦新手 5 級 ‧ 2017-02-20 20:09:51 檢舉

我們公司的網頁繼承了4代
前2代是美工...

那我這些都不能用了阿~_~...
修改如下...

	function MessageRedirect($Message,$TargetPage) {
		$Page = 'window.location = \'' . $TargetPage . '\' ;' ;
		if ($TargetPage == "back" || $TargetPage == "return") $Page = 'if (history.length > 1) history.back(-1) ; else window.location = "' . URL . '" ;' ;
		if ($TargetPage == "close") $Page = 'window.close() ;' ;
		if ($TargetPage == "reflash" || $TargetPage == "reload") $Page = 'window.location.reload() ;' ;
		
		//方式 1
		
		  $msg = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">'; 
		  $msg .= '<html xmlns="http://www.w3.org/1999/xhtml">'; 
		  $msg .= '<head>'; 
		  $msg .= '<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />'; 
		  $msg .= '<title>訊息</title>'; 
		  $msg .= '<script type="text/javascript">'; 
		  $msg .= $Page ; 
		  $msg .= 'alert(\'' . $Message . '\')' ; 
		  $msg .= '</script>'; 
		  $msg .= '</head>'; 
		  $msg .= '<body style="background: white;">&nbsp;</body>'; 
		  $msg .= '</html>'; 
		
		echo $msg ;
		
		exit() ;
	}
	
	MessageRedirect("我要轉頁了","index2.php");

與其說不能用,不如說是混亂吧!
你都不覺得你這個維護起來超級累人?
另外,有一種東西叫做「重構」
基本原則是:在不改變外觀功能上進行程式碼的改善,讓耦合性降低,可維護性變高。
沒有要你一次來個大改。但可以一步一步慢慢的去改善他。
還有,做為一個工程師,你有權力抱怨前人留下來的債。
但你沒有權力讓這個債留給後人。
如果你100%確定你的東西會「絕子絕孫」。

pratnket iT邦新手 5 級 ‧ 2017-02-20 22:56:50 檢舉

因為老闆不懂...我其實是美工入職

確實很有可能會絕後唷...

下任可能是美工...

那就叫你老闆乖乖的請一個工程師吧!

pratnket iT邦新手 5 級 ‧ 2017-02-20 23:15:43 檢舉

Samと可樂快跑 大大
$msg 一次一行哩= =...
還是要完全避開 echo html code阿?

pratnket iT邦新手 5 級 ‧ 2017-02-20 23:16:21 檢舉

他工程師 只會請22K吧...
他當初網頁就只請外包 3萬解決...

pratnket iT邦新手 5 級 ‧ 2017-02-20 23:18:52 檢舉

後來想要重做
外面公司報價 15萬 嗯...他當然不要

pratnket iT邦新手 5 級 ‧ 2017-02-20 23:20:59 檢舉

沒事不要隨便發現我!
我要低調!
不然某隻老鷹會飛下來……

pratnket iT邦新手 5 級 ‧ 2017-02-21 00:10:56 檢舉

好吧...
http://m.jb51.net/article/30065.htm
重構文章...
雖然可能我沒時間重構...

工作 = new 老闆 ;

老闆要求公做
工作->開發新網頁->Banner->拍照->攝影

工作->工作日誌->優化代碼->NG

工作->老闆詢問->MSG(程式不是可以跑嗎)...

嗯...好 我瘋了 XD

好吧!我送你一個東西好了。
View.php

class View {
    
    static function cache($filename,$param = []){
        return View::_match_view($filename, $param);
    }
    
    static function display($filename,$param = []){
        echo View::_match_view($filename, $param);
    }
    
    static private function _match_view($filename,$param){
        ob_start();
        extract($param);
        include($filename.'.php');
        $buffer = ob_get_contents();
        ob_end_clean();
        return $buffer;
    }
    
}

用法:
主程式檔名:mypage.php

<?php
require_once('View.php');
$array = ['name'=>'老鷹不會飛'];
View::display('mydemo',$array);

方法:
cache() => 區段頁面暫不顯示時使用,會將頁面回傳,可以用變數接。
display() => 將頁面顯示出來
參數:
第一個參數是主檔名,不用給副檔名,但副檔名必須是.php
第二個參數是你要傳到畫面的「變數」,基本上是以陣列型態載入。
但是到了顯示的畫面會變成變數。以上面的例子:

$array = ['name'=>'老鷹不會飛'];

事實上到了view的檔案會變成

$name

下面是view檔的範例:
檔名:mydemo.php

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
       <?=$name?>
    </body>
</html>

我認為光是這樣的東西就可以很大的程度解決你畫面跟程式碼可以分離的問題。
這其實是很多framework的樣板的設計基礎。

pratnket iT邦新手 5 級 ‧ 2017-02-21 00:26:53 檢舉

感謝大大~~
我的程式寫的很亂阿...
我只能說 我接手時就是地獄了
現在大概更地獄了就是了...

你就先就我給你的東西開始先分離你的程式碼跟顯示端吧!
而且樣板跟程式碼分離的話對你使用編輯器的highlight顯示也有好處。
這樣子你要在裡頭編輯javascript也比較容易看了。
(還有css什麼一堆…反正你就當他是html樣板就對了。)

是說我給你的範例如果你有測試過一次。
應該就會感受到程式碼跟顯示端分離的好處……
也就可以感受到View.php這個物件的強大之處(想不到這種東西的code沒幾行吧!)

pratnket iT邦新手 5 級 ‧ 2017-02-21 00:42:41 檢舉

原來我理解錯誤~~我懂了

你是怎麼搞得會出現記憶體的錯誤?
我想說我怎麼試都沒發生這種事。

pratnket iT邦新手 5 級 ‧ 2017-02-21 02:50:51 檢舉

View 好像不能跑 多維陣列唷?

Array ( [0] => Array ( [blog_idn] => 9 [blog_title] => 文章標題2 [blog_job_title] => 生活家 [blog_name] => 范雅棻 [blog_main_id] => 58 [blog_product] => 112 [blog_product_name] => 耐曬P防曬冰霧SPF50★★ [blog_synopsis] => 延展質地非常好用用量很省!聞起來有淡淡自然的香氣,能撫平眼袋 [blog_content] =>
456
[blog_content2] =>
789
[blog_buildtime] => 2017-02-16 13:38:57 [blog_updatetime] => 2017-02-18 10:18:32 [blog_ishidden] => 0 [blog_istop] => 0 [blog_keyword] => [blog_brief] => [blog_img] => [blog_visitornum] => 0 [blog_sort] => 1 [blog_lang] => TW [blog_date] => [blog_target] => _self [blog_type] => 0 [blog_istrash] => 0 [blog_link] => http://vanessafan.pixnet.net/blog [blog_dsp_type] => 0 [blog_file] => [blog_promote] => [blog_title_en] => ) [1] => Array ( [blog_idn] => 10 [blog_title] => 文章標題3 [blog_job_title] => 人氣部落客 [blog_name] => Nana Chiao [blog_main_id] => 58 [blog_product] => 112 [blog_product_name] => 耐曬P防曬冰霧SPF50★★ [blog_synopsis] => [blog_content] =>
超人氣

重複的名稱

pratnket iT邦新手 5 級 ‧ 2017-02-21 02:54:05 檢舉

其實我們後台網頁
構成:

index.php
indexList.php
indexEdit.php
	$SCRIPTNAME = basename(__FILE__, ".php") ;
	
	//共用樣板路徑
	$GLOBAL_TEMPLATE_PATH = BASE_PATH . ADMIN_DIR . 'Sys_Global' . DIRECTORY_SEPARATOR ;
	//編輯頁面
	$EDITOR_PAGE = $SCRIPTNAME . 'Edit.php' ;
	//列表頁面
	$LIST_PAGE = $SCRIPTNAME . 'List.php' ;

顯示方式:
if ($_GET['a'] == "edit") {

}

if ($_GET['a'] == "save") {

}
//列表
} else {

也是分開的

前台網頁

	$SQL = "SELECT * FROM test WHERE 1 " ;
	$test = $DB->query($SQL, 1) ;
    $TablePreFix = "n_" ;

($SQL, 1)
1 = 取出一筆 ;
$test = $DB->query($SQL, 1) ;
印出
echo $test['n_idn'];
($SQL, 2)
2 = 陣列
$array = $DB->query($SQL, 1) ;
foreach ($array as $value){
    echo $value['n_idn'];
}
pratnket iT邦新手 5 級 ‧ 2017-02-21 03:03:42 檢舉

因為要跑陣列 要完全隔離開 我還真的不太會就是了...
3點了...明天在研究

View怎麼可能會不能跑多維?我試都正常的說。
你這個記憶體超出的問題該不會是你的陣列太過龐大吧!
而且當中的extract(),他只會解「第一維陣列」
不過你不要誤解成「不能解多維陣列」
所謂解「第一維」就是會把第一維的key變成變數。
(也就是說,原本的第二維會變成第一維,第三維就會變成第二維,以此類推)
舉例:
原本結構是這樣。

$array = [
    'result' => [
        ['name' => 'Sam','address' => 'Taipei'],
        ['name' => 'eagle','address' => 'Taipei'],
        ['name' => 'fillano','address' => 'Taipei']
    ]   
];

把$array放進extract()後
其實就是變成了下面這樣

$result = [
        ['name' => 'Sam','address' => 'Taipei'],
        ['name' => 'eagle','address' => 'Taipei'],
        ['name' => 'fillano','address' => 'Taipei']
    ];

那你可能想說:一開始就寫下面的$result不就好了?
這部份你可以測看看我那個view的變數作用域
你會發現我這樣設置經過extract()解譯的變數有效果作域只有在
_match_view()才有效(區域變數)
也就是說這樣做的話就不會和主程式的變數發生「衝突」。
但也是告訴你,所有要進到view的變數就必須經過陣列放進view才行。

pratnket iT邦新手 5 級 ‧ 2017-02-21 11:31:27 檢舉

假設數值 'name' => 'Sam'

恩0.0...
extract()
陣列的key=>value
變成
$name
輸出
Sam

因為我放2維進去

$array = ['name' => 'Sam','address' => 'Taipei']

echo extract($array) ;
輸出2

$array = [0]['name' => 'Sam','address' => 'Taipei'];
echo extract($array) ;
輸出0

之前寫習慣了 物件導向->轉陣列->FOR印出= =

恩...我回家再研究看看

pratnket iT邦新手 5 級 ‧ 2017-02-21 11:58:40 檢舉

可樂大大
AE如何去除 動態 白色產品
場景也是白色的...

pratnket iT邦新手 5 級 ‧ 2017-02-21 11:59:21 檢舉

前面有透明杯蓋 要我把產品放大2倍...

你問這問題是在問作圖吧………我不是專業美工的說。

我要發表回答

立即登入回答