php - 如何仅更新数据库上的选择字段
问题描述
我已经创建了一个用户帐户页面,他们可以在其中更新他们的信息。
对于我的第一个问题,我将以生日为例(它使用三个下拉栏,它们保存为变量$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
}
}
?>
解决方案
好吧,您不想取消以前保存在字段中的数据。为此,您可以在 MySQL 中使用 COALESCE 函数。它返回参数中的第一个非空值。
例如,您可以这样设置字段:
$updateArray[]="dobyear= coalesce('".$dobyear."', dobyear)"
但是,您真的想使该字段无效的情况呢?更好的方法是用数据库中的数据填充表单。现在,您可以简单地保存包含用户更改的完整表单。
推荐阅读
- rxjs - 如果项目少于缓冲区计数,如何在发射时获得与 bufferCount 类似的行为
- typescript - FaunaDB:文档类型应该如何导入?
- html - Bootstrap 4卡页脚填充列的剩余高度
- apache-spark - RDD中用户定义的哈希分区与键
- python - 如何在 Python 上使用 map 和 set
- filter - 防止加载有 100 万成员的过滤器
- c# - 如何将捐赠金额添加到我的数据库
- spring - 将可分页对象和搜索参数发送到 Spring Boot 端点
- ios - 输出视频比录制的预览视频短
- dependency-injection - 在 AutoFac 中,为什么我的通用存储库的 RegisterGeneric 调用顺序仅适用于最后一个注册的存储库?