我有这个更新语句(PHP代码):
$sql1="UPDATE `utilizatori` " .
"SET utilizator='$utilizator', parola='$parola1', nume='$nume', " .
"`prenume='$prenume', varsta='$varsta', localitate='$localitate'` ";
WHERE parola='".$_SESSION['parola']."'";
这将通过html表单更新一些MySQL表字段。例如,用户想要改变他的名字。他完成了名称字段,然后按下提交。使用上面的UPDATE语句将数据发送到表中。
问题是它还使用用户未完成的空白值更新表。我不希望添加空白值。
如何阻止发送到表格中的空白值?
答案 0 :(得分:2)
如果您真的想在update
中执行此操作,可以将set
语句更改为:
set utilizator = (case when '$utilizator' <> '' then '$utilizator' else utilizator end),
. . .
如果新值为空,则使用前一个值。
您也可以通过更新已更改的字段在应用程序级别执行此操作。
并且,您应该使用参数化查询,而不是直接将值替换为字符串。不过这是另一个问题。
答案 1 :(得分:1)
$updateClauseArr = Array();
foreach($_REQUEST as $key => $val){
if(is_numeric($val)){
$updateClauseArr[] = '$key = '.(int) $val;
}else{
$updateClauseArr[] = "$key = '".htmlentities($val,ENT_QUOTES,'UTF-8')."'";
}
}
if(sizeof($updateClauseArr) > 0){
$updateSet = implode(',' ,$updateClauseArr);
$sql1="UPDATE `utilizatori` SET ".$updateSet." WHERE parola='".$_SESSION['parola']."'";
}
答案 2 :(得分:1)
您可以做两件事来解决这个问题。一种是预加载表单中的数据。因此,当用户更改其名称时,其他字段已经加载了原始信息。 第二个选项是根据具有值的字段创建更新查询。
选项1的示例:
<?php
//
//GET THE DATA FROM A SELECT QUERY HERE
//FOR EXAMPLE: $sql = "SELECT * FROM `utilizatori` WHERE parola='".$_SESSION['parola']."'";
//Put the data of the sql row in a variable e.g. $sqlRow.
?>
<!--Use variable in your form!-->
<form>
...
...
<input name="nume" value="<?=$sqlRow['nume']?>"/>
<input name="utilizator" value="<?=$sqlRow['utilizator']?>"/>
...
...
</form>
选项2的示例:
<?php
//Catch post data
if($_POST)
{
$updateString = "";
foreach($_POST as $inputField => $inputValue)
{
if($inputValue != "")
{
$updateString .= $inputField." = '".$utilizator."',";
}
}
//Strip last ,
$updateString = substr($updateString,0,-1);
if($updateString != "")
{
//Your query would be
$sql1 = "UPDATE `utilizatori` SET ".$updateString." WHERE parola='".$_SESSION['parola']."'";
}
}
?>
答案 3 :(得分:0)
查看用户提交的字段值。然后循环迭代有值的字段,使变量连接到更新查询。