0

好的,如果您阅读标题,这是一个好兆头。我在一些我不太熟悉的地方弄湿了我的脚。

为了节省大家阅读的时间,我有一系列复选框(适当命名):

<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
4

5 回答 5

3

您可以使用数组而不是疯狂str_replace或声明,然后使用它来获得一个不错的字符串:ifimplode

$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);
于 2013-01-22T13:20:22.730 回答
2

改变

substr($query,0,-1);

$query = rtrim($query, ",")

rtrim从字符串末尾删除字符返回一个值

您还需要将其移动到循环的末尾,您也可以删除代码重复 ->

$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, ",");
}
于 2013-01-22T13:05:16.333 回答
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);
于 2013-01-22T13:26:10.637 回答
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 函数不会删除逗号 / 或任何内容。

确实如此。你只是用错了方法。你需要将它的结果分配给一个变量。手册页总是有帮助的。

于 2013-01-22T13:19:52.310 回答
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 .= ",";
}
于 2013-01-22T13:04:49.813 回答