我有一个下拉列表是aMan,bMan,cMan。我从下拉列表中选择其中任何一个。所以无论我从下拉列表中选择什么,我都希望根据列表更新记录。以下更新查询正在更新我的所有记录,因为我为每个记录添加了“$ action_points”。
例如。如果我从下拉列表中选择了bMan,那么在更新表中将根据user_id仅更新bMan记录。如果我选择aMan然后更新表,它将仅更新aMan with 10.它不会对其他人产生影响。
我在更新查询时遇到问题。您能帮我更新查询吗?
$result = $conn->query($sql_user);
if (isset($result->num_rows) > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
$action_type=$row['action_type'];// Value will be aMan,bMan, cMan
$action_points=$row['action_points']; //10, 20, 30
}
}
$sql = "UPDATE man SET aMan='$action_points',bMan='$action_points', cMan='$action_points' where user_id='$user_id'";
$result = $conn->query($sql);
更新表
答案 0 :(得分:1)
您从选择下拉列表中选择它意味着它将传递该值,即您拥有aMan,bMan或cMan。
所以你可以这样做,
$action_type = $_GET['action_type'];
$sql = "update man set `$action_type` = '$action_value' where id = $user_id";
上面是一个例子。
答案 1 :(得分:1)
首先,您应该用if (isset($result -> num_rows) >0 )
替换if(isset($result)) && ($result->num_rows>0))
。第一个条件返回行数(至少为0),然后检查它是否已设置。因此,isset
将始终返回true,即使未设置$result
也是如此。第二个条件解决了这个问题
您要更新type
列表,为什么不使用它?
例如:
$result = $conn->query($sql_user);
if(isset($result)) && ($result->num_rows>0)) {
// output data of each row
while($row = $result->fetch_assoc()) {
$action_type=$row['action_type'];// Value will be aMan,bMan, cMan
$action_points=$row['action_points']; //10, 20, 30
}
}
$sql = "UPDATE man SET $action_type = $action_points WHERE user_id='$user_id'";
$result = $conn->query($sql);
这将自动更新所需的列
答案 2 :(得分:0)
你应该在你的查询中使用AND
UPDATE man SET aMan='$action_points' AND bMan='$action_points' AND cMan='$action_points' where user_id='$user_id'"
或者使用多个更新查询,这意味着一旦更新aMan行然后查询bMan行等等。
答案 3 :(得分:0)
问题是因为您一次更新三列,您必须使其成为条件:
$action_type=$row['action_type'];// Value will be aMan,bMan, cMan
$action_points=$row['action_points']; //10, 20, 30
$column = '';
if($action_type == 'aMan'){
$column = 'aMan';
}
else if($action_type == 'bMan'){
$column = 'bMan';
}
else if($action_type == 'cMan'){
$column = 'cMan';
}
$sql = "UPDATE man SET ".$column." = '".$action_points."' where user_id='$user_id'";