mysql检索用户的出生日期并填充选项标签

时间:2012-09-07 19:29:59

标签: php mysql date

我可以从数据库中检索出生日期,并在用户输入出生日期后将其填入选项标签中。但是,如果用户更新表单中的任何其他内容,则选项值将以错误的出生日期开始更新数据库。似乎它出于某种原因倒退了。怎么办我解决这个问题?

if($_POST){
$dob = date('Y-m-d',strtotime($_POST['year']."-". $_POST['month']."-".$_POST['day'])); 

$retur = $userObj->updateProfile($dob);
}

public function updateProfile($dob){
$db = db_mysql::getInstance();
$qr = $db->query("UPDATE ".USERS." SET dob = $dob WHERE id = '".$udata."'") or die(mysql_error()); 

    return $udata;
 }
<label>Date of Birth:</label>
<select style="background-color: #D6CFD4;" name="month">
 <option value="{date('F',strtotime($udata.dob))}">{date('F',strtotime($udata.dob))}</option>
 <option value="01">January</option>
 <option value="02">Febuary</option>
<select style="background-color: #D6CFD4;" name="day">
 <option value="{date('d',strtotime($udata.dob))}">{date('d',strtotime($udata.dob))}</option>
 <option value="01">01</option>
 <option value="02">02</option>
<select style="background-color: #D6CFD4;" name="year">
 <option value="{date('Y',strtotime($udata.dob))}">{date('Y',strtotime($udata.dob))}</option>
 <option value="2012">2012</option>
 <option value="2011">2011</option>

1 个答案:

答案 0 :(得分:0)

您提供的数据对您的查询不是很清楚,但请注意:

$ dob是我所理解的字符串,格式为YYYY-MM-DD。 updateProfile似乎没问题,但我不知道$ udata来自哪里。如果您发布的是完整函数,那么$ udata始终为空,您将返回空白。

至于模板,我不知道如何为选项按钮生成HTML。但是,你似乎可以覆盖现有的选项,即如果当月选择用户出生在2月份。第一行将与第三行重复:

<option value="{date('F',strtotime($udata.dob))}">{date('F',strtotime($udata.dob))}</option>
<option value="01">January</option>
<option value="02">Febuary</option>

一些建议:

您似乎没有检查输入。无论您认为您的应用程序有多安全,总会有人找到干扰它的方法。使用$ _POST ['year']等而不对它们进行消毒甚至将它们作为整数转换是不理想的。

您没有使用绑定参数,这是确保您不易受SQL注入攻击的必要条件。它可能是遥不可及的,但如果以某种方式,updateProfile将其收到$ dob:

$dob = "1;DROP users; --"

那你就麻烦了。

最后的建议是检查你的选择陈述。我会这样做:

<select style="background-color: #D6CFD4;" name="day">
    <?php 
        for ($i = 1; $i < 32; $i++) {
            $dob_day  = (int) date('d', strtotime($udata.dob));
            $selected = ($i == $dob_day) ? " selected='selected'" : '';

            echo "<option value='{$i}'{$selected}>{$i}</option>";
        }
    ?>
</select>

您可以重复月份和年份的过程。此过程虽然不一定会产生有效日期。例如,如果有人在当天选择31,而在月份选择02,即2月,那该怎么办。

最终建议是(如果可能的话)使用日期时间控件,这将有效地为您完成所有艰苦的工作。您只需将dob字符串传递给它,当用户更新其dob时,它将回发您的应用程序可以轻松解析的数据,更重要的是日期将始终有效,即2月31日的可能性至少从UI。 Example

HTH。