php表單之在Web頁面中插入表單
在普通的WEB頁面中插入表單是如下的:這里將創建一個比較完整的表單, 將<form>中的元素和屬性全部基本全部都展示出來,
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>index</title> </head> <body> <form action="test.php" method="post" name="form1" enctype="multipart/form-data"> <table width="400" border="1" cellpadding="1" bgcolor="#999"> <tr bgcolor="#ffcc33"> <td width="103" height="25" align="right">username: </td> <td height="25"><input type="text" name="user" size="20" maxlength="100"></td> </tr> <tr bgcolor="#ffcc33"> <td height="25" align="right">gender: </td> <td height="25" colspan="2"> <input type="radio" name="gender" value="0" checked>male <input type="radio" name="gender" value="1">female </td> </tr> <tr bgcolor="#ffcc33"> <td width="103" height="25" align="right">password: </td> <td width="289" height="25" colspan="2"><input type="password" name="pwd" size="20" maxlength="100"></td> </tr> <tr bgcolor="#ffcc33"> <td height="25" align="right">schooling: </td> <td height="25" colspan="2"> <select name="select" > <option value="0">Specialized subject</option> <option value="1">Undergraduate course</option> <option value="2" selected>A graduate student</option> </select> </td> </tr> <tr bgcolor="#ffcc33"> <td height="25" align="right">hobby: </td> <td height="25" colspan="2"> <input type="checkbox" name="hobby[]" value="0" checked>php <input type="checkbox" name="hobby[]" value="1">thinkphp <input type="checkbox" name="hobby[]" value="2" checked>laravel </td> </tr> <tr bgcolor="#ffcc33"> <td height="25" align="right">pic: </td> <td height="25" colspan="2"> <input type="file" name="image" size="20" maxlength="100"> </td> </tr> <tr bgcolor="#ffcc33"> <td height="25" align="right">info: </td> <td height="25" colspan="2"> <textarea name="info" cols="30" rows="10"></textarea> </td> </tr> <tr bgcolor="#ffcc33"> <td height="25" align="right">info: </td> <td height="25" colspan="2"> <input type="submit" value="提交"> <input type="reset" value="重置"> </td> </tr> </table> </form> </body> </html>
在瀏覽器中輸入地址,按回車鍵,運行結果如下:

php中提交表單資料的POST()方法和GET()方法
使用POST()方法提交表單
在使用POST()方法時,只需要將<form>表單中的屬性 method 設定成POST即可, POST()方法不依賴于URL,不會顯示在地址欄,POST()方法可以沒有限制地傳遞資料到服務器,所有提交的資訊在后臺傳輸,用戶在瀏覽器端是看不到這一程序的,安全性會更高,所以POST()方法比較適合用于發送一個保密的(如銀行賬號)或者容量較大的資料到服務器中,
下面的實體將使用POST()方法發送文本框資訊到服務器,示例代碼如下所示:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>index</title> </head> <body> <form action="test.php" method="post" name="form1"> <table width="300" border="0" cellpadding="0" cellspacing="0"> <tr> <td height="30"> 訂單號: <input type="text" name="order" size="20"> <input type="submit" value="提交"> </td> </tr> </table> </form> </body> </html>
使用GET()方法提交表單
注意:若要使用GET()方法提交表單,URL的長度應限制在1MB字符以內,如果發送的資料量太大,資料將會被截斷,從而導致意外或失敗的處理結果,
下面創建一個表單來實作應用 GET()方法提交用戶名和密碼,并顯示在URL 地址欄中,添加一個文本框,命名為user;添加一個密碼域,命名為pwd;將表單的 method 屬性設定為 GET()方法,示例代碼如下所示:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>index</title> </head> <body> <form action="test.php" method="get" name="form1"> <table width="300" border="0" cellpadding="0" cellspacing="0"> <tr> <td height="30"> 用戶名:<input type="text" name="user" size="20"><br> 密碼:<input type="password" name="pwd" size="20"><br> <input type="submit" value="提交"> </td> </tr> </table> </form> </body> </html>
運行這個實體,在文本框中輸入用戶名和密碼,點擊“提交”按鈕后,文本框內的資訊就會顯示在URL地址欄中,如下面的圖所示:

