0

我正在尝试制作我的更新表单并查询以通过 id 更新。但是当我将数据放入表单时,即使它没有任何数据,他也会更新所有字段,因此在数据库中他得到“0”。我只需要更新有数据的字段。

你们能帮帮我吗?

它总是让我知道我有未定义的变量!并且只更新第一个和第二个字段!

谢谢,这是我的代码:

    if (isset($_POST['alterar'])) {

    $id_cliente = $_POST["id_cliente"];
    $nome_cliente = $_POST["nome_cliente"];
    $telefone_cliente = $_POST["telefone_cliente"];
    $morada_cliente = $_POST["morada_cliente"];
    $email_cliente = $_POST["email_cliente"];
    $servico = $_POST["servico"];
    $n_pecas = $_POST["n_pecas"];
    $tp_arranjo = $_POST["tp_arranjo"];
    $descricao = $_POST["descricao"];

    } 

    $query = "UPDATE `clientes` SET ";
if ($nome_cliente) $columns[] = "`nome_cliente`        = '{$nome_cliente}'";
if ($telefone_cliente) $columns[] = "`telefone_cliente`= '{$telefone_cliente}'";
if ($morada_cliente) $columns[] = "`morada_cliente`  = '{$morada_cliente}'";
if ($email_cliente) $columns[] = "`email_cliente`   = '{$email_cliente}'";
if ($servico) $columns[] = "`servico`         = '{$servico}'";
if ($n_pecas) $columns[] = "`n_pecas`         = '{$n_pecas}'";
if ($tp_arranjo) $columns[] = "`tp_arranjo`      = '{$tp_arranjo}'";
if ($descricao) $columns[] = "`descricao`       = '{$descricao}'";

$columns = implode(",",$columns);
$query .= $columns . " WHERE id_cliente='$id_cliente'";


    mysql_query($query);

    ?>
4

1 回答 1

1

如果您有要更新的值,您需要将查询更改为仅列出要更新的列。这需要根据条件动态构建查询字符串。

例子:

$query = "update `clientes` set ";
if ($nome_cliente) $columns[] = "`nome_cliente`= '{$nome_cliente}'";
if ($telefone_cliente) $columns[] = "`telefone_cliente`= '{$telefone_cliente}'";
//etc..

$columns = implode(",",$columns);
$query .= $columns . " where id_cliente='$id_cliente'";

注意:正如其他人所提到的,这并不安全!在将用户输入传递到数据库之前,您应该始终对其进行清理。

于 2012-12-04T17:28:55.087 回答