我有一个textarea,我可以输入尽可能多的项目,我想通过换行符分隔。
然后,在php文件中我有这个来获取值:
$colors = $_POST["colors"];
foreach ( preg_split ('/[\s*,\s*]*,+[\s*,\s*]*/', $colors) as $value)
{
echo $value.'<br>';
}
正确传递项目与该代码一样,我可以在一行中看到所有项目。我试图将它存储在数据库中,但它只存储在一行中。
例如,如果我输入textarea:
Red
Black
Dark Black
Blue
打印方式如下:
Red Black Dark Black Blue
也就是说,它会删除开头和结尾处的所有空格,但不会删除中间的空格(这正是我想要的)。
我的问题在于我处理数组的方式。我想每行打印一个元素,因此能够在数据库中每行存储一种颜色。
有人可以帮忙吗?
非常感谢!
答案 0 :(得分:1)
在您的示例中,$value
是一个字符串。如果要将数据插入到数组中,则需要:
$myarray[]=$value;
你可以echo
它首先放置的事实意味着它不是一个数组。所以在你的foreach
中添加我在上面提供的代码行。之后,您可以在foreach之外使用print_r($myarray)
并查看数组的结构。
但根据您的代码,您可以在foreach
内执行查询并将值存储在数据库中。不需要阵列。
所以你可以这样:
第一种方式:<?php
$colors = $_POST["colors"];
//declare your array
$myArray=array();
foreach ( preg_split ('/[\s*,\s*]*,+[\s*,\s*]*/', $colors) as $value)
{
//insert data inside your array
$myArray[]=$value;
}
//output of your new array
print_r($myArray);
或者更简单的第二种方式:
<?php
$colors = $_POST["colors"];
$servername = "my_server_name";
$username = "username";
$password = "password";
$dbname = "my_db_name";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
foreach ( preg_split ('/[\s*,\s*]*,+[\s*,\s*]*/', $colors) as $value)
{
//$value variable holds all the info you need so you just do the INSERT QUERY inside the foreach
$stmt = $conn->prepare("INSERT INTO my_table (my_column) VALUES (?)");
$stmt->bind_param("s", $value);
$stmt->execute();
}
您只需在foreach
内进行查询。确保使用准备好的陈述。