情况是我的程序的目的是更新员工的详细信息。用户可以选择他/她想要更新的信息(姓名、职位、部门和标签(告诉他/她是否仍受雇于公司)。他/她可能会也可能不会按照自己的意愿填写所有细节。换句话说,如果他/她不打算更改某些信息,他/她可以将其留空。
我的问题是更新。它现在正在更新。但是,例如,如果用户只想更改该员工的职位信息,他/她会将姓名、部门留空(标记默认设置为yes,因此总是有一个值)。当用户单击提交按钮时。它会更新表格,但它会将空文本框更新为空格。意思,在例子中。在数据库中,名称和部门将包含"空格"。
我的目标是,如果用户将文本框留空,则应保留原始值。它只会改变输入的值。
这是我在empinfo.php中使用的代码(注意:这是一个弹出窗口,emp来自索引,但没有问题:D)
<body>
<center>
<table class="main" border="0" cellpadding="0" cellspacing="0">
<form action="empinfo.php" method="POST">
<input type='hidden' name='submitted' id='submitted' value='1'/>
<input type='hidden' name='eid' id='eid' value= '<?php echo $_GET['emp']?>' />
<fieldset>
<div class='container'>
<label for='ename' >Employee name:</label><br/>
<input type='text' name='ename' id='ename' maxlength="50" /><br/><br/>
</div>
<div class='container'>
<label for='pos' >Position:</label><br/>
<input type='text' name='pos' id='pos' maxlength="50" /><br/><br/>
</div>
<div class='container'>
<label for='dep' >Department/Division:</label><br/>
<input type='text' name='dep' id='dep' maxlength="100" /><br/><br/>
</div>
<div class='container'>
<label for='tag' >Employee Tag:</label><br/>
<select name="tag" id="tag">
<option value="Y">Yes</option>
<option value="N">No</option>
</select> <br/><br/>
</div>
<div class='container'>
<input type='submit' name='Submit' value='Submit' />
</div>
</fieldset>
</form>
</div>
<?php
$con=mysql_connect('localhost','root','mariel') or die(mysql_error());
mysql_select_db('intranet',$con);
if(isset($_POST['submitted']))
{
$sql = "SELECT * FROM gpl_employees_list where emp_id='".$_POST['eid']."'";
$result = mysql_query($sql) or die (mysql_error());
if(!$result || mysql_num_rows($result) <= 0)
{
return false;
}
$qry = "UPDATE gpl_employees_list SET emp_nme = '".$_POST['ename']."', emp_pos = '".$_POST['pos']."', emp_dep = '".$_POST['dep']."', emp_tag = '".$_POST['tag']."' WHERE emp_id = '".$_POST['eid']."' ";
mysql_query($qry) or die (mysql_error());
?><script>window.close();</script><?php
}
?>
</table>
<?php mysql_close($con); ?>
</center>
</body>
$col['emp_name'] = (trim($_POST['ename']))?trim($_POST['ename']):false;
$col['emp_pos'] = (trim($_POST['pos']))?trim($_POST['pos']):false;
$col['emp_dep'] = (trim($_POST['dep']))?trim($_POST['dep']):false;
$col['emp_tag'] = (trim($_POST['tag']))?trim($_POST['tag']):false;
// add a val in $col[] with key=column name for each corresponding $_POST val
$queryString ="UPDATE `gpl_employees_list` SET ";
foreach($col as $key => $val){
$queryString .= ($val)?"`".$key."`='".$val."',":"";
}
$queryString = substr($queryString ,0 ,strlen($queryString) - 1 )." WHERE `emp_id` = '".$_POST['eid']."'";
mysql_query($queryString);
在这种情况下,您的脚本如何知道空数据是否是故意的(我已经决定删除字段的内容),而不是(正如您试图实现的那样)?最简单的选择是跳过所有返回为空的字段,不过你可能想把你的应用程序设计得更好一点。最好在页面的表单字段中设置所有这些值。
除了你的问题,还可以考虑一下保护你的脚本。简单地随意使用$_POST和$_GET值不是一个好主意。这方面有很多好的资源。
只需进行一些检查。例如,使用以下内容:
MoreSQL='';
if($_POST['ename']!='') {
$MoreSQL.='emp_nme = "'.$_POST['ename'].'"';
}
if($_POST['emp_pos']!='') {
if($MoreSQL!='') $MoreSQL.=', '; // add comma if $MoreSQL is not empty any more
$MoreSQL.='emp_pos = "'.$_POST['emp_pos'].'"';
}
if($_POST['emp_dep']!='') {
if($MoreSQL!='') $MoreSQL.=', '; // add comma if $MoreSQL is not empty any more
$MoreSQL.='emp_dep= "'.$_POST['emp_dep'].'"';
}
if($_POST['tag']!='') {
if($MoreSQL!='') $MoreSQL.=', '; // add comma if $MoreSQL is not empty any more
$MoreSQL.='emp_tag= "'.$_POST['emp_tag'].'"';
}
if($_POST['eid']!='') {
if($MoreSQL!='') $MoreSQL.=', '; // add comma if $MoreSQL is not empty any more
$MoreSQL.='emp_id = "'.$_POST['eid'].'"';
}
if($MoreSQL!='') {
$qry='UPDATE gpl_employees_list SET '.$MoreSQL.' WHERE emp_id = '.($_POST['eid']+0).'';
mysql_query($qry) or die (mysql_error());
}else{
echo 'nothing to update';
}