首页 > 解决方案 > 如何仅更新数据库上的选择字段

问题描述

我已经创建了一个用户帐户页面,他们可以在其中更新他们的信息。

对于我的第一个问题,我将以生日为例(它使用三个下拉栏,它们保存为变量$dobday $dobmonth$dobyear)如果用户只输入一个变量 - 例如$dobday,然后他们按下“更新”,php 会将其保存到数据库,但是这会保存不完整的出生日期,我曾考虑在表单上添加“requirerd”功能,但是如果用户只想填写一条信息,我希望它是可选的。有什么方法可以通过 if 语句或我不知道的其他函数来解决这个问题?

其次,如果我在电话号码字段中输入一个数字并将表单上的其余字段留空,则当数据库更新时,其他未填写但在数据库中保存有内容的字段将被擦除。

我还在学习网页设计,所以请原谅我糟糕的代码。非常感谢您的帮助和时间:)

HTML 表单:

<form class="containerformAccounts" method="post" action="accountpageForm.php" >
<div class="container">

    <h1>Edit your account</h1>

    <hr>
        <h3>Enter your telephone number</h3>
        <label for="mobNumber"><b><i>Phone Number:</i></b></label>
        <input type="mobNumber" maxlength="11" name="mobNumber" id="mobNumber" placeholder="Enter phone number"> <!--ommiting 'required' as this part is optional-->

        </br>

        <h3>Enter your address</h3>

        <label for ="addressLine"><b><i>Address Line:</i></b></label>
        <input type="addressLine" name="addressLine" id="addressLine" placeholder="Enter your address line">

        <label for ="townCity"><b><i>Town/City:</i></b></label>
        <input type="townCity" name="townCity" id="townCity" placeholder="Enter your town/city">

        <label for ="postcode"><b><i>Postcode:</i></b></label>
        <input type="postcode" name="postcode" id="postcode" placeholder="Enter your Postcode">

        <label for ="country"><b><i>Country:</i></b></label>
        <input type="country" name="country" id="country" placeholder="Enter your country">

        </br>

        <h3>Enter your birthdate</h3>

        <label for ="dob-day"><b><i>Birthday:</i></b></label>

        <select name="dobday" id="dobday">
        <option value="Day">Day</option>
        <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="21">21</option>
        <option value="22">22</option>
        <option value="23">23</option>
        <option value="24">24</option>
        <option value="25">25</option>
        <option value="26">26</option>
        <option value="27">27</option>
        <option value="28">28</option>
        <option value="29">29</option>
        <option value="30">30</option>
        <option value="31">31</option>
    </select>

        <select name="dobmonth" id="dobmonth">
        <option value="Month">Month</option>
        <option value="January">January</option>
        <option value="Feburary">Feburary</option>
        <option value="March">March</option>
        <option value="April">April</option>
        <option value="May">May</option>
        <option value="June">June</option>
        <option value="July">July</option>
        <option value="August">August</option>
        <option value="September">September</option>
        <option value="October">October</option>
        <option value="November">November</option>
        <option value="December">December</option>
    </select>

        <select name="dobyear" id="dobyear">
        <option value="Year">Year</option>
        <option value="1950">1950</option>
        <option value="1951">1951</option>
        <option value="1952">1952</option>
        <option value="1953">1953</option>
        <option value="1954">1954</option>
        <option value="1955">1955</option>
        <option value="1956">1956</option>
        <option value="1957">1957</option>
        <option value="1958">1958</option>
        <option value="1959">1959</option>
        <option value="1960">1960</option>
        <option value="1961">1961</option>
        <option value="1962">1962</option>
        <option value="1963">1963</option>
        <option value="1964">1964</option>
        <option value="1965">1965</option>
        <option value="1966">1966</option>
        <option value="1967">1967</option>
        <option value="1968">1968</option>
        <option value="1969">1969</option>
        <option value="1970">1970</option>
        <option value="1971">1971</option>
        <option value="1972">1972</option>
        <option value="1973">1973</option>
        <option value="1974">1974</option>
        <option value="1975">1975</option>
        <option value="1976">1976</option>
        <option value="1977">1977</option>
        <option value="1978">1978</option>
        <option value="1979">1979</option>
        <option value="1980">1980</option>
        <option value="1981">1981</option>
        <option value="1982">1982</option>
        <option value="1983">1983</option>
        <option value="1984">1984</option>
        <option value="1985">1985</option>
        <option value="1986">1986</option>
        <option value="1987">1987</option>
        <option value="1988">1988</option>
        <option value="1989">1989</option>
        <option value="1990">1990</option>
        <option value="1991">1991</option>
        <option value="1992">1992</option>
        <option value="1993">1993</option>
        <option value="1994">1994</option>
        <option value="1995">1995</option>
        <option value="1996">1996</option>
        <option value="1997">1997</option>
        <option value="1998">1998</option>
        <option value="1999">1999</option>
        <option value="2000">2000</option>
        <option value="2001">2001</option>
        <option value="2002">2002</option>
        <option value="2003">2003</option>
        <option value="2004">2004</option>
        <option value="2005">2005</option>
        <option value="2006">2006</option>
        <option value="2007">2007</option>
        <option value="2008">2008</option>
        <option value="2009">2009</option>
        <option value="2010">2010</option>
        <option value="2011">2011</option>
        <option value="2012">2012</option>
        <option value="2013">2013</option>
        <option value="2014">2014</option>
        <option value="2015">2015</option>
        <option value="2016">2016</option>
        <option value="2017">2017</option>
        <option value="2018">2018</option>
        <option value="2019">2019</option>
        <option value="2020">2020</option>

    </select>

        </p>

        <hr>

        <h3>Change your password</h3>



        </p><a href='passwordChange.php'>Change your password</a> </br>

        </br>

        <input type='submit' name='submit' value= 'Update'>
        </hr>

    </hr>

</div>

PHP:

    <?php

session_start();//creating session

$user=$_SESSION['firstName']; 

if (isset($_POST['submit'])){



    $connectDB = mysqli_connect("localhost","root","") or die("cant connect");  //proving the database connection details and saving it as a variable
    mysqli_select_db($connectDB, "registration"); //table name


// BIRTHDAY

    $updateDBvalues=array(); //creating array to be used in query

    $updateArray=array(); //creating array

    $dobday=$_POST['dobday']; //importing variables

    $dobmonth=$_POST['dobmonth'];//importing variables

    $dobyear=$_POST['dobyear'];//importing variables


//ADDRESS

    $addressLine=$_POST['addressLine'];//importing variables

    $townCity=$_POST['townCity'];//importing variables

    $postcode=$_POST['postcode'];//importing variables

    $country=$_POST['country'];//importing variables

//NUMBER

    $mobNumber=$_POST['mobNumber'];//importing variables

//NUMBER BELOW


    if(!empty($mobNumber))
        $updateArray[]="mobNumber='".$mobNumber."'";

//ADDRESS BELOW

    if(!empty($addressLine))//if the variables is NOT empty 
        $updateArray[]="addressLine='".$addressLine."'";//add the variable to the array

    if(!empty($townCity))//if the variables is NOT empty 
        $updateArray[]="townCity='".$townCity."'";//add the variable to the array

    if(!empty($postcode))//if the variables is NOT empty 
        $updateArray[]="postcode='".$postcode."'";//add the variable to the array

    if(!empty($country))//if the variables is NOT empty 
        $updateArray[]="country='".$country."'";//add the variable to the array

//BIRTHDAY BELOW    

    if(!empty($dobday))//if the variables is NOT empty 
        $updateArray[]="dobday='".$dobday."'";//add the variable to the array

    if(!empty($dobmonth))//if the variables is NOT empty 
        $updateArray[]="dobmonth='".$dobmonth."'";//add the variable to the array

    if(!empty($dobyear))//if the variables is NOT empty 
        $updateArray[]="dobyear='".$dobyear."'";//add the variable to the array

    $updateDBvalues=$updateArray; 

    $updateDBvalues_imploded=implode(',',$updateDBvalues); // takes the array and makes one string

    if(!empty($updateDBvalues)){ //if the array is NOT empty
        $query="UPDATE users SET $updateDBvalues_imploded WHERE firstName='$user'";//sql query to save entries into table

        $connQuery=mysqli_query($connectDB,$query);//querys database


        die("Succesfully updated, return to <a href='accountPage.php'>Accounts page</a>");//successful query, provides link for user to return to account page
    }else{
        die ("Unable to save new infomation to the database, please try again. <a href='accountPage.php'>Accounts page</a>");//kills program, outputting that the query was unsuccessful, provides link for user to return to account page
    }

}
?>

标签: phphtmlsql

解决方案


好吧,您不想取消以前保存在字段中的数据。为此,您可以在 MySQL 中使用 COALESCE 函数。它返回参数中的第一个非空值。

例如,您可以这样设置字段:

$updateArray[]="dobyear= coalesce('".$dobyear."', dobyear)"

但是,您真的想使该字段无效的情况呢?更好的方法是用数据库中的数据填充表单。现在,您可以简单地保存包含用户更改的完整表单。


推荐阅读