我真的搞砸了。有沒有人可以幫助我,使用php進行服務器端驗證的更簡單的方法或簡單的方法是什麼? 我真的很感激.....簡單的服務器端驗證註冊表單在PHP(不同的技術)
0
A
回答
0
正如馬克乙說,真的沒有簡單的方式。您可以使用第三方表單驗證庫/類,或者使用具有表單驗證功能的框架作爲組件。我個人使用Zend Framework,但這對你來說可能是矯枉過正的。
如果你這樣做你自己,你要記住以下(加上更多取決於你的需求):
- 是根據特定的期望格式的數據是否正確? (即電子郵件,電話號碼,郵政編碼)您可以通過多種方式進行驗證。 (正則表達式)
- 您是插入數據庫還是回到頁面?那麼你應該逃脫。簡單的方法包括:htmlentities,htmlspecialchars等。再次,這取決於您的具體需求
- 是否有您想強制執行的最大限制?如果是這樣,你需要做這個服務器端,因爲DOM可以由用戶操縱,任何
input
級別的限制可以很容易地改變。 - 是否需要填寫?確保
POST
變量存在並且不爲空。
你只需要寫下你的表單需求,然後從那裏決定你將如何實現驗證。
0
下面是一個簡單的PHP表單驗證:
<?php
// validate $_GET['foo'], here I test that it is at least 1 character long
$valid = TRUE;
if(isset($_GET['foo']) && strlen($_GET['foo']) < 1) {
$valid = FALSE;
}
// if the form is submitted and $_GET['foo'] is valid, show a success message
if(isset($_GET['bar']) && $valid) :
// do something with the form data
?>
<p>The form was successfully submitted.</p>
<?php
// show the form
else :
?>
<form method="get" action="">
<div>
<label for="foo">Foo: </label>
<input type="text" id="foo" name="foo" value="<?php echo $_GET['foo']; ?>" />
<?php if(!$valid) : ?>
<p>Please enter a valid value.</p>
<?php endif; ?>
</div>
<div>
<input type="submit" id="bar" name="bar" value="Bar" />
</div>
</form>
<?php
endif;
?>
0
使用此:
<?php
class Validator {
public $data = array();
public $rules = array();
public $messages = array();
public $error = array();
public $pass = true;
public function __construct($options = null) {
foreach ($options as $option => $value) {
$this->$option = $value;
}
}
public function validate() {
foreach($this->rules as $k=>$v) {
$rules = explode('|',$v);
$pass = true;
foreach ($rules as $rule) {
$rule = explode(':',$rule);
switch ($rule[0]) {
case 'required':
if(empty($this->data[$k])) {
$pass = false;
}
break;
case 'min':
if(strlen($this->data[$k]) < $rule[1]) {
$pass = false;
}
break;
case 'max':
if(strlen($this->data[$k]) > $rule[1]) {
$pass = false;
}
break;
case 'equal':
if(strlen($this->data[$k]) != $rule[1]) {
$pass = false;
}
break;
case 'not':
if($this->data[$k] == $rule[1]) {
$pass = false;
}
break;
case 'allow':
$allowed = explode(',',$rule[1]);
if(!in_array($this->data[$k],$allowed)) {
$pass = false;
}
break;
case 'email':
if (!filter_var($this->data[$k],FILTER_VALIDATE_EMAIL)) {
$pass = false;
}
break;
case 'same':
if ($this->data[$k] != $this->data[$rule[1]]) {
if(!isset($this->error[$rule[1]])) {
$this->error[$rule[1]] = '';
}
$pass = false;
} else {
if(isset($this->error[$rule[1]])) {
$this->error[$k] = $this->error[$rule[1]];
}
}
break;
case 'unique':
if (egrediDB_checkUnique($rule[1],$k,$this->data[$k]) != 0) {
$pass = false;
}
}
if($pass == false) {
$this->pass = false;
$this->error[$k] = $this->messages[$k];
}
}
}
//print_r($this->error);
return array(
'error'=>$this->error,
'pass'=>$this->pass
);
}
}
?>
注:我做了一個自定義函數的數據庫檢查:
<?php
// Funktion für die Klasse Validator.php
function egrediDB_checkUnique($table,$column,$value) {
global $egrediDB;
return $egrediDB->count($table,array($column=>$value));
}
?>
<?php
$Validator = new Validator(array(
'data'=>$_POST['data'],
'rules' => array(
'firstname' => 'required',
'lastname' => 'required',
'password' => 'required|min:8',
'password_repeat' => 'required|same:password',
'email' => 'email|unique:user',
'email_repeat' => 'required|same:email',
'timezone' => 'required|not:-1',
'country' => 'required|not:-1|max:2',
'street' => 'required',
'postalcode' => 'required',
'city' => 'required',
),
'messages' => array(
'firstname' => 'Bitte geben Sie ein Vornamen ein',
'lastname' => 'Bitte geben Sie ein Nachnamen ein',
'password' => 'Bitte geben Sie ein Sicheres 8-stelliges Passwort ein',
'password_repeat' => 'Ihre Passwörter stimmen nicht überein',
'email' => 'E-Mail ist ungültig oder schon registriert',
'email_repeat' => 'Ihre E-Mails stimmen nicht überein',
'timezone' => 'Bitte wählen Sie eine Zeitzone',
'country' => 'Bitte wählen Sie ein Land',
'street' => 'required',
'postalcode' => 'required',
'city' => 'required',
),
));
echo json_encode($Validator->validate());exit;
?>
相關問題
- 1. 服務器端的PHP表單驗證
- 2. PHP註冊表單驗證
- 3. AngularJS - 表單的服務器端驗證
- 4. Ajax - 服務器端的驗證表單
- 5. ASP.NET Web表單服務器端驗證
- 6. PHP的表單庫,做服務器和客戶端驗證?
- 7. php +註冊表單不在遠程服務器上顯示
- 8. 驗證註冊表客戶端與JavaScript和服務器端與PHP
- 9. 現代客戶端/服務器身份驗證技術
- 10. 簡單的PHP表單驗證
- 11. 服務器端驗證php
- 12. 服務器端表單驗證PHP與多文件上傳
- 13. ASP.NET服務器端表單驗證+ jQuery驗證
- 14. Node.js客戶端響應的服務器端表單驗證
- 15. 驗證單選按鈕服務器端
- 16. 簡單驗證PHP
- 17. 簡單的PHP表單驗證和驗證符號
- 18. Rails 3 UJS幹客戶端+服務器端表單驗證
- 19. 驗證表單輸入客戶端(JS)與服務器端
- 20. MonoRail - 服務器端與客戶端表單驗證
- 21. asp.net表單驗證。服務器端或客戶端
- 22. Facebook,如何驗證註冊表單?
- 23. 對象檢測 - 服務器端 - 技術
- 24. 設計和服務器端技術
- 25. web服務器端技術利基
- 26. 服務器端技術與EXT-JS
- 27. 在JS客戶端表單驗證聯繫服務器
- 28. 簡單的php計算器與表單驗證
- 29. 基於PHP服務器端的聊天技術
- 30. ColdFusion recaptcha表單和服務器驗證
沒有「簡單」的方式,因爲每個人的驗證要求都不一樣。 – 2012-07-19 17:26:24
這個答案可能會幫助你:http://stackoverflow.com/questions/737385/easiest-form-validation-library-for-php – redbirdo 2012-07-19 17:35:24
請具體。 Zend Framework有[Zend_Validate](http://framework.zend.com/manual/en/zend.validate.introduction.html)。 – 2012-07-19 17:36:08