GET()方法會將引數暴露在地址欄中,如果用戶傳遞的引數是非保密性的引數(如id=8),那么采用GET()方法傳遞資料是可行的;如果用戶傳遞的保密性的引數(如密碼等),使用這種方法傳遞資料是不安全的,解決該問題的方法是將表單中的 method 屬性默認的GET()方法替換為POST()方法,
php判斷form表單是否提交詳解
我們一般通過 submit 提交表單時,會在乎在表單中填寫的一大堆資料是否提交到后臺,這里就需要做個判斷,使用php代碼來判斷表單資料是否被提交一般采用如下的形式:
<html> <body> <form action="" method="post" name="form1"> <table width="300" border="0" cellpadding="0" cellspacing="0"> <tr> <td height="30"> 用戶名:<input type="text" name="user" size="20"><br> 密碼:<input type="password" name="pwd" size="20"><br> <input type="submit" name="submit" value="提交"> </td> </tr> </table> </form> </body> </html> <?php if(isset($_POST['submit'])){ echo '資料被提交過來'; }
說明:isset -- 檢測變數是否設定 ,回傳值有如下的幾種形式,
若變數不存在則回傳 FALSE
若變數存在且其值為NULL,也回傳 FALSE
若變數存在且值不為NULL,則回傳 TURE
同時檢查多個變數時,每個單項都符合上一條要求時才回傳 TRUE,否則結果為 FALSE,
在做資料查詢時,建議用GET方式,而在做資料添加、修改或洗掉時,建議用POST方式,
request是先讀取 get再讀post 的, 同時存在, 即覆寫掉前面的變數,
php防止表單重復提交詳解
用戶提交表單時可能因為網速的原因,或者網頁被惡意重繪,致使同一條記錄重復插入到資料庫中,所以不能忽視的一個限制是防止用戶重復提交表單,因為有可能用戶連續點擊了提交按鈕或者是攻擊者惡意提交資料,那么我們在提交資料后的處理如修改或添加資料到資料庫時就會惹上麻煩,
第一、首先從前端做限制,
前端JavaScript在按鈕被點擊一次后禁用,即disabled,這個方法簡單的防止了多次點擊提交按鈕,但是缺點是如果用戶禁用了javascript腳本則失效,
提到客戶在下面的例子中,我們使用它處理表單的重復提交問題,請看下面的代碼:
<html> <body> <form action="" method="post" name="register" enctype="multipart/form-data"> <input type="text" name="text" id="text"><br> <input name="cont" value="提交" type="button" onclick="document.register.cont.value='https://www.cnblogs.com/chenyingying0/p/正在提交,請等待...';document.register.cont.disabled=true;document.register.submit();"> </form> </body> </html>
當用戶單擊“提交”按鈕后,該按鈕將變為灰色不可用狀態
還有一個方法,也是利用JavaScript的功能,但是使用的是OnSubmit()方法,如果已經提交過一次表單,將立即彈出對話框,代碼如下:
<html> <body> <form action="" method="post" name="register" onSubmit="return submitOnce(this)"> <input type="text" name="text" id="text"><br> <input name="cont" value="提交" type="submit"> </form> </body> </html> <script> var count = 0; function submitOnce(form){ if(count == 0){ count++; return true; }else{ alert('請勿重復提交表單!'); return false; } } </script>
第二、使用Cookie處理
使用Cookie記錄表單提交的狀態,根據其狀態可以檢查是否已經提交表單,請見下面的代碼:
<html> <body> <form action="" method="post" name="register" enctype="multipart/form-data"> username: <input type="text" name="text" id="text"><br> <input name="submit" value="提交" type="submit"> </form> </body> </html> <?php if(isset($_post['submit'])){ setcookie('tmpcookie','',time()+30); header('Location:'.$_SERVER[PHP_SELF]); exit; } if(isset($_COOKIE['tmpcookie'])){ setcookie('tmpcookie','',0); echo '請勿重復提交表單'; }
如果客戶端禁止了Cookie,該方法將不起任何作用,這點請注意,
第三、使用Session處理
利用PHP的Session功能,也能避免重復提交表單,Session保存在服務器端,在PHP運行程序中可以改變Session變數,下次訪問這個變數時,得到的是新賦的值,所以,可以用一個Session變數記錄表單提交的值,如果不匹配,則認為是用戶在重復提交,請見如下代碼:
<?php session_start(); $code = mt_rand(0,1000000); $_SESSION['code'] = $code; ?> <html> <body> <form action="deal.php" method="post" name="register" enctype="multipart/form-data"> username: <input type="text" name="text" id="text"><br> <input type="hidden" name="code" value="<?=$code?>"> <input name="submit" value="提交" type="submit"> </form> </body> </html>
在接收頁面的PHP代碼如下:
<?php session_start(); if(isset($_POST['code'])){ if($_POST['code'] == $_SESSION['code']){ }else{ echo '請不要重復提交表單'; } } ?>
第四、使用header函式轉向
除了上面的方法之外,還有一個更簡單的方法,那就是當用戶提交表單,服務器端處理后立即轉向其他的頁面,代碼如下所示,
<html> <body> <form action="deal.php" method="post" name="register" enctype="multipart/form-data"> username: <input type="text" name="text" id="text"><br> <input name="submit" value="提交" type="submit"> </form> </body> </html>
deal.php
<?php if(isset($_POST['submit'])){ //業務處理... header('location:success.php'); } ?>
success.php
<?php echo '提交成功';
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/36396.html
標籤:PHP
上一篇:php form表單概念
下一篇:ThinKPHP6.0 上手操作
