簡體   English   中英

如何制作月份、日期和年份的下拉列表?

[英]How can you make drop down lists for months, dates, and years?

我在為學校做項目時遇到困難。 這是我必須做的:

作業:生日數學

第一部分

修改您的數學加法程序,要求用戶輸入 2 個數字並選擇加法、減法、乘法或除法。

他們還必須輸入對正確答案的猜測。

您還必須處理用戶試圖除以零的可能性......

在處理表單的頁面上,將他們的猜測與實際答案進行比較,並告訴他們是對還是錯。 給他們用戶友好的、有趣的、有創意的、禮貌的、有用的反饋。 確保您顯示回您從他們那里收集的所有表單信息。

提示:如果需要,可以使用 switch 語句,或者嘗試嵌套的 if/else 語句。

第二部分

還請他們輸入他們的出生日期。

在表單中使用三個下拉列表允許用戶選擇他們出生日期的月份、日期和年份。 應為月份使用數組,並且這些列表中的每一個都需要使用循環將值放入下拉列表中。

如果用戶在出生日期訪問您的網站,他們應該會看到一條“特殊消息”。

標准

用戶友好、有趣且富有創意

所有頁面結構合理,使用適當的 HTML 標簽,並使用嚴格的 XHTML 語法驗證 HTML5。 使用 HTML LINT Checker 檢查語法錯誤。

表單被驗證(檢查它們是否為空)

任何包含表單的頁面都使用 PHP_SELF 並包含粘性表單

表單字段可訪問並在必要時使用字段集

每個腳本都可以正常運行,沒有 PHP 錯誤或警告

所有 PHP/HTML 頁面都包含適當的注釋並利用“空白”使代碼易於閱讀(這包括 php 頁面的“查看源代碼”)。

所以,我已經完成了數學和單選按鈕,但我掙扎的部分是生日部分。

<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>Howdy Stranger</title>
</head>

<body>

<h1>PHP_SELF</h1>

<?php


//process the form if the submit button was pressed
if (isset($_POST['submit'])) {

    //form validation goes here







    /////////////////////////////////////////VARIABLES ARE BEING MADE HERE
    //simplify the form variables
    //later on we will do this in form validation

    //create a variable called firstname and store in it
    //the value from the POST array for firstname from the form
    $firstname = $_POST['firstname'];

    //creating variables for num1 and num2 that user inputed
    $num1 = $_POST['num1'];
    $num2 = $_POST['num2'];


    //creating a variable called guess and store it in the
    //value from the POST array for the guess from the form
    $guess = $_POST['guess'];



    $month = $_POST['month'];
    $year = $_POST['year'];
    $day = $_POST['day'];

    $date = $year ."-". $month ."-".$day;

    $date = date("Y-m-d",strtotime($date));


    if(date('m-d') == date('m-d', $date)) {
    // today is users birthday. echo out "nice" message
    echo "<p>Happy Birthday $firstname! You're nice and old now! Go have a good one!</p>\n";
    } else {
    echo "<p>Your birthday is on $date.</p>\n";
    }

//creates the variable "sum"
//after user chooses certian "action" the sum will
//then be calculated using $num1 and $num2  
if($_POST['action'] == "add") {
    $sum = $num1 + $num2;
} else if($_POST['action'] == "subtract") {
    $sum = $num1 - $num2;
} else if($_POST['action'] == "multiply") {
    $sum  = $num1 * $num2;
} else if($_POST['action'] == "divide") {
    $sum = $num1 / $num2;
}   


//echos out to the user and lets them know that they guessed correctly.
//also shows them their math
if ($sum == $guess) {
     echo "<p>Congratulations $firstname. You answered correctly with $guess, using the numbers $num1 and $num2.<p>\n";
} else {
     echo "<p>$firstname, you answered incorrectly. The correct answer is $sum.</p>\n";

}



} //end of the isset submit condional statement


//show the form if it is the user's first time her OR if any of the required forms are missing

