gpt4 book ai didi

php - 将具有多个值的变量插入mysql数据库

转载 作者:行者123 更新时间:2023-11-29 08:27:17 27 4
gpt4 key购买 nike

我想我应该编辑我的问题,因为从评论看来,这是一种非常不安全的方式来实现我想要实现的目标。

我想要做的是允许用户导入 .csv 文件,但我希望他们能够设置导入的字段。

除了我在最初的问题中尝试演示的方式之外,还有其他方法可以做到这一点吗?

谢谢丹尼尔<小时/>

我遇到的这个问题已经让我发疯了好几个星期了,我所做的一切尝试都失败了。

基本上我有一个包含一堆字段的数据库。

在我的一个页面中,我有以下代码

$result = mysql_query("SHOW FIELDS FROM my_database.products"); 

while ($row = mysql_fetch_array($result)) {

$field = $row['Field'];

if ($field == 'product_id' || $field == 'product_name' || $field == 'product_description' || $field == 'product_slug' || $field == 'product_layout') {
} else {
echo '<label class="label_small">'.$field.'</label>
<input type="text" name="'.$field.'" id="input_text_small" />';
}
}

然后,这将回显具有数据库字段标签的字段列表,并且还在文本框的名称中包含数据库字段。

然后我用以下代码发布结果

$result = mysql_query("SHOW FIELDS FROM affilifeed_1000.products"); 

$i = 0;

while ($row = mysql_fetch_array($result)) {

$field = $row['Field'];

if ($field == 'product_name' || $field == 'product_description' || $field == 'product_slug' || $field == 'product_layout') {

} else {

$input_field = $field;
$output_field = mysql_real_escape_string($_POST[''.$field.'']);
}

if ($errorcount == 0) {
$insert = "INSERT INTO my_database.products ($input_field)
VALUES ('$output_field')";

$result_insert = mysql_query($insert) or die ("<br>Error in database<b> ".mysql_error()."</b><br>$result_insert");

}

}

if ($result_insert) {

echo '<div class="notification_success">Well done you have sucessfully created your product, you can view it by clicking here</div>';

} else {

echo '<div class="notification_fail">There was a problem creating your product, please try again later...</div>';

}

它成功发布,但问题是它为每个插入创建一个新的“行”。

例如,在第 1 行中,它将发布第一个值,然后其余的将为空,在第 2 行中,它将发布第二个值,但其余的将为空,第 3 行中,第三个值,依此类推...

我尝试了很多很多方法来实现这一点,并研究了我以前不熟悉的 foreach 循环、绑定(bind)变量、内爆、爆炸,但似乎都没有成功。

我可以理解为什么它会这样做,因为它被包裹在 while 循环中,但如果我将它放在循环之外,它只会插入最后一个值。

谁能解释一下为什么会发生这种情况?

如果您需要更多信息,请告诉我。

谢谢丹尼尔

最佳答案

您将显示的每个字段视为要插入的自己的记录。由于您尝试创建具有多个字段的单个记录,因此您需要动态构建查询,例如

foreach ($_POST as $key => $value);
$fields[] = mysql_real_escape_string($key);
$values[] = "'" . msyql_real_escape_string($value) . "'";
} // build arrays of the form's field/value pairs

$field_str = implode(',', $fields); // turn those arrays into comma-separated strings
$values_str = implode(',', $values);

$sql = "INSERT INTO yourtable ($field_str) VALUES ($value_str);"
// insert those strings into the query

$result = mysql_query($sql) or die(mysql_error());

这会给你

INSERT INTO youtable (field1, field2, ...) VALUES ('value1', 'value2', ...)

请注意,我在这里使用 mysql 库,但您应该避免使用它。它已被弃用和过时。在构建任何可能在短期内完全无用的代码之前,请考虑切换到 PDO 或 mysqli。

出于安全考虑,您不应直接通过数据库传递字段值。考虑一下您可能正在开发用户权限管理系统的情况。您可能不想公开“is_superuser”字段,但您的表单将允许任何人通过修改其 html 表单并放置一个表示 is_superuser=yes 的新字段来授予自己 super 用户权限。

这种代码是非常危险的,你不应该在生产系统中使用它,无论你在其中构建了多少 SQL 注入(inject)保护。

关于php - 将具有多个值的变量插入mysql数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17598243/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com