0

这是我的输入表单的样子:

<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'];
}

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

4

3 回答 3

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';
于 2013-08-15T02:15:35.880 回答
0

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

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

于 2013-08-15T02:14:07.437 回答
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()); 

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

于 2013-08-15T02:17:03.090 回答