这是用于将动态数据插入mysql数据库的代码。
$name = $_POST['name'];
for ($i = 0; $i < count($name); $i++) {
if ($name[$i] != "") {
$test= implode(", ", (array)$name[$i]);
print_r($test);
$sql = "INSERT INTO employee_table (name)
VALUES ('$test')";
if ($conn->query($sql) === true) {
echo ('ok');
}
}
}
$conn->close();
我使用implode(", ", (array)$name[$i])
以逗号开头从$name
返回一个字符串,但是当print_r($test);
像这样时:
AlexBrownHelloHugo
我遇到了2个问题,希望您能给予帮助:
print_r($test);
为Alex,Brown,Hello,Hugo
时的结果$test
[Alex,Brown,Hello,Hugo
]的同一行存储到dabase中。谢谢。
答案 0 :(得分:1)
类似这样的东西:
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.7.7/angular.min.js"></script>
<body ng-app="myapp">
<div ng-controller="MyController">
<input type="file" onchange="angular.element(this).scope().clickMe(this)">
</div>
</body>
我想重新发布我发表的评论:
当您可以将数据作为相关表存储时,将数据存储为定界列表是一个坏主意。无论如何,我都会使用前导和尾部定界符将其另存为
$names = empty($_POST['name']) ? [] : $_POST['name']; foreach($names AS $name){ if (!empty($name)) { $test= '['.implode(", ", (array)$name).']'; print_r($test); $sql = "INSERT INTO employee_table (name) VALUES ('$test')"; if ($conn->query($sql) === true) { echo ('ok'); } } }
,这样,当您查询它时,就可以这样做,Alex,Brown,Hello,Hugo,
。区别在于,如果您有field LIKE '%,Alex,%'
和foo,some,bar
并且您foo,something,bar
注意没有field LIKE '%some%'
,那么您会发现其中的一些内容。要查询上面我用,
显示的第一个和最后一个项目,它们将需要用,
围绕它们。您可以使用,
在爆炸等之前将其删除
更新
还有这个
不清楚
trim($field, ',')
的结构是$name
还是implode($name[$i])
,您在代码中使用第一个表示名称为impode($name)
而不是[['foo','bar'], [...]]
的代码这是您可能不希望多次存储的第二次。
所以您也许可以做到这一点:
['foo','bar', ...]
无循环,因为当您遍历名称计数时,您每次都插入相同的数据,但不超过names变量中的项数。
说明您的代码
因此,使用我的示例数据//$_POST['name'] = ['foo','bar', ...]
//remove the loop
//we can assign $name in the if condition and save a line or 2
//the second part, the assignment, will always return true.
if (!empty($_POST['name']) && $name = $_POST['name']) {
$test= '['.implode(',', (array)$name).']'; //changed mainly this line
print_r($test);
$sql = "INSERT INTO employee_table (name) VALUES ('$test')";
if ($conn->query($sql) === true) {
echo 'ok';
}
}
和原始代码的简化版本,您将可以这样做:
假设您在原始代码中表示的是$_POST['name'] = ['foo','bar', ...]
而不是implode($name)
,这是唯一可以使您的数据看起来像我的示例数据的东西
implode($name[$i])
输出:
//canned example data
$name = ['foo','bar'];
for ($i = 0; $i < count($name); $i++) {
if ($name[$i] != "") {
$test= implode(", ", (array)$name); //changed from $name[$i]
//just output this stuff so we can see the results
print_r($test);
echo "\nINSERT INTO employee_table (name) VALUES ('$test')\n";
}
}
如果应该很明显,但是如果您在上面的代码中将此行foo, bar
INSERT INTO employee_table (name) VALUES ('foo, bar')
foo, bar
INSERT INTO employee_table (name) VALUES ('foo, bar')
更改为$test= implode(", ", (array)$name);
,则输出将是这样的:
$test= '['.implode(',', (array)$name).'];
哪个仍然可以保存多于一次。因此,我们需要转储该循环,这基本上迫使我们进入了此更新顶部的代码。
希望这一切都有道理。
欢呼
答案 1 :(得分:0)
尝试使用此代码,实际上您的$_POST['name']
将值存储为数组,因此您无需进行强制转换。
$name = $_POST['name'];
for ($i = 0; $i < count($name); $i++) {
if ($name[$i] != "") {
$test= '['.implode(', ', $_POST['name']).']';
print_r($test);
$sql = "INSERT INTO employee_table (name)
VALUES ('$test')";
if ($conn->query($sql) === true) {
echo ('ok');
}
}
}
$conn->close();