仅为!empty $ _POST值更新行

时间:2013-08-15 02:11:32

标签: php mysql

这就是我的输入表格:

<tr>
    <td class="standard_text_bold" width="25%">First name:</td> 
    <td class="standard_text_bold" width="25%"><input type="text" name="FirstName" value="<?echo $Name;?>" <?php if ($Status != "New customer") { echo "disabled"; } ?>></td>
</tr>
<tr>
    <td class="standard_text_bold" width="25%">Last name:</td>  
    <td class="standard_text_bold" width="25%"><input type="text" name="LastName" value="<?echo $Lastname;?>" <?php if ($Status != "New customer") { echo "disabled"; } ?>></td>
</tr>
<tr>
    <td class="standard_text_bold" width="25%">Email:</td>  
    <td class="standard_text_bold" width="25%"><input type="text" name="Email" value="<?echo $Email;?>" <?php if ($Status != "New customer") { echo "disabled"; } ?>></td>
</tr>

它非常通用,在特定情况下,几乎所有输入都将被禁用。

我将所有输入定义为

$LastName = $_POST['LastName'];
$FirstName = $_POST['FirstName'];

我运行更新查询

mysql_query("
    UPDATE data SET
        FirstName = '$FirstName',
        LastName = '$LastName',
        ProductName = '$Productname',
        ProductPriceUSD = '$Productpriceusd',
        ProductPriceEUR = '$Productpriceeur',
        ProductLink = '$Productlink',
        Status = '$Newstatus',
        Modified = now()
    WHERE ID = '$id'
") or die(mysql_error());   

现在我想更新那些非空的值。由于这是一般查询,是否可以验证查询本身内的变量?

我尝过这样的话:

if (empty($_POST['LastName'])) {
    $LastName = $row['LastName'];
}
if (!empty($_POST['LastName'])) {
    $LastName = $_POST['LastName'];
}

但由于某种原因它不起作用。有什么建议吗?

3 个答案:

答案 0 :(得分:2)

您可以通过在php中构建查询来只执行正确的set语句来完成此操作。

您也可以在SQL中执行此操作:

UPDATE data
    SET FirstName = (case when '$FirstName' = '' then FirstName else '$FirstName' end),
        LastName = (case when '$LastName' = '' then LastName else '$LastName' end),
        ProductName = (case when '$Productname' = '' then ProductName else '$ProductName' end),
        ProductPriceUSD = (case when '$Productpriceusd' = '' then Productpriceusd else '$Productpriceusd' end),
        ProductPriceEUR = (case when '$Productpriceeur' = '' then Productpriceeur else '$Productpriceeur' end),
        ProductLink = (case when '$Productlink' = '' then Productlink else '$Productlink' end),
        Status = (case when '$Newstatus' = '' then Status  else '$NewStatus' end),
        Modified = now()
    WHERE ID = '$id';

答案 1 :(得分:0)

添加表单验证。如果“名字”字段为空文本,则应显示错误消息并告诉用户再次填写表单。

这涵盖了我创造的每1000种表格中的999种。对于极少数情况,我有一个仅由字段组成的表单...然后我添加一个<input type="hidden">字段并在PHP中检查它。如果不存在,我知道没有提交任何内容。

答案 2 :(得分:0)

将您的查询修改为以下内容:

    $query="UPDATE data SET";


    if (!empty($_POST['FirstName']))
        {
        $query.=' FirstName="' . mysql_real_escape_string($_POST['FirstName'] . '",');
        }
    if (!empty($_POST['LastName']))
        {
        $query.=' LastName="' . mysql_real_escape_string($_POST['LastName'] . '",');
        }

    $query.="Modified = now() WHERE ID = '$id'";
    mysql_query($query) or die(mysql_error()); 

只有在查询字段为空时才附加字段。 此外,您可能希望切换到mysqli或PDO,因为不推荐使用mysql_ *函数。