对不起我的英语,但这不是我的母语。 我创建了一个用于将数据插入MySQL的用户界面。除了一件事之外的一切都还可以,但是当我想从多个复选框中读取数据并将它们写入MySQL中的SET类型时它就不起作用了。我试图找到答案但是4小时后我找不到它或者我不理解它。
http://jyxo.info/uploads/21/21b104df77f6ca723bb708d8d0549af5430e8e91.jpg
dobaVyskytu是SET类型,有月份你可以找到蘑菇(我的tema是蘑菇的在线地图集)
在用户界面中有12个月的12个复选框。
http://jyxo.info/uploads/FD/fd548760b155307dfa677ada7c4be4996abf7b93.png
在dobavyskytu我需要有多个选择,这就是我使用$ doba + =
的原因if(isset($_POST["Leden"]))
{
$doba += "Leden";
}
if(isset($_POST["Únor"]))
{
$doba += "Únor";
}
if(isset($_POST["Březen"]))
{
$doba += "Březen";
}
Db::query("INSERT INTO houby(nazev,dobaVyskytu,mistoVyskytu,popis,jedovatost,img)VALUES(?,?,?,?,?,?)",$nazev,$doba,$misto,$popis,$jedovatost,$foto);
感谢大家的阅读和帮助,因为它现在有效。
答案 0 :(得分:1)
对于PHP中的字符串,它使用.
作为连贯而非+
,所以
$doba .= "Leden";
编辑: 为了更好的方法,你应该尝试类似......
$options = [];
if(isset($_POST["Leden"]))
{
$options[] = "Leden";
}
if(isset($_POST["Únor"]))
{
$options[] = "Únor";
}
...
$doba = implode(',', $options);
因为这会给你类似Leden,Únor
答案 1 :(得分:0)
我的假设是:
$ doba是您想要在SET类型列中插入的变量(我翻译了,您在问题中放置的值似乎是斯洛伐克的“1月”,“2月”,“3月” - - 我想可能会有更多)。
我认为您的SET类型列是“dobaVyskytu”,并且您通过在列定义中包含所有可能的值在MySQL中正确创建它。
(你的问题更新似乎证实了我的假设!)
首先,当你想在MySQL的SET类型列中插入多个值时,字符串值必须用逗号分隔。
使用我看到的代码,你最终可以得到字符串“LedenÚnorBřezen”(我想你使用+ =进行字符串连接,但你应该使用。=像Nigel Ren所提到的那样)。如果您在表单中检查了所有显示的3个值,那么您真的希望得到像“Leden,Únor,Březen”这样的字符串。
请参阅此处了解如何在MySQL中处理SET类型: https://dev.mysql.com/doc/refman/5.7/en/set.html
由于您不知道该列的最终值是0还是多个,我建议将$ doba作为数组。
$doba = array(); // depending on your PHP version, you can also write $doba = [];
之后,你可以用这种方式添加你的值(语法$ array [] ='value'将为数组提供一个值):
$doba[] = "Leden";
$doba[] = "Únor";
$doba[] = "Březen";
然后,在插入之前,您可以将数组转换为字符串,其值以逗号分隔:
$csvDoba = implode(',', $doba);
然后在Db :: query()行中使用$ csvDoba而不是$ doba。
在您开始工作之后,您可以通过以下方式寻找改进代码的更多内容:
您还可以通过使用特殊名称命名表单复选框来利用PHP魔术,以避免重复自己。
例如,您可以使用名称“doba []”命名所有复选框,如果(isset($ _ POST [“doba”]),它将已经是一个包含所有选中值的数组!但要注意,如果没有选中任何值,则不会设置它。这样,您将避免为每个复选框执行if条件。
您可以在代码中执行以下操作来检索值:
$ doba = isset($ _ POST ['doba'])? (数组)$ _POST ['doba']:array();
这是做什么的?
如果选中任何名为“doba []”的复选框,那么您将检索它们并确保您检索的值是数组类型,“(数组)”部分该值为数组,即使它是不是(例如,错误或有人试图破解你的表格)。否则你将返回一个空数组(因为没有选择)。
如果您不熟悉这种语法,请为“三元运算符”进行搜索。
如果尚未完成,您当然希望对您的值进行一些验证
您可能希望将值放在另一个表中,而不是使用“SET类型”,但这取决于您,在这个问题上,您可能还有一些东西需要学习,所以我不会想要给你太多信息。 ; - )