0

checkdate();複数の投稿フィールド (例: $_POST['month']$_POST['day']$_POST['year'])から送信された日付をチェックする PHP 関数を使用しています。checkdate()フィールドが選択されていて、日付が有効な日付であっても、関数は false を返します。

なぜこれが起こるのか理解できませんか?

編集 #1: 実際のコードの詳細ビュー。

コードは $_POST によって送信され、OOP クラス "new Register" に入力されます

$register=new register(...., $_POST['month'], $_POST['day'], $_POST['year'],...);


$this->birthdate=$byear.'-'.$bmonth.'-'.$bday;
$this->b_month=(int)bmonth;
$this->b_day=(int)bday;
$this->b_year=(int)byear;

続いて生年月日チェック

    public function checkBirthdate(){

        if(checkdate($this->b_month, $this->b_day, $this->b_year)){

            return true;
        } else {

            return false;
        }
    }
4

2 に答える 2

1

クラスregisterのニーズは次のようになります。

class register
{
    protected $b_month;
    protected $b_day;
    protected $b_year;

    public function __construct(...., $month, $day, $year, ...)
    {
        $this->b_month = (int)$month;
        $this->b_day = (int)$day;
        $this->b_year = (int)$year;
    }

    public function checkBirthdate(){
        if(checkdate($this->b_month, $this->b_day, $this->b_year)){
            return true;
        } else {
            return false;
        }
    }
}

// usage example
$r = new register(...., $_POST['month'], $_POST['day'], $_POST['year'],...);
echo $r->checkBirthdate() ? 'Valid!' : 'Not Valid!';

質問のコードに基づいて、 register オブジェクトを作成しますがb_monthb_dayb_yearを別のものに割り当てます。

于 2012-12-04T08:57:51.230 に答える
0

あなたはこのようなことをすべきです

class Register {
 private $b_year;
 private $b_day;
 private $b_year;

public function __construct( $month,$day,$year )
{
 $this->b_year = $year;
 $this->b_month = $month;
 $this->b_day;
}

public function checkValidDate()
{
  if( checkdate($this->b_month,$this->b_day,$this->b_year) ) return true;
  return false

}

}

if( !isset( $_POST ) ) {  
<form action="" type="POST">
Month: <select name="month">
<option value="1">January</option>
<option value="2">February</option>
so on...so forth..
</select>

Day: <select name="day">
Day<option value="1">1</option>
<option value="2">2</option>
so on...so forth..
</select>

Year: <select name="year">
<option value="2012">2012</option>
<option value="2011">2011</option>
so on...so forth..
</select>
<input type="submit" value="Submit" />
</form>
} else {
$register=new register($_POST['month'], $_POST['day'], $_POST['year']);
    if( $register->checkValidDate() ) echo "Valid!";
    else echo "Invalid!";
}
于 2012-12-04T09:05:14.207 に答える