PHP从birthdate多个字段创建一个新变量
我正在使用一个PHPPHP从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
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提交数据。@KevinKarimuvar\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!";
}