0

我真的搞砸了。有没有人可以帮助我知道使用 php.ini 进行服务器端验证的更简单方法或简单方法是什么?我真的很感激......

4

3 回答 3

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;
?>
于 2012-07-19T17:42:28.773 回答
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;

?>
于 2014-12-07T20:08:27.793 回答
0

正如 Marc B 所说,真的没有简单的方法。您可以使用第三方表单验证库/类或使用具有表单验证作为组件的框架。我个人使用Zend 框架,但这对你来说可能是多余的。

如果你自己做,你需要记住以下几点(根据你的需要加上更多):

  • 根据特定的所需格式,数据是否正确?(即,电子邮件、电话号码、邮政编码)您可以通过多种方式验证这一点。(常用表达)
  • 您是插入数据库还是返回页面?那你应该逃跑。简单的方法包括:htmlentitieshtmlspecialchars等。同样,这取决于您的具体需求
  • 您想强制执行最大限制吗?如果是这样,您将需要在服务器端执行此操作,因为 DOM 可以由用户操作,并且任何input级别限制都可以轻松更改。
  • 字段是必需的吗?确保POST变量存在且不为空。

您只需要写下您对表单的要求,然后从那里决定您将如何实施验证。

于 2012-07-19T17:35:51.200 回答