if(isset($_POST['id'])) {
$id=$_POST['id'];
echo $id;
$busnumber=$_POST['busnumber'];
$status=$_POST['status'];
$startpoint=$_POST['startpoint'];
$stop1=$_POST['stop1'];
$stop2=$_POST['stop2'];
}
我想创建动态$stop2=$_POST['stop2'];
和mysql查询:
$sql = mysql_query("
UPDATE fromto
SET busNumber='$busnumber', status='$status', startPoint='$startpoint',
stop1='$stop1', stop2='$stop2', stop3='$stop3', stop4='$stop4',
stop5='$stop5', stop6='$stop6', stop7='$stop7'...............
WHERE id=$id
");
答案 0 :(得分:3)
您需要评估所有变量以检查哪些是有效的SQL字段。在最常见的情况下,您可能有POST名称和SQL名称不相同。
此时您甚至不需要设置变量。
我添加了escape
支票,因为有人发送给您,比如说,
'; --
作为busNumber
的值,您的查询将变为:
UPDATE table SET busNumber=''; --', status=...
由于“ - ”开始发表评论,MySQL会看到:
UPDATE table SET busNumber=''; -- *all the rest ignored*
然后将整个表格中的busNumber
列列入。你不希望这种情况发生。 PDO是mysql_*
函数的一个很好的替代方法,可以帮助防止此类问题。
无论如何,你使用mysql_*
,所以:
$id = (int)$_POST['id'];
$fields = array( // ALL FIELDS EXCEPT ID
'status' => 'status',
...
);
$update = array();
// Since we're not using PDO we have to do a small check ourselves
foreach($fields as $sql => $post)
{
if (!isset($_POST[$post]))
$value = 'NULL';
else
{
// If you want to set the variable:
// ${$post} = $value;
// or
// ${$sql} = $value;
$value = mysql_real_escape($_POST[$post]);
if (!is_numeric($value))
$value = "'$value'";
}
$update[] = "$sql = $value";
}
$query = "UPDATE table SET " . implode(',', $update) . " WHERE id=$id";
mysql_query($query);
此外,通过删除stop*
列并将它们放在另一个表中来标准化架构可能是有用的(性能方面和维护方面):
CREATE TABLE busStops {
id_bus integer,
active boolean,
seq_no integer,
name varchar(200)
};
甚至
CREATE TABLE busStops {
id integer not null primary key auto_increment,
name varchar(200)
// other geographical information
};
CREATE TABLE bus_has_stop {
id_bus integer,
id_stop integer,
sequenc integer,
}
所以如果你是从“街1和街2”改为“街1-2”,重命名将自动影响所有停靠的公交车,依此类推。
答案 1 :(得分:1)
您可以使用 extract ,extract($_POST)
可以提供所需的一切。
if(isset($_POST['id'])) {
extract($_POST);
// ...
但不要忘记逃避用户输入。
if(isset($_POST['id'])) {
extract(array_map('mysql_real_escape_string', $_POST));
// ...
答案 2 :(得分:0)
你可以尝试
$_POST['stop1'] = "xx";
$_POST['stop2'] = "vv";
$_POST['stop3'] = "33v";
$_POST['stop555'] = "55";
$_POST['stop777'] = "77";
$busnumber = $status = $startpoint = $id = 33;
$sql = "UPDATE fromto SET busNumber='$busnumber', status='$status', startPoint='$startpoint'";
$sql .= getStop();
$sql .= "WHERE id=$id";
echo $sql;
输出
UPDATE fromto SET busNumber='33', status='33', startPoint='33'stop1 = 'xx' ,stop2 = 'vv' ,stop3 = '33v' ,stop555 = '55' ,stop777 = '77' WHERE id=33
使用的功能
function getStop() {
$stop = array_filter($_POST, function ($var) {
return strpos($var, "stop") == 0;
});
array_walk($stop, function (&$var, $key) {
$var = mysql_real_escape_string($var);
$var = $key . " = '$var' ";
}, $stop);
return implode(",", $stop);
}