PHP连接零到期POST值

I need to add a zero to the date value that is posted as the MySQL date value will be used as a directory path to show added photos. Currently the directory is saved as 2012-2-5 and the MySQL entry is 2012-02-05.

I have tried the following, however it doesn't seem to be working:

$dates = array($_POST['photos_year'], $_POST['photos_month'], $_POST['photos_day']);
    foreach($dates as $date) {
    if (strlen($date) == 1) {
        $date = '0' . $date;
    }
    }
$photos->date = $dates[0] . "-" . $dates[1] . "-" . $dates[2];

I am using a for loop to create the date form, it might be easier for me to edit this however I haven't had any success:

<select name="photos_month"  id="photos_month" tabindex="3">
    <option value ="">- Month -</option>
    <?php 
    for($date=01;$date<=12;$date++) {
        if (isset($photos) && $date==$month) {
            echo "<option value='".$date."' selected='selected'>".$date."</option>";
        } else {
            echo "<option value='".$date."'>".$date."</option>";
        }
    }
    ?>
</select>

You need to update the foreach to be

foreach ($dates as &$date)

Currently, $date is a new symbol and will not overwrite the value. That should fix it, but it may be nice to have the correct strings in the options too. You can use str_pad to do that.

Check out the string pad function http://php.net/manual/en/function.str-pad.php

Along with the array map function http://php.net/manual/en/function.array-map.php

Using these two together would allow for you to go through each part of the date(array_map) and pad the value with a 0 (using str_pad)

Code would look something like this

$dates = array_map("padString",$dates);

function padString($string) {
    return str_pad($string,2,"0",STR_PAD_LEFT);
}

print_r($dates);

//Gives you Array ( [0] => 2012 [1] => 02 [2] => 05 )

When doing a foreach, the element variable $date is a new variable, a copy of the value from the array. You should use a key and update the original array.

foreach($dates as $key => $date) {
if (strlen($date) == 1) {
    $dates[$key] = '0' . $date;
}
}

Also, you're running that code on the year, you don't want to be adding a zero to the year, only the month and day.

use sprintf() For example:

$date = sprintf('%02d', $_POST['photos_day']);

You could make it a little simpler by just using sprintf with a format string;

$photos_year = '2012';
$photos_month = '2';
$photos_day = '5';

$result = sprintf("%4d-%02d-%02d", $photos_year, $photos_month, $photos_day);

// $result = '2012-02-05'