在php中以编程方式声明和初始化变量

时间:2014-01-01 09:00:30

标签: php html mysql forms

我确信有更好的方法可以做到这一点,我只是不知道该怎么做。基本上我将一个表单提交到一个页面,该页面将获取信息并将其填入MYSQL数据库。目前我设置它所以我声明变量并从_POST设置其值,然后将其添加到正确的MYSQL列。这是一个片段:

$k1 = $_POST['k1'];
$k2 = $_POST['k2'];
$k3 = $_POST['k3'];
...

$sql = "INSERT INTO patches (k1, k2, k3, ...) VALUES ('$k1', '$k2', 'k3', ... )";

显然,这是一个有大量领域的麻烦。 我可以采取哪些措施来改善这一点?谢谢!

4 个答案:

答案 0 :(得分:2)

假设每个帖子字段都是一个表格列,你可以这样做。

$keys = implode(',', array_keys($_POST));

$values = implode(',', array_map(function($value) {
    return "'". addslashes($value) ."'";
}, array_values($_POST)));

$sql = "INSERT INTO patches ($keys) VALUES ($values)";
不幸的是,这种方法很容易被SQL注入。更好的方法是类似的方法,但是准备一个语句并使用PDO绑定值。

$keys = implode(',', array_keys($_POST));
$params = implode(',', array_fill(0, count($_POST), '?'));

$sql = $dbHandle->prepare("INSERT INTO patches ($keys) VALUES ($params)");

$sql->execute(array_values($_POST));

其中$dbHandle是PDO连接资源。您可以找到有关PDO here的更多信息。

答案 1 :(得分:2)

在input元素的name属性中使用[],如下所示:

<input name="k[]" type="text">
<input name="k[]" type="text">
<input name="k[]" type="text">

将在PHP端返回一个数组:

$k = $_POST['k'];

并且您可以使用implode()格式化SQL的这些值:

$sql = "INSERT INTO patches (k1, k2, k3, ...) VALUES ('".implode("','", $k)."');";

- User Pekka的源代码,找到here. -

答案 2 :(得分:1)

// you should not work with the $_POST array itself, but rather extract values from it
$foo = array('k1' => 1, 'k2' => 2, 'k3' => 3);
$keys = array_keys($foo);
$sql  = 'INSERT INTO patches';
$sql .= '(' . implode(',', $keys) . ')';
array_walk($keys, function(&$val){
    $val = ":$val";
});
$sql .= 'VALUES (' . $keys . ')';

然后你可以这样调用你的查询:

$query = $pdo->prepare($foo);
$query->execute($foo);

答案 3 :(得分:0)

$_POST["k1"] = "1";
$_POST["k2"] = "2";
$_POST["k3"] = "3";
$_POST["k4"] = "4";
$_POST["k5"] = "5";
$_POST["k6"] = "6";

$str_keys = "";
$str_val = "";
foreach ($_POST as $key => $val) {
        $str_keys .= ($str_keys) ? ",".$key : $key;

        $str_val .= ($str_val) ? ",'".$val."'" : "'".$val."'";
}
$sql = "INSERT INTO patches (".$str_keys.") 
        VALUES (".$str_val.")";

echo $sql ;

形成查询

INSERT INTO patches (k1,k2,k3,k4,k5,k6) VALUES ('1','2','3','4','5','6')