培養會使用網頁與伺服器做事的人,即結合網際網路前後端的技術,達成以下目的:
使用《PHP,MySQL,AJAX,網頁設計範例教本》為參考書,旗標出版,學員請自備,向圖書館借用也行。
<meta http-equiv='content-type' content='text/html;charset=UTF-8' /> <form action='r.php'> 姓名:<input type='text' name='姓名' value='丁志仁' /><br/> email:<input type='text' name='email' value='alledu2@gmail.com' /><br/> 電話:<input type='text' name='phone' value='0987466665' /><br/> <input type='submit' value='送出' /> </form>
<?php $connect=mysql_connect('localhost','assistant','××××××××'); mysql_select_db('助理們'); mysql_query("insert into web set 姓名='".$_REQUEST['姓名']."',phone='".$_REQUEST['phone']."'"); mysql_close($connect); ?>
<!DOCTYPE html>
<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01//EN' 'http://www.w3.org/TR/html4/strict.dtd'>
<?php $connect=mysql_connect('localhost','assistant','××××××××'); mysql_select_db('助理們'); // 前置處理 if($_POST['type']=='確定'){ mysql_query("update web a,webMail b set a.姓名='".$_POST['姓名']."',a.phone='".$_POST['phone']."',b.email='".$_POST['email']."' where a.wid=".$_POST['wid']." && b.eid=".$_POST['eid']); } elseif($_GET['type']=='editForm'){ echo editForm($_GET['wid'],$_GET['eid']); } else{ # } $result=mysql_query("select * from web"); // 取資料 $colName=array('序','','wid','姓名','電話');// 設表格首列名稱 $id='wid'; // 配置識別欄欄名 // 輸入驗證程式 $str="<script language='javascript'> function chkForm(){ if(document.表單.姓名.value==''){alert('請填寫姓名!');document.表單.姓名.focus();return false;} if(document.表單.email.value != ''){if(!isEmail(document.表單.email.value)){alert('請輸入正確的Email格式!');document.表單.email.focus();return false;}} else{alert('請填寫Email!');document.表單.email.focus();return false;} } function chkNameForm(){ if(document.表單.姓名.value==''){alert('請填寫姓名!');document.表單.姓名.focus();return false;} } function chkMailForm(){ if(document.表單.email.value != ''){if(!isEmail(document.表單.email.value)){alert('請輸入正確的Email格式!');document.表單.email.focus();return false;}} else{alert('請填寫Email!');document.表單.email.focus();return false;} } function isEmail(theStr){ var atindex=theStr.indexOf('@'); var dotindex=theStr.indexOf('.',atindex); var flag=true; thesub=theStr.substring(0,dotindex+1); if((atindex<1)||(atindex!=theStr.lastIndexOf('@'))||(dotindex<atindex+2)||(theStr.length<=thesub.length)){flag=false;} else{flag=true;} return(flag); } </script>\n"; echo $str.nicetable($result,$colName,$id); mysql_close($connect); function editForm($wid){ $result=mysql_query("select a.姓名,a.phone,b.email,b.eid from web a,webMail b where a.wid=b.wid && a.wid=".$wid); $row=mysql_fetch_array($result,MYSQL_ASSOC); // 只取第一筆 $xx=new makeForm; $xx->elements[]=array('姓名:','text','姓名',$row['姓名']); $xx->elements[]=array('email:','text','email',$row['email']); // 第一筆 email $xx->elements[]=array('電話:','text','phone',$row['phone']); $xx->elements[]=array('','hidden','wid',$wid); $xx->elements[]=array('','hidden','eid',$row['eid']); return $xx->makeFormStr(); } function nicetable($result,$colName,$id){ $i=1; // 筆計數器 $str="<table style='border:1px solid black;border-collapse:collapse;border-top:none;border-left:none;border-right:none;'>"; $str.="<tr>"; foreach($colName as $colValue){ $str.="<th style='border:1px solid black;border-collapse:collapse'>".$colValue."</th>"; } $str.="</tr>"; $temp=array(); while($row=mysql_fetch_array($result,MYSQL_ASSOC)){ $temp[$row[$id]]['姓名']=$row['姓名']; $temp[$row[$id]]['phone']=$row['phone']; } foreach($temp as $k=>$v){ $str.="<tr>"; $str.="<td style='border:1px solid black;border-collapse:collapse'>".$i."</td>"; $str.="<th rowspan='".$rs."' style='border:1px solid black;border-collapse:collapse'><a href=".$_SERVER['PHP_SELF']."?type=editForm&wid=".$k.">編</a></th>"; $str.="<th rowspan='".$rs."' style='border:1px solid black;border-collapse:collapse'>".$k."</th>"; $str.="<th rowspan='".$rs."' style='border:1px solid black;border-collapse:collapse'>".$temp[$k]['姓名']."</th>"; $str.="<th rowspan='".$rs."' style='border:1px solid black;border-collapse:collapse'>".$temp[$k]['phone']."</th>"; $str.="</tr>"; $i++; } $str.="</table>"; return $str; } class makeForm{ var $elements=array(); // 表單內容初值為空陣列 var $submitValue='確定'; var $checkWhich='chkForm()'; function makeFormStr(){ $str="\n<form action='".$_SERVER['PHP_SELF']."' method='post' name='表單'>\n"; // 表單字串 // 加入諸元素 foreach($this->elements as $輸入框){ $str.=$輸入框[0]."<input type='".$輸入框[1]."' name='".$輸入框[2]."' value='".$輸入框[3]."' />"; if($輸入框[1]!='hidden'){$str.="<br/>";} $str.="\n"; } $str.="<input type='submit' name='type' value='".$this->submitValue."' onClick=\"return ".$this->checkWhich.";\" />\n"; $str.="</form>\n"; return $str; } } ?>
<?php $connect=mysql_connect('localhost','assistant','××××××××'); mysql_select_db('助理們'); // 前置處理 if($_POST['type']=='編畢'){ mysql_query("update webMail set email='".$_POST['email']."' where eid=".$_POST['eid']); } elseif($_POST['type']=='確定'){ mysql_query("update web a,webMail b set a.姓名='".$_POST['姓名']."',a.phone='".$_POST['phone']."',b.email='".$_POST['email']."' where a.wid=".$_POST['wid']." && b.eid=".$_POST['eid']); } elseif($_POST['type']=='增一人'){ mysql_query("insert into web set 姓名='".$_POST['姓名']."',phone='".$_POST['phone']."'"); } elseif($_POST['type']=='加Mail'){ mysql_query("insert into webMail set email='".$_POST['email']."',wid='".$_POST['wid']."'"); } elseif($_GET['type']=='delMail'){ mysql_query("delete from webMail where eid='".$_GET['eid']."'"); } elseif($_GET['type']=='delPerson'){ mysql_query("delete from webMail where wid='".$_GET['wid']."'"); mysql_query("delete from web where wid='".$_GET['wid']."'"); } elseif($_GET['type']=='editMailForm'){ echo editMailForm($_GET['eid']); } elseif($_GET['type']=='editForm'){ echo editForm($_GET['wid'],$_GET['eid']); } elseif($_GET['type']=='insPersonForm'){ echo insPersonForm(); } elseif($_GET['type']=='insMailForm'){ echo insMailForm($_GET['wid']); } else{ # } $result=mysql_query("select a.wid,b.eid,a.姓名,a.phone,b.email from web a left join webMail b on a.wid=b.wid where a.姓名!=''");//百分比代表萬用字元,只要裡面包含@都可以,left join是左側連結,where a.某欄=b.某欄 $colName=array('序','','wid','姓名','手機','±M','eid','Email'); $str="<script language='javascript'> function chkForm(){ if(document.表單.姓名.value==''){alert('請填寫姓名!');document.表單.姓名.focus();return false;} if(document.表單.email.value != ''){if(!isEmail(document.表單.email.value)){alert('請輸入正確的Email格式!');document.表單.email.focus();return false;}} else{alert('請填寫Email!');document.表單.email.focus();return false;} } function chkNameForm(){ if(document.表單.姓名.value==''){alert('請填寫姓名!');document.表單.姓名.focus();return false;} } function chkMailForm(){ if(document.表單.email.value != ''){if(!isEmail(document.表單.email.value)){alert('請輸入正確的Email格式!');document.表單.email.focus();return false;}} else{alert('請填寫Email!');document.表單.email.focus();return false;} } function isEmail(theStr){ var atindex=theStr.indexOf('@'); var dotindex=theStr.indexOf('.',atindex); var flag=true; thesub=theStr.substring(0,dotindex+1); if((atindex<1)||(atindex!=theStr.lastIndexOf('@'))||(dotindex<atindex+2)||(theStr.length<=thesub.length)){flag=false;} else{flag=true;} return(flag); } </script>\n"; echo $str.nicetable($result,$colName); mysql_close($connect); function insMailForm($wid){ $xx=new makeForm; $xx->elements[]=array('email:','text','email',''); $xx->elements[]=array('','hidden','wid',$wid); $xx->submitValue='加Mail'; $xx->checkWhich='chkMailForm()'; return $xx->makeFormStr(); } function editMailForm($eid){ $result=mysql_query("select email from webMail where eid=".$eid); $row=mysql_fetch_array($result,MYSQL_ASSOC); $xx=new makeForm; $xx->elements[]=array('email:','text','email',$row['email']); $xx->elements[]=array('','hidden','eid',$eid); $xx->submitValue='編畢'; $xx->checkWhich='chkMailForm()'; return $xx->makeFormStr(); } function insPersonForm(){ $xx=new makeForm; $xx->elements[]=array('姓名:','text','姓名',''); $xx->elements[]=array('電話:','text','phone',''); $xx->submitValue='增一人'; $xx->checkWhich='chkNameForm()'; return $xx->makeFormStr(); } function editForm($wid){ $result=mysql_query("select 姓名,phone from web where wid=".$wid); $row=mysql_fetch_array($result,MYSQL_ASSOC); $xx=new makeForm; $xx->elements[]=array('姓名:','text','姓名',$row['姓名']); $xx->elements[]=array('電話:','text','phone',$row['phone']); $xx->elements[]=array('','hidden','wid',$wid); $xx->submitValue='確定'; return $xx->makeFormStr(); } function nicetable($result,$colName){ $i=1; $str="\n<table style='border:1px solid black;border-collapse:collapse;border-top:none;border-left:none;border-right:none;'>\n"; $str.="<tr><td colspan=8 style='border-top:none;border-left:none;border-right:none;'><p style='text-align:right'>《<a href='".$_SERVER['PHP_SELF']."?type=insPersonForm'>增一人</a>》</p></td></tr>\n"; $str.="<tr>"; foreach($colName as $colValue){ $str.="<th style='border:1px solid black;border-collapse:collapse'>".$colValue."</th>"; } $str.="</tr>\n"; $temp=array(); while($row=mysql_fetch_array($result,MYSQL_ASSOC)){ $temp[$row['wid']]['姓名']=$row['姓名']; $temp[$row['wid']]['phone']=$row['phone']; $temp[$row['wid']]['mail'][$row['eid']]=$row['email']; } foreach($temp as $k=>$v){ $rs=count($v['mail']);$j=0; foreach($v['mail'] as $kk=>$vv){ $str.="<tr>"; $str.="<td style='border:1px solid black;border-collapse:collapse'>".$i."</td>"; if($j==0){ $str.="<th rowspan='".$rs."' style='border:1px solid black;border-collapse:collapse'><a href=".$_SERVER['PHP_SELF']."?type=editForm&wid=".$k."&eid=".$kk.">編</a> <a href=".$_SERVER['PHP_SELF']."?type=delPerson&wid=".$k.">刪</a></th>"; $str.="<th rowspan='".$rs."' style='border:1px solid black;border-collapse:collapse'>".$k."</th>"; $str.="<th rowspan='".$rs."' style='border:1px solid black;border-collapse:collapse'>".$temp[$k]['姓名']."</th>"; $str.="<th rowspan='".$rs."' style='border:1px solid black;border-collapse:collapse'>".$temp[$k]['phone']."</th>"; } $str.="<th style='border:1px solid black;border-collapse:collapse'><a href='".$_SERVER['PHP_SELF']."?type=insMailForm&wid=".$k."'>+</a>"; if($kk){$str.=" <a href='".$_SERVER['PHP_SELF']."?type=editMailForm&eid=".$kk."'>編</a> <a href='".$_SERVER['PHP_SELF']."?type=delMail&eid=".$kk."'>—</a>";} $str.="</th>"; $str.="<th style='border:1px solid black;border-collapse:collapse'>".$kk."</th>"; $str.="<th style='border:1px solid black;border-collapse:collapse'>".$vv."</th>"; $j++; if($j==$rs){$j=0;} $str.="</tr>\n"; $i++; } } $str.="</table>\n"; return $str; } class makeForm{ var $elements=array(); // 表單內容初值為空陣列 var $submitValue='確定'; var $checkWhich='chkForm()'; function makeFormStr(){ $str="\n<form action='".$_SERVER['PHP_SELF']."' method='post' name='表單'>\n"; // 表單字串 // 加入諸元素 foreach($this->elements as $輸入框){ $str.=$輸入框[0]."<input type='".$輸入框[1]."' name='".$輸入框[2]."' value='".$輸入框[3]."' />"; if($輸入框[1]!='hidden'){$str.="<br/>";} $str.="\n"; } $str.="<input type='submit' name='type' value='".$this->submitValue."' onClick=\"return ".$this->checkWhich.";\" />\n"; $str.="</form>\n"; return $str; } } ?>
AJAX 即“Asynchronous JavaScript and XML”(非同步的JavaScript與XML技術),是網頁程式技術發展的理程碑之一
<?php echo "catch:e0=".$_POST['e0']; ?>
<?php $connect=mysql_connect('localhost','assistant','××××××××'); mysql_select_db('助理們'); // 前置處理 if($_POST['type']=='編畢'){ mysql_query("update webMail set email='".$_POST['email']."' where eid=".$_POST['eid']); } elseif($_POST['type']=='確定'){ mysql_query("update web a,webMail b set a.姓名='".$_POST['姓名']."',a.phone='".$_POST['phone']."',b.email='".$_POST['email']."' where a.wid=".$_POST['wid']." && b.eid=".$_POST['eid']); } elseif($_POST['type']=='增一人'){ mysql_query("insert into web set 姓名='".$_POST['姓名']."',phone='".$_POST['phone']."'"); } elseif($_POST['type']=='加Mail'){ mysql_query("insert into webMail set email='".$_POST['email']."',wid='".$_POST['wid']."'"); } elseif($_GET['type']=='delMail'){ mysql_query("delete from webMail where eid='".$_GET['eid']."'"); } elseif($_GET['type']=='delPerson'){ mysql_query("delete from webMail where wid='".$_GET['wid']."'"); mysql_query("delete from web where wid='".$_GET['wid']."'"); } elseif($_GET['type']=='editMailForm'){ echo editMailForm($_GET['eid']); } elseif($_GET['type']=='editForm'){ echo editForm($_GET['wid'],$_GET['eid']); } elseif($_GET['type']=='insPersonForm'){ echo insPersonForm(); } elseif($_GET['type']=='insMailForm'){ echo insMailForm($_GET['wid']); } else{ # } $result=mysql_query("select a.wid,b.eid,a.姓名,a.phone,b.email from web a left join webMail b on a.wid=b.wid where a.姓名!=''");//百分比代表萬用字元,只要裡面包含@都可以,left join是左側連結,where a.某欄=b.某欄 $colName=array('序','','wid','姓名','手機','±M','eid','Email'); $str=" <div id='show' style='border:red 2px solid;width:500px;'> 123456 </div> <br/> <form id='ajaxTest'> <input type='text' name='e0' value=''> <input type='button' name='button' value='後送' onclick=\"sendFormData('ajaxTest','/~丁志仁/php/response.php','show');\" > </form> <script language='javascript'> function chkForm(){ if(document.表單.姓名.value==''){alert('請填寫姓名!');document.表單.姓名.focus();return false;} if(document.表單.email.value != ''){if(!isEmail(document.表單.email.value)){alert('請輸入正確的Email格式!');document.表單.email.focus();return false;}} else{alert('請填寫Email!');document.表單.email.focus();return false;} } function chkNameForm(){ if(document.表單.姓名.value==''){alert('請填寫姓名!');document.表單.姓名.focus();return false;} } function chkMailForm(){ if(document.表單.email.value != ''){if(!isEmail(document.表單.email.value)){alert('請輸入正確的Email格式!');document.表單.email.focus();return false;}} else{alert('請填寫Email!');document.表單.email.focus();return false;} } function isEmail(theStr){ var atindex=theStr.indexOf('@'); var dotindex=theStr.indexOf('.',atindex); var flag=true; thesub=theStr.substring(0,dotindex+1); if((atindex<1)||(atindex!=theStr.lastIndexOf('@'))||(dotindex<atindex+2)||(theStr.length<=thesub.length)){flag=false;} else{flag=true;} return(flag); } var ahr=createXMLHttpRequestObject(); // 先建立物件以俾重覆使用 function createXMLHttpRequestObject(){ var ahr=false; // 物件初值設為不存在 if(window.XMLHttpRequest){ahr=new XMLHttpRequest();}// 產生非同步請求物件,本行給Firefox,下行給IE5,6 else if(window.ActiveXObject){ahr=new ActiveXObject('Microsoft.XMLHTTP');} if(!ahr){alert('Error: failed to create the XMLHttpRequest object.');} else{return ahr;} } function postData(dataSource,parm,divID){ // 對 dataSource 後送POST請求,帶 parm 參數,回應送divID,回應後執行 onAjax(a) if(ahr){ ahr.open('POST',dataSource); // 初始化請求 ahr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); // 通知伺服器後送資料是url編碼 ahr.onreadystatechange=function(){if(ahr.readyState==4 && ahr.status==200){document.getElementById(divID).innerHTML=ahr.responseText;}}; parm+='&nowtime='+new Date().getTime(); // 使後送資料不同 ahr.send(parm); // 執行請求並後送資料 } else{alert('Error: XMLHttpRequest object do not exist.');} } function sendFormData(idForm,dataSource,divID){ // 從指定表單擷取資料並後送 if(ahr){ var sendData=''; for(var i=0;i<document.getElementById(idForm).elements.length;i++){ if(document.getElementById(idForm).elements[i].type=='checkbox' || document.getElementById(idForm).elements[i].type=='radio'){ if(document.getElementById(idForm).elements[i].type=='checkbox'){ // 處理核取方塊,checked回傳值,沒checked回傳空無一物 if(document.getElementById(idForm).elements[i].checked==true){sendData += '&'+document.getElementById(idForm).elements[i].name+'='+encode(document.getElementById(idForm).elements[i].value);} else{sendData += '&'+document.getElementById(idForm).elements[i].name+'=';} }else{ // 處理按鈕,checked回傳值,否則跳過 if(document.getElementById(idForm).elements[i].checked==true){sendData += '&'+document.getElementById(idForm).elements[i].name+'='+encode(document.getElementById(idForm).elements[i].value);} } } // 非核取方塊非按鈕,如為隱藏欄不編碼傳回值,不是隱藏欄則編碼傳回值 else if(document.getElementById(idForm).elements[i].type=='hidden'){sendData += '&'+document.getElementById(idForm).elements[i].name+'='+document.getElementById(idForm).elements[i].value;} else{sendData += '&'+document.getElementById(idForm).elements[i].name+'='+encode(document.getElementById(idForm).elements[i].value);} } } postData(dataSource,sendData,divID); } function encode(x){ return x.replace(/%/g,'%25').replace(/&/g,'%26').replace(/\+/g,'%2B').replace(/\"/g,'%22').replace(/\'/g,'%27'); } </script>\n"; echo $str.nicetable($result,$colName); mysql_close($connect); function insMailForm($wid){ $xx=new makeForm; $xx->elements[]=array('email:','text','email',''); $xx->elements[]=array('','hidden','wid',$wid); $xx->submitValue='加Mail'; $xx->checkWhich='chkMailForm()'; return $xx->makeFormStr(); } function editMailForm($eid){ $result=mysql_query("select email from webMail where eid=".$eid); $row=mysql_fetch_array($result,MYSQL_ASSOC); $xx=new makeForm; $xx->elements[]=array('email:','text','email',$row['email']); $xx->elements[]=array('','hidden','eid',$eid); $xx->submitValue='編畢'; $xx->checkWhich='chkMailForm()'; return $xx->makeFormStr(); } function insPersonForm(){ $xx=new makeForm; $xx->elements[]=array('姓名:','text','姓名',''); $xx->elements[]=array('電話:','text','phone',''); $xx->submitValue='增一人'; $xx->checkWhich='chkNameForm()'; return $xx->makeFormStr(); } function editForm($wid){ $result=mysql_query("select 姓名,phone from web where wid=".$wid); $row=mysql_fetch_array($result,MYSQL_ASSOC); $xx=new makeForm; $xx->elements[]=array('姓名:','text','姓名',$row['姓名']); $xx->elements[]=array('電話:','text','phone',$row['phone']); $xx->elements[]=array('','hidden','wid',$wid); $xx->submitValue='確定'; return $xx->makeFormStr(); } function nicetable($result,$colName){ $i=1; $str="\n<table style='border:1px solid black;border-collapse:collapse;border-top:none;border-left:none;border-right:none;'>\n"; $str.="<tr><td colspan=8 style='border-top:none;border-left:none;border-right:none;'><p style='text-align:right'>《<a href='".$_SERVER['PHP_SELF']."?type=insPersonForm'>增一人</a>》</p></td></tr>\n"; $str.="<tr>"; foreach($colName as $colValue){ $str.="<th style='border:1px solid black;border-collapse:collapse'>".$colValue."</th>"; } $str.="</tr>\n"; $temp=array(); while($row=mysql_fetch_array($result,MYSQL_ASSOC)){ $temp[$row['wid']]['姓名']=$row['姓名']; $temp[$row['wid']]['phone']=$row['phone']; $temp[$row['wid']]['mail'][$row['eid']]=$row['email']; } foreach($temp as $k=>$v){ $rs=count($v['mail']);$j=0; foreach($v['mail'] as $kk=>$vv){ $str.="<tr>"; $str.="<td style='border:1px solid black;border-collapse:collapse'>".$i."</td>"; if($j==0){ $str.="<th rowspan='".$rs."' style='border:1px solid black;border-collapse:collapse'><a href=".$_SERVER['PHP_SELF']."?type=editForm&wid=".$k."&eid=".$kk.">編</a> <a href=".$_SERVER['PHP_SELF']."?type=delPerson&wid=".$k.">刪</a></th>"; $str.="<th rowspan='".$rs."' style='border:1px solid black;border-collapse:collapse'>".$k."</th>"; $str.="<th rowspan='".$rs."' style='border:1px solid black;border-collapse:collapse'>".$temp[$k]['姓名']."</th>"; $str.="<th rowspan='".$rs."' style='border:1px solid black;border-collapse:collapse'>".$temp[$k]['phone']."</th>"; } $str.="<th style='border:1px solid black;border-collapse:collapse'><a href='".$_SERVER['PHP_SELF']."?type=insMailForm&wid=".$k."'>+</a>"; if($kk){$str.=" <a href='".$_SERVER['PHP_SELF']."?type=editMailForm&eid=".$kk."'>編</a> <a href='".$_SERVER['PHP_SELF']."?type=delMail&eid=".$kk."'>—</a>";} $str.="</th>"; $str.="<th style='border:1px solid black;border-collapse:collapse'>".$kk."</th>"; $str.="<th style='border:1px solid black;border-collapse:collapse'>".$vv."</th>"; $j++; if($j==$rs){$j=0;} $str.="</tr>\n"; $i++; } } $str.="</table>\n"; return $str; } class makeForm{ var $elements=array(); // 表單內容初值為空陣列 var $submitValue='確定'; var $checkWhich='chkForm()'; function makeFormStr(){ $str="\n<form action='".$_SERVER['PHP_SELF']."' method='post' name='表單'>\n"; // 表單字串 // 加入諸元素 foreach($this->elements as $輸入框){ $str.=$輸入框[0]."<input type='".$輸入框[1]."' name='".$輸入框[2]."' value='".$輸入框[3]."' />"; if($輸入框[1]!='hidden'){$str.="<br/>";} $str.="\n"; } $str.="<input type='submit' name='type' value='".$this->submitValue."' onClick=\"return ".$this->checkWhich.";\" />\n"; $str.="</form>\n"; return $str; } } ?>
會議資料處理的資料結構示例
<?php $connect=mysql_connect('localhost','assistant','××××××××'); mysql_select_db('助理們'); $colName=array('序','','wid','姓名','手機','±M','eid','Email'); if(isset($_REQUEST['type'])){ // 前置處理 if($_POST['type']=='編畢'){ mysql_query("update webMail set email='".$_POST['email']."' where eid=".$_POST['eid']); } if($_POST['type']=='確定'){ mysql_query("update web set 姓名='".$_POST['姓名']."',phone='".$_POST['phone']."' where wid=".$_POST['wid']); } elseif($_POST['type']=='增一人'){ mysql_query("insert into web set 姓名='".$_POST['姓名']."',phone='".$_POST['phone']."'"); } elseif($_POST['type']=='加Mail'){ mysql_query("insert into webMail set email='".$_POST['email']."',wid='".$_POST['wid']."'"); } elseif($_POST['type']=='delMail'){ mysql_query("delete from webMail where eid='".$_POST['eid']."'"); } elseif($_POST['type']=='delPerson'){ mysql_query("delete from webMail where wid='".$_POST['wid']."'"); mysql_query("delete from web where wid='".$_POST['wid']."'"); } elseif($_POST['type']=='editMailForm'){ echo editMailForm($_POST['eid']); } elseif($_POST['type']=='editForm'){ echo editForm($_POST['wid'],$_POST['eid']); } elseif($_POST['type']=='insPersonForm'){ echo insPersonForm(); } elseif($_POST['type']=='insMailForm'){ echo insMailForm($_POST['wid']); } $result=mysql_query("select a.wid,b.eid,a.姓名,a.phone,b.email from web a left join webMail b on a.wid=b.wid where a.姓名!=''");//百分比代表萬用字元,只要裡面包含@都可以,left join是左側連結,where a.某欄=b.某欄 echo nicetable($result,$colName); } else{ // 第一次載入 $str="<script language='javascript'> function chkFormList(idForm,dataSource,divID){ if(('姓名' in document.表單) && document.表單.姓名.value==''){alert('請填寫姓名!');document.表單.姓名.focus();} else if(('email' in document.表單) && document.表單.email.value == ''){alert('請填寫Email!');document.表單.email.focus();} else if(('email' in document.表單) && document.表單.email.value != '' && !isEmail(document.表單.email.value)){alert('請輸入正確的Email格式!');document.表單.email.focus();} else{sendFormData(idForm,dataSource,divID);} } function isEmail(theStr){ var atindex=theStr.indexOf('@'); var dotindex=theStr.indexOf('.',atindex); var flag=true; thesub=theStr.substring(0,dotindex+1); if((atindex<1)||(atindex!=theStr.lastIndexOf('@'))||(dotindex<atindex+2)||(theStr.length<=thesub.length)){flag=false;} else{flag=true;} return(flag); } var ahr=createXMLHttpRequestObject(); // 先建立物件以俾重覆使用 function createXMLHttpRequestObject(){ var ahr=false; // 物件初值設為不存在 if(window.XMLHttpRequest){ahr=new XMLHttpRequest();}// 產生非同步請求物件,本行給Firefox,下行給IE5,6 else if(window.ActiveXObject){ahr=new ActiveXObject('Microsoft.XMLHTTP');} if(!ahr){alert('Error: failed to create the XMLHttpRequest object.');} else{return ahr;} } function postData(dataSource,parm,divID){ // 對 dataSource 後送POST請求,帶 parm 參數,回應送divID,回應後執行 onAjax(a) if(ahr){ ahr.open('POST',dataSource); // 初始化請求 ahr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); // 通知伺服器後送資料是url編碼 ahr.onreadystatechange=function(){if(ahr.readyState==4 && ahr.status==200){document.getElementById(divID).innerHTML=ahr.responseText;}}; parm+='&nowtime='+new Date().getTime(); // 使後送資料不同 ahr.send(parm); // 執行請求並後送資料 } else{alert('Error: XMLHttpRequest object do not exist.');} } function sendFormData(idForm,dataSource,divID){ // 從指定表單擷取資料並後送 if(ahr){ var sendData=''; for(var i=0;i<document.getElementById(idForm).elements.length;i++){ if(document.getElementById(idForm).elements[i].type=='checkbox' || document.getElementById(idForm).elements[i].type=='radio'){ if(document.getElementById(idForm).elements[i].type=='checkbox'){ // 處理核取方塊,checked回傳值,沒checked回傳空無一物 if(document.getElementById(idForm).elements[i].checked==true){sendData += '&'+document.getElementById(idForm).elements[i].name+'='+encode(document.getElementById(idForm).elements[i].value);} else{sendData += '&'+document.getElementById(idForm).elements[i].name+'=';} }else{ // 處理按鈕,checked回傳值,否則跳過 if(document.getElementById(idForm).elements[i].checked==true){sendData += '&'+document.getElementById(idForm).elements[i].name+'='+encode(document.getElementById(idForm).elements[i].value);} } } // 非核取方塊非按鈕,如為隱藏欄不編碼傳回值,不是隱藏欄則編碼傳回值 else if(document.getElementById(idForm).elements[i].type=='hidden'){sendData += '&'+document.getElementById(idForm).elements[i].name+'='+document.getElementById(idForm).elements[i].value;} else{sendData += '&'+document.getElementById(idForm).elements[i].name+'='+encode(document.getElementById(idForm).elements[i].value);} } } postData(dataSource,sendData,divID); } function encode(x){ return x.replace(/%/g,'%25').replace(/&/g,'%26').replace(/\+/g,'%2B').replace(/\"/g,'%22').replace(/\'/g,'%27'); } </script> <div id='show'>\n"; $result=mysql_query("select a.wid,b.eid,a.姓名,a.phone,b.email from web a left join webMail b on a.wid=b.wid where a.姓名!=''");//百分比代表萬用字元,只要裡面包含@都可以,left join是左側連結,where a.某欄=b.某欄 $str.=nicetable($result,$colName); $str.="</div>\n"; echo $str; } mysql_close($connect); function insMailForm($wid){ $xx=new makeForm; $xx->elements[]=array('email:','text','email',''); $xx->elements[]=array('','hidden','wid',$wid); $xx->submitValue='加Mail'; return $xx->makeFormStr(); } function editMailForm($eid){ $result=mysql_query("select email from webMail where eid=".$eid); $row=mysql_fetch_array($result,MYSQL_ASSOC); $xx=new makeForm; $xx->elements[]=array('email:','text','email',$row['email']); $xx->elements[]=array('','hidden','eid',$eid); $xx->submitValue='編畢'; return $xx->makeFormStr(); } function insPersonForm(){ $xx=new makeForm; $xx->elements[]=array('姓名:','text','姓名',''); $xx->elements[]=array('電話:','text','phone',''); $xx->submitValue='增一人'; return $xx->makeFormStr(); } function editForm($wid){ $result=mysql_query("select 姓名,phone from web where wid=".$wid); $row=mysql_fetch_array($result,MYSQL_ASSOC); $xx=new makeForm; $xx->elements[]=array('姓名:','text','姓名',$row['姓名']); $xx->elements[]=array('電話:','text','phone',$row['phone']); $xx->elements[]=array('','hidden','wid',$wid); $xx->submitValue='確定'; return $xx->makeFormStr(); } function nicetable($result,$colName){ $i=1; $str="\n<table style='border:1px solid black;border-collapse:collapse;border-top:none;border-left:none;border-right:none;'>\n"; $str.="<tr><td colspan=8 style='border-top:none;border-left:none;border-right:none;'><p style='text-align:right'>《".ajaxLink(array('type'=>'insPersonForm'),'增一人')."》</p></td></tr>\n"; $str.="<tr>"; foreach($colName as $colValue){ $str.="<th style='border:1px solid black;border-collapse:collapse'>".$colValue."</th>"; } $str.="</tr>\n"; $temp=array(); while($row=mysql_fetch_array($result,MYSQL_ASSOC)){ $temp[$row['wid']]['姓名']=$row['姓名']; $temp[$row['wid']]['phone']=$row['phone']; $temp[$row['wid']]['mail'][$row['eid']]=$row['email']; } foreach($temp as $k=>$v){ $rs=count($v['mail']);$j=0; foreach($v['mail'] as $kk=>$vv){ $str.="<tr>"; $str.="<td style='border:1px solid black;border-collapse:collapse'>".$i."</td>"; if($j==0){ $str.="<th rowspan='".$rs."' style='border:1px solid black;border-collapse:collapse'>".ajaxLink(array('type'=>'editForm','wid'=>$k),'編')." ".ajaxLink(array('type'=>'delPerson','wid'=>$k),'刪')."</th>"; $str.="<th rowspan='".$rs."' style='border:1px solid black;border-collapse:collapse'>".$k."</th>"; $str.="<th rowspan='".$rs."' style='border:1px solid black;border-collapse:collapse'>".$temp[$k]['姓名']."</th>"; $str.="<th rowspan='".$rs."' style='border:1px solid black;border-collapse:collapse'>".$temp[$k]['phone']."</th>"; } $str.="<th style='border:1px solid black;border-collapse:collapse'>".ajaxLink(array('type'=>'insMailForm','wid'=>$k),'+'); if($kk){$str.=" ".ajaxLink(array('type'=>'editMailForm','eid'=>$kk),'編')." ".ajaxLink(array('type'=>'delMail','eid'=>$kk),'—');} $str.="</th>"; $str.="<th style='border:1px solid black;border-collapse:collapse'>".$kk."</th>"; $str.="<th style='border:1px solid black;border-collapse:collapse'>".$vv."</th>"; $j++; if($j==$rs){$j=0;} $str.="</tr>\n"; $i++; } } $str.="</table>\n"; return $str; } function ajaxLink($paras,$prompt){ $str="<a href='' onclick=\"postData('".$_SERVER['PHP_SELF']."','"; foreach($paras as $k=>$v){$str.="&".$k."=".$v;} $str.="','show');return false;\">".$prompt."</a>"; return $str; } class makeForm{ var $elements=array(); // 表單內容初值為空陣列 var $submitValue='確定'; var $checkWhich='chkFormList()'; function makeFormStr(){ $str="\n<form name='表單' id='表單'>\n"; // 表單字串 // 加入諸元素 foreach($this->elements as $輸入框){ $str.=$輸入框[0]."<input type='".$輸入框[1]."' name='".$輸入框[2]."' value='".$輸入框[3]."' />"; if($輸入框[1]!='hidden'){$str.="<br/>";} $str.="\n"; } $str.="<input type='button' name='type' value='".$this->submitValue."' onclick=\"chkFormList('表單','".$_SERVER['PHP_SELF']."','show')\">\n"; $str.="</form>\n"; return $str; } } ?>
SESSION
串接樣式表(Cascading Style Sheets),用來控制網頁外觀表現。
屬性 | 狀態 |
---|---|
:link |
超連接未被訪問 |
:visited |
超連接被訪問過 |
:hover |
滑鼠(鼠標)在元素上面 |
:active |
滑鼠(鼠標)在元素上按著 |
:focus |
焦點在元素上 |
:target |
元素被URL標記(CSS 3新增的類別) |
:lang |
向帶有指定lang屬性的元素添加樣式。 |
padding:上 右 下 左; padding:上下 左右; padding:上 左右 下; padding:四個邊同樣値;
margin:上 右 下 左; margin:上下 左右; margin:上 左右 下; margin:四個邊同樣値;
border-style:solid; | border-style:dotted; | border-style:dashed; |
border-style:double; | border-style:outset; | border-style:groove; |
border-style:ridge; | border-style:inset; | border-style:none; |
CSS | SVG | |
---|---|---|
線 | border | stroke |
面 | background | fill |
字體 | 中英文 | 英文 |
內容映射
<?php ini_set('session.save_path','/volume1/homes/○○○/sessPath'); include_once '/volume1/web/constant.php'; ?>
include_once CLASS_FILE_PATH.'/database/DB.php'; DB::connect(DSN); $result=DB::queryF("select 諸欄 from 某表"); echo DB::numRows($result)."<br/>\n"; echo DB::getResultValue($result,某筆,'欄名');
include_once CLASS_FILE_PATH."/database/login.php"; $物件=new login; $物件->users=array( '丁志仁'=>array('psd'=>'xxxxxxxxx','editable'=>7,'grp'=>array('4')), '柯智懷'=>array('psd'=>'xxxxxxxxx','editable'=>7,'grp'=>array('4')), ); $物件->logon(); if(isset($物件->checkin) && $物件->checkin==1){ … }else{…}
$物件->loginTable=array('tableName'=>'認證資料表','psd'=>'密碼欄','name'=>'帳號欄','grp'=>'群組欄','canWorkGrp'=>'諸群組'); /* 諸群組以「;」相間 */
<?php include_once '../userConstant.php'; include_once CLASS_FILE_PATH."/database/etable.php"; $ET=new etable; $ET->sql[0]="select * from account_xxx"; $ET->main(); ?>
if(!isset($_REQUEST['exec_type'])){echo "<link rel='stylesheet' type='text/css' media='all' href='".CLASS_HTML_PATH."/database/etable.css' />\n";}
$ET->colAlias=array('money'=>'支出','date'=>'日期','summary'=>'摘要','name'=>'支付者');
$ET->formType=array('date'=>array('date'), 'account_e'=>array('checkbox',array('費用'=>'費用')), 'account_a'=>array('radio',array('現金'=>'現金','存款'=>'存款')), 'subaccount'=>array('radio',array('食'=>'食','衣'=>'衣','住'=>'住','行'=>'行','育'=>'育','樂'=>'樂','健'=>'健')), 'name'=>array('radio',array('丁志仁'=>'丁志仁','李森茂'=>'李森茂')) );
$ET->formType=array( 'EN'=>array('radio',array('中'=>'中文','英'=>'英文','中英'=>'中英','中日'=>'中日')), 'buyDate'=>array('date'), 'inHome'=>array('oneWaySwitch',array(0=>'待還',1=>'已還')) );
<?php include_once '../userConstant.php'; include_once "theme.php"; if(!isset($_REQUEST['exec_type'])){echo $html1;} include_once CLASS_FILE_PATH."/database/etable.php"; $ET = new etable; $ET->sql[0]="select concat(Name,'-',number) 片名數量,album,EN,buyDate,inHome from DVD"; $ET->editable=7; $ET->formType=array( 'EN'=>array('radio',array('中'=>'中文','英'=>'英文','中英'=>'中英','中日'=>'中日')), 'buyDate'=>array('date'), 'inHome'=>array('oneWaySwitch',array(0=>'待還',1=>'已還')) ); $ET->formValidate=array('Name'=>array('.+','請填片名!')); $ET->perpage=12; $ET->colAlias=array('uid'=>'擁有者','Name'=>'片名','album'=>'套片','number'=>'數量','EN'=>'字幕','buyDate'=>'購買日期','inHome'=>'是否在家'); $ET->editables=array('ins'=>array('DVD'),'edit'=>array('DVD'),'erase'=>array('DVD')); $ET->tran=1; $ET->moreCol=array(array(0,'本頁','f1'),array(1,'序','f2')); $ET->dispType='disp_table'; $ET->search=array('Name','EN'); $ET->main(); if(!isset($_REQUEST['exec_type'])){echo $html2;} function f1($i,$j,$k){return $i;} function f2($i,$j,$k){return $j;} ?>
響應式網頁設計(Responsive Web Design)簡稱RWD
<!DOCTYPE html> <html> <head> <link rel='stylesheet' type='text/css' media='all' href='screen.css' /> </head> <body> <a href='#' class='CardLink CardLink_H'>Heart</a> <a href='#' class='CardLink CardLink_C'>Club</a> <a href='#' class='CardLink CardLink_S'>Shahe</a> <a href='#' class='CardLink CardLink_D'>Diamon</a> </body> </html>
.CardLink { display:block; color:#666; text-shadow:0 2px #efefef; text-decoration:none; height:2.75 rem; line-height:2.75 rem; border-bottom:1px solid #bbb; position:relative; } @media (orientation:portrait) { .CardLink { padding-left:1.8 rem; font-size:1.6 rem; color:green; } } .CardLink:before { display:none; position:absolute; top:50%; transform:translateY(-50%); left:0; }