if(!isset($_POST ['submit']) OR empty($firstname) OR empty($num1) OR empty($num2)) { ?>

<h2>Please fill out the following: </h2>



<!--FORM BEGINS-->
<form action= "<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<p><label for="firstname">Please enter your first name: </label>
<input id="firstname" type="text" size="30" name="firstname" value="<?php if(isset($firstname)) echo $firstname; ?>"/><p>

 <!--Challenge Dealio-->
 <p><label for="Num1">Please enter a number: </label>
<input id="Num1" type="number" size="30" name="num1" value="<?php if(isset($num1)) echo $num1; ?>" /></p>

<p><label for="Num2">Please enter another number: </label>
<input id="Num2" type="number" size="30" name="num2" value="<?php if(isset($num2)) echo $num2; ?>"/><p>

<p>Please choose one of the following: </p>
<p>
<!--All radio buttons need the same "name" but with different values-->
<!--they each need their own special id too-->
    <input name="action" id="add" type="radio" value="add" />Add<br />
    <input name="action" id="subtract" type="radio" value="subtract" />Subtract<br />
    <input name="action" id="multiply" type="radio" value="multiply" />Multiply<br />
    <input name="action" id="divide" type="radio" value="divide" />Divide<br />
</p>  

<p><label for="guess">Please put in a guess for the answer: </label>
<input id="guess" type="number" size="30" name="guess" value="<?php if(isset($guess)) echo $guess; ?>"/></p>

    <!--option allows user to select the year they were born-->
    <!--for simplicity sake, I am only doing from 1970-2015-->
    <!--it would be way too many option values to make-->
    <!--and would take up a lot of space in the code-->
    <!--hope this works for you Charla-->
    <select name="year" id="year">
        <option value="1">1970</option>
        <option value="2">1971</option>
        <option value="3">1972</option>
        <option value="4">1973</option>
        <option value="5">1974</option>
        <option value="6">1975</option>
        <option value="7">1976</option>
        <option value="8">1977</option>
        <option value="9">1978</option>
        <option value="10">1979</option>
        <option value="11">1980</option>
        <option value="12">1981</option>
        <option value="13">1982</option>
        <option value="14">1983</option>
        <option value="15">1984</option>
        <option value="16">1985</option>
        <option value="17">1986</option>
        <option value="18">1987</option>
        <option value="19">1988</option>
        <option value="20">1989</option>
        <option value="21">1990</option>
        <option value="22">1991</option>
        <option value="23">1992</option>
        <option value="24">1993</option>
        <option value="25">1994</option>
        <option value="26">1995</option>
        <option value="27">1996</option>
        <option value="28">1997</option>
        <option value="29">1998</option>
        <option value="30">1999</option>
        <option value="31">2000</option>
        <option value="32">2001</option>
        <option value="33">2002</option>
        <option value="34">2003</option>
        <option value="35">2004</option>
        <option value="36">2005</option>
        <option value="37">2006</option>
        <option value="38">2007</option>
        <option value="39">2008</option>
        <option value="40">2009</option>
        <option value="41">2010</option>
        <option value="42">2011</option>
        <option value="43">2012</option>
        <option value="44">2013</option>
        <option value="45">2014</option>
        <option value="46">2015</option>
    </select>


    <!--option allows user to select the month they were born.-->
    <select name="month" id="month"> 
        <option value="1">January</option>
        <option value="2">February</option>
        <option value="3">March</option>
        <option value="4">April</option>
        <option value="5">May</option>
        <option value="6">June</option>
        <option value="7">July</option>
        <option value="8">August</option>
        <option value="9">September</option>
        <option value="10">October</option>
        <option value="11">November</option>
        <option value="12">December</option>
    </select>


    <select name="day" id="day">
        <option value="1">1</option>
        <option value="2">2</option>
        <option value="3">3</option>
        <option value="4">4</option>
        <option value="5">5</option>
        <option value="6">6</option>
        <option value="7">7</option>
        <option value="8">8</option>
        <option value="9">9</option>
        <option value="10">10</option>
        <option value="11">11</option>
        <option value="12">12</option>
        <option value="13">13</option>
        <option value="14">14</option>
        <option value="15">15</option>
        <option value="16">16</option>
        <option value="17">17</option>
        <option value="18">18</option>
        <option value="19">19</option>
        <option value="20">20</option>
        <option value="10">21</option>
        <option value="11">21</option>
        <option value="12">22</option>
        <option value="13">23</option>
        <option value="14">24</option>
        <option value="15">25</option>
        <option value="16">26</option>
        <option value="17">27</option>
        <option value="18">28</option>
        <option value="19">29</option>
        <option value="20">30</option>
        <option value="31">31</option>
    </select>


<!--Submit Button-->
<input type="submit" name="submit" value="Enter" />
</form>


<?php
} //end form conditional statement
?>



</body>
</html>

現在必須有一種更簡單的方法來輸入所有年、日、月等,可能使用數組......但我就是想不通。

通過對數值使用for循環,對月份使用foreach循環(基於所有月份的數組),您可以輕松地顯示它。

  • foreach循環將遍歷您調用它的數組的所有元素,您可以使用它來回顯它們(或處理它們,但您只需要在此處回顯它們)。
  • for循環將遍歷數值,例如從 1 到 31,根據您的分配需要。 您選擇起點和終點,以及每次循環完成時的增量(對於您的作業,這是 1)。

這里一個巧妙的小功能是使用date()函數調用當前年份,因此您的腳本始終包含當前年份,而無需每年手動更新腳本。

下面給出一個例子。

<?php
$months = array("January", "February", "March", "Apil", "May", "June", 
                "July", "August", "September", "October", "November", "Descember");
$yearFrom = 1950; // The first year included in the drop-down for years

// $yearFrom = date("Y")-80; 
// Using this line instead, gives a dynamic range of years, always 80 years

// Echo out all years via a for-loop
echo '<select name="year" id="year">';
for ($yearFrom; $yearFrom <= date("Y"); $yearFrom++) {
    // Each $yearFrom represent a year, always incremented by 1
    echo "<option value=\"$yearFrom\">$yearFrom</option>";
}
echo '</select>';

// Echo out all months from the array $months
echo '<select name="month" id="month">';
foreach($months as $key=>$value) {
    // $key is the index of the array, starting at 0
    $numericMonth = $key + 1;
    echo "<option value=\"$numericMonth\">$value</option>";
}
echo '</select>';

// Echo out all days (1-31) via a for-loop
echo '<select name="day" id="day">';
for ($i=1; $i <= 31; $i++) {
    // Each $i represents a numeric value of days, from 1-31
    echo "<option value=\"$i\">$i</option>";
}
echo '</select>';
?>

關於$_SERVER['PHP_SELF']用法的簡短評論:你應該小心這一點,至少應該逃避它,因為它可以被利用。 看看w3schools.com談論表單驗證。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM