Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP从birthdate多个字段创建一个新变量_Php_Forms_Date_Post - Fatal编程技术网

PHP从birthdate多个字段创建一个新变量

PHP从birthdate多个字段创建一个新变量,php,forms,date,post,Php,Forms,Date,Post,我正在使用一个PHPcheckdate()功能,用于检查多个post字段提交的日期(例如,$\u post['month'],$\u post['day'],$\u post['year'])。checkdate()函数返回false,即使选择了字段并且日期是有效日期 我不明白为什么会这样 编辑#1:实际代码的详细视图 代码由$u POST提交并输入OOP类“新寄存器” 然后检查生日 public function checkBirthdate(){ if(checkd

我正在使用一个PHP
checkdate()功能,用于检查多个post字段提交的日期(例如,
$\u post['month']
$\u post['day']
$\u post['year']
)。
checkdate()
函数返回false,即使选择了字段并且日期是有效日期

我不明白为什么会这样

编辑#1:实际代码的详细视图

代码由$u POST提交并输入OOP类“新寄存器”

然后检查生日

    public function checkBirthdate(){

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

            return true;
        } else {

            return false;
        }
    }

您的
注册
课程需要如下所示:

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_月
b_日
b_年
分配给其他对象。

您应该这样做

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!";
}
类寄存器{
私人每年$b_;
私人$b_日;
私人每年$b_;
公共功能构造($month、$day、$year)
{
$this->b_year=$year;
$this->b_month=$month;
$this->b_day;
}
公共函数checkValidDate()
{
如果(checkdate($this->b_month,$this->b_day,$this->b_year))返回true;
返回错误
}
}
如果(!isset($_POST)){
月份:
一月
二月
等等……等等。。
日期:
第1天
2.
等等……等等。。
年份:
2012
2011
等等……等等。。
}否则{
$register=新寄存器($发布['month']、$发布['day']、$发布['year']);
如果($register->checkValidDate())回显“Valid!”;
否则回声“无效!”;
}

我建议您打印变量,看看是否得到它们correctly@ibrahim:我该怎么做?我正在使用jQuery AJAX提交数据。@KevinKarimu
var\u dump($\u POST)并查看其中的内容。此外,只要是用户输入,您就需要验证它。我将其转换为int(
$year=(int)$\u POST['year']
)​​变量的值必须是整数。另外,确保日期和月份不以0开头,即“01”不是checkdate()函数的有效值。@ibrahim:我刚刚意识到了一些事情。提交的数据是使用文本类型还是实际整数有关系吗?好的!因此,在执行复制构造函数时,我确实需要包含(int)?实际上,checkdate调用不需要int,但无论如何都值得这样做,因为它会清除变量中不需要的字符。问题仍然存在。我想弄清楚这里到底出了什么问题。代码已经更新了。我发现表单正在提交它应该提交的日期。但是,在创建新的Register对象并且构造完成它的工作之后,日期以某种方式被更改为“0”。@KevinKarimu您可能有错误的帖子名称,请双击
$\u post['month']
匹配您的输入名称=month等。$\u post的数据来自选择日期的下拉菜单。问题可能来自那里吗?是的..可能..试着..你试着回应那些价值观了吗?如果是,值是什么?出于某种奇怪的原因,我以“0”结尾。我发现表单是如何提交“0”的。它介于提交表单和复制构造函数之间。复制构造函数中的所有内容都是$this->b_month=$b month;我更新了上面的代码。请打印($\u POST),然后将输出粘贴到此处
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!";
}