0

IDで更新する更新フォームとクエリを作成しようとしています。しかし、データをフォームに入れると、データがなくてもすべてのフィールドが更新されるため、データベースでは「0」になります。データのあるフィールドだけを更新する必要があります。

皆さん、私を助けてくれますか?

未定義の変数があることを常に教えてくれます! そして、1 番目と 2 番目のフィールドのみを更新します。

ありがとう、これが私のコードです:

    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 に答える