好的,如果您阅读标题,那是一个好兆头。我在这里不太熟悉的一些地方弄湿了。
为了节省每个人阅读的时间,我有一系列复选框(适当命名):
<input type="checkbox" name="skills[]" value="5"> C<br />
<input type="checkbox" name="skills[]" value="6"> C+<br />
我可以通过将值附加到原始查询来将一个复选框值保存到MySQLi DB。当$max == 1
。
当我添加第二个值时,我需要在添加的值之间添加逗号。所以,我在$max > 1
时这样做。
我以为我可以简单地从查询字符串中删除最后一个逗号,MySQL就能正常工作。但是,substr函数不会删除逗号/或任何内容。当我输入多行值时,我只需要想办法删除最后一个逗号。
这是我的代码:
$query= "INSERT INTO individual_skills(Skills_ID,Ind_ID) VALUES ";
$max = sizeof($skills);
for ($i=0; $i<$max;$i++) {
if ($max == 1) {
// appending the query above with the values
$query.= " (" .$skills[$i]. ",".$_SESSION['Ind_ID'].")";
} // END IF MAX == 1
if ($max > 1) {
// appending the query above with the values
// same query as above except note the comma at the end for the MySQL query
$query.= " (" .$skills[$i]. ",".$_SESSION['Ind_ID']."),";
substr($query,0,-1);
} // END IF MAX > 1
} // END FOR LOOP
答案 0 :(得分:3)
而不是疯狂的str_replace
或if
语句,您可以使用数组,然后implode
使用一个很好的字符串:
$query = "INSERT INTO individual_skills (Skills_ID, Ind_ID) VALUES ";
$max = sizeof($skills);
$parameters = array();
for ($i=0; $i<$max; $i++) {
$parameters[] = " (" .$skills[$i]. ", ".$_SESSION['Ind_ID'].")";
}
$query .= implode(', ', $parameters);
答案 1 :(得分:2)
更改
substr($query,0,-1);
到
$query = rtrim($query, ",")
rtrim
removes characters from the end of a string并且返回值
您还需要将其移动到循环的末尾,您也可以删除代码重复 - &gt;
$max = sizeof($skills);
for ($i=0; $i<$max;$i++) {
$query.= " (" .$skills[$i]. ",".$_SESSION['Ind_ID'].")";
if ($max > 1) {
$query .= ",";
} // CLOSE IF
} // END FOR LOOP
// Now remove the last comma if required
if ($max > 1) {
$query = rtrim($query, ",");
}
答案 2 :(得分:2)
你的代码遭受了太多的重复 它实际上可以写得很简短并且可以用 并且它也遭受SQL注入
$query = "INSERT INTO individual_skills VALUES ";
$comma = '';
foreach($skills as $skill) {
$skill = intval($skill);
$indid = intval($_SESSION['Ind_ID']);
$query.= "$comma ($skill, $indid)";
$comma = ',';
}
在处理器周期和编写代码方面都很短。
但是,substr函数不会删除逗号/或任何内容。
确实如此。你只是错误地使用它。哟需要将结果分配给变量。手册页总是有帮助的。
答案 3 :(得分:2)
我要做的是使用php implode()函数来处理这类事情。 我就是这样做的:
$query= "INSERT INTO individual_skills(Skills_ID,Ind_ID) VALUES ";
$value_array = array();
foreach($skills as $skill) {
$value_array[] = "(" .$skill. ",".$_SESSION['Ind_ID'].")";
}
$query = "INSERT INTO individual_skills(Skills_ID,Ind_ID) VALUES ". implode(', ', $value_array);
答案 4 :(得分:0)
您的想法和substr
完全正确,但您实际上并没有使用它的返回值。您需要做的就是将返回值放回$query
。
$query = substr($query, 0, -1);
您也可以尝试这样做,这样就可以通过简单地不在最后一个条目上添加逗号来减轻对substr
所有人的需求。
$query= "INSERT INTO individual_skills(Skills_ID,Ind_ID) VALUES ";
$max = sizeof($skills);
for ($i=0; $i < $max; $i++)
{
$query .= " (" . $skills[$i] . ", " . $_SESSION['Ind_ID'] . ")";
if ($max > 1 && $max != ($i+1))
$query .= ",";
}