摘要:用php制作動態web頁面時,在提交服務器之前,讓php根據用戶在當前頁面上錄入的某字段的值立即從數據庫中取出相關的其它字段的值並顯示到當前頁面上,是php程序開發中的難點。本文以一個具體實例詳細介紹了怎樣將兩個html內嵌式語言php和javascript巧妙結合起來,解決這個難點的具體方法。
關鍵詞:php、動態、html。
現在的網站已經從以前提供靜態信息的形式發展到交互式的提供動態信息業務的方式。web的信息服務形式可以概括為兩點:向客戶提供信息;記錄客戶提交的信息。要提供這兩種服務,需解決的問題是:如何快速地讓用戶在自己網站大量的信息中快速提取他想要的信息,如何有效地記錄用戶提交的信息,以便於將來用戶查找。這些問題都可以通過在網站中加入數據庫支持來解決。
因php對多種數據庫都能提供良好的支持,且php的腳本直接嵌入在html文檔中,使用非常方便。因此php是現在internet上最流行的一種server端嵌入語言之一。另外,與其它的server端腳本語言如asp相比,php免費開放源碼並且提供跨平台的支持,這使它能夠輕易適應當今網絡中各種異質的網絡環境;可讓網頁制作人員能夠非常快捷、方便地制作出功能強大的動態web頁面。但是,由於php是服務器端嵌入,更直觀的理解是php語句是在服務器上執行,所以它只有提交時才將當前頁面上的內容接收和處理。而當你需要的內容是根據客戶當前頁面上錄入的某字段的值,再動態到庫中提取時,php就無能為力了。例如:要向客戶提供一個“訂貨合同”的錄入頁面,其中包含一些“供貨商信息”的錄入,而各供貨商的詳細信息事先已在一個“商家”字典表中錄入,現在要求當客戶在當前頁面上選中某“供貨商”時,立時從“商家”字典表中將該供貨商的某些信息如“開戶行、帳號、地址、電話”等提取出來顯示到當前頁面上供客戶直接使用或修改使用。這樣的要求若用可視化編程語言如pb、vb等實現是一件輕而易舉的事,但pb、vb不適合編寫動態web頁面;php適合編寫動態web頁面,但由於是服務器端嵌入,不能及時獲得提交前頁面上的變量值,所以實現上述要求就有一定的難度。在程序編寫過程中,我將php與javascript巧妙結合起來,解決了這個難點。
我們知道,同樣是嵌入語句,但是javascript 又不同於php語言。因為php是服務器端嵌入,而javascript是客戶端嵌入,既javascript語句是在客戶的浏覽器上執行,這就決定了javascript可及時獲得當前頁面上的變量值,但又無法對服務器端的數據庫直接操作。所以,將二者結合起來制作出功能強大的動態web頁面,可謂是珠聯璧合。為了敘述方便,下面只以從字典表中取出選中供貨商的地址為例,說明具體做法。當需要取出多個字段時,方法類似,但利用javascript函數從字符串中逐個取出時,要細心一些。
1.編寫一個php函數
此函數的功能是將所有符合條件的“供貨商信息”從“商家”字典表中取出,並存放到一個字符串變量$khsz中。
function khqk_tq($questr){
global $dbconn;
$dbq_resl=sybase_query($questr,$dbconn); //送出一個query字符串供sybase執行。
$dbq_rows=sybase_num_rows($dbq_resl); //獲得返回行的數目。
$j=0;
for ($i=0;$i<$dbq_rows;$i++){ //建循環,將每行中所需字段取出,並放到數組$k[]中。
$k[]=sybase_result($dbq_resl,$i,"kh_id"); //取出用戶選擇的供貨商編號。
$add=sybase_result($dbq_resl,$i,"address"); //取出該供貨商地址。
if ($add==""):
$k[]="無";
else :
$k[]=sybase_result($dbq_resl,$i,"address");
endif;
$khsz=$khsz.$k[$j]."|".$k[$j+1]."|"; //將各字段值以”|”為分隔符,連接到變量$khsz 中,形成一個長字符串。
$j=$j+2;
}
return $khsz;
}
2.編寫一個javascript函數
該函數的功能是從字符串中根據kh_id值找到該供貨商的地址,嵌入到html文件中。
<script language="javascript">
var khstr="<?=$k?>" //先將php變量轉變成javascript變量khstr。
function khxz_onclick(){
frm=document.frmplanfill;
ghstj=frm.kh_id.value; //獲得當前頁面上剛剛選中的“供貨商”的kh_id值。
numkh=khstr.indexof(ghstj,0) ; //從khstr串中找到該kh_id值所在的位置。
addr=khstr.substring(khstr.indexof("|",numkh)+1,khstr.indexof("|",khstr.indexof("|",numkh)+1)); //從 khstr串中取出與kh_id對應的地址字段的值。
frm.address.value=addr; //將取出的值賦給當前錄入頁面上的字段變量address。
}
</script>
3.在html中將二者結合起來,互為所用
$khinfo="select kh_id,address from kh where co_id=$s_coid and type='g' order by kh_id";
//將取供貨商信息的sql語句放到變量$khinfo中。
$k=khqk_tq($khinfo); //調用php函數,並將返回的字符串值放到變量$k中。
<meta name="generator" content="microsoft developer studio">
<meta http-equiv="content-type" content="text/html; charset=gb_2312-80">
<title>訂貨合同管理</title>
</head>
<body style="background-color: ivory">
<form name=frmplanfill method=post action="dhht_crt.php">
<table align=center border=1 cellpadding=0 cellspacing=0 width="90%" style="font-size: 10pt">
<tr>
<td>合同編號</td><td><input name=htbh size=15></td>
<td>合同概述</td><td colspan=5><input name=htgs size=53></td>
</tr>
<tr>
<td>供貨廠商</td>
<td><select name="kh_id" onchange="khxz_onclick()"> //當每次改變所選供貨商時,觸發上述javascript函數。
<?prt_sele("select convert(int,kh_id),name from kh where co_id=$s_coid and type='g'",0,1)?></select></td> //將符合條件的所有供貨商名稱放到下拉列表框中供用戶選擇。其中prt_sele是自定義的 php函數。
<td>地 址</td>
<td colspan=3><input type=text name=address size=34 ></td> //觸發javascript函數的結果是使得adrress變量獲得值並顯示到頁面上。
以上代碼的系統環境是:linux操作系統、sybase數據庫、web server為apache、php4程序界面。以上將php和javascript相結合的程序開發思想已成功地運用到我們開發的多個動態web頁面中。