0

ユーザーの誕生日をデータベースに送信するクラスまたはライブラリの一部である関数があります。何らかの理由で、その情報を保持する変数($this->birthdate)は、実際の誕生日ではなく0000-00-00の値を送信しています。

これが私のサンプルコードです:

function isAgeValid(){

     $birthDate1=$this->birth_year.'-'.$this->birth_month.'-'.$this->birth_day;
     $birthDate1 = explode("-", $birthDate1);
     $age = (date("md", date("U", mktime(0, 0, 0, $birthDate1[0], $birthDate1[1], $birthDate1[2]))) > date("md")
            ? ((date("Y")-$birthDate1[2])-1):(date("Y")-$birthDate1[2]));
    $this->birthdate=($birthDate1);

    return ($age > 17);
}
4

3 に答える 3

2

私の提案は、データベースのフィールドをTIMESTAMPと入力するように変更し、 Unixタイムスタンプとしてデータベースに保存することです。タイムスタンプから人間が読める日付を再度取得する必要がある場合は、$birthdate = date("Y-m-d",$timestamp);

$birthdate = strtotime($this->birth_year." ".$this->$birth_month." ".$this->birth_day
if($birthdate !== false)){
    mysql_query("INSERT INTO table(timestamp_field)VALUES('".$birthdate."')");
}

strtotime関数は$birthdateが数値であることを保証するため、これはSQLインジェクションからも保護します。

于 2012-12-06T03:41:11.253 に答える
1

より短い/よりきれい:

function isAgeValid() {
    $this->birthdate = $this->birth_year . '-' . $this->birth_month . '-' . $this->birth_day;
    $age = date('Y') - $this->birth_day - (date("md", strtotime($this->birthdate)) > date("md") ? 1 : 0);
    return ($age > 17);
}
于 2012-12-06T04:00:06.473 に答える
1
$birthDate1=$this->birth_year.'-'.$this->birth_month.'-'.$this->birth_day;
 $birthDate1 = explode("-", $birthDate1);

これは無意味であり、私の推測では、2 行目があなたの問題を引き起こしていると思います。後であなたは持っています

$this->birthdate=($birthDate1);

したがって、誕生日には日付の文字列ではなく配列があります。

于 2012-12-06T03:26:26.233 に答える