0

データ(DBに保存されている)を編集しようとしています。これがdisplay.phpです。まず、DB からのデータを表示します (データがない場合は空白のフィールド)。次に、編集ボタンを押してDBを編集します。

<html>
<body>
<?php

if(!isset($_POST['edit_pro']))
{
?>
      //get data from DB and display in table.


<form>
<input type="submit" name= "edit" value="edit">
</form>

<?php
}
else
{
?>
<form name="edit_DB" action="edit.php">

//edit ...2 <select> fields and 1 text field.

//submit button
</form>
<?php
}
?>

edit.php では、DB を更新するだけです。しかし、1 つのフィールドだけを変更したい場合はどうすればよいでしょうか (問題はすべてのフィールドが更新されることです)。

<?php
include_once 'db_connect.php';

$db_con = dbConnect("dbname");

$uid = $_SESSION['uid'];

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

    $c = $_POST['c'];

    $s = $_POST['list'];

    $t = $_POST['nm'];

    $a = $_POST['a'];

    $sql = "UPDATE `user` SET `c` = ?, `s` = ?, `t` = ? WHERE u_id = ?";    

    $q = $db_con->prepare($sql);

    $q->execute(array($c,$s,$t,$uid));



    header("Location:display.php");

}
?>
4

2 に答える 2

1
$sql = "UPDATE `user` SET `c` = ?, `s` = ?, `t` = ? WHERE u_id = ?"; 

このクエリは次のことを意味します。

  1. テーブルユーザーの更新
  2. u_id = [何らかの値] であるこのテーブルの各行
  3. フィールド C と S と T を他の個別の値に設定する

したがって、クエリは一度に 3 つのフィールドを更新しますが、問題はありません。

このロジックを変更する場合、クエリと引数を変更する必要がある一部のフィールドのみを更新するには、たとえば、c使用のみを変更する場合:

$sql = "UPDATE `user` SET `c` = ? WHERE u_id = ?";    
$q = $db_con->prepare($sql);
$q->execute(array($c, $uid)); // this array binds values to question marks, so count should be the same, we have 2 ? - we must use 2 variables

c と t の場合:

$sql = "UPDATE `user` SET `c` = ?, `t` = ? WHERE u_id = ?";    
$q = $db_con->prepare($sql);
$q->execute();

引数の数が正確にわからない場合は、次のような動的クエリの構築が必要です。

$arr = array();
$sqlA = array();
if (isset($_POST['c']) && $_POST['c']) {
    $arr[] = $_POST['c'];
    $sqlA[] = '`c`=?';
}
if (isset($_POST['s']) && $_POST['s']) {
    $arr[] = $_POST['s'];
    $sqlA[] = '`s`=?';
}
if (isset($_POST['t']) && $_POST['t']) {
    $arr[] = $_POST['t'];
    $sqlA[] = '`t`=?';
}

if (count($arr)) {
    $sql = 'UPDATE `user` SET '.implode($sqlA, ',').' where u_id = ?';
    $arr[] = $uid;

    $q = $db_con->prepare($sql);
    $q->execute($arr);
}
于 2013-11-03T05:55:51.127 に答える