0

我正在尝试编辑数据(存储在数据库中)。这是 display.php。首先它显示来自数据库的数据(如果没有数据,则为空白字段)。然后编辑按钮来编辑数据库。

<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中我只是更新了数据库。但是,如果我只想更改 1 个字段怎么办。(问题是所有字段都会更新)。这里是 edit.php

<?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 回答
0

这意味着请求的 WHERE 子句不起作用。检查是否在变量 $t 中传递了引号 " 以便在 WHERE 子句之前关闭 $sql

于 2013-11-03T05:31:26.730 回答