2013-01-22 130 views
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 

回答

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 .= ","; 
} 
+0

現在我很親密。這從我的結尾刪除了所有的逗號...不是最後一個。很近。任何建議如何刪除最後的逗號? – kentrenholm

+1

@kentrenholm簡單地把它放在'// END FOR LOOP'和'if($ max> 1){}'語句下:) –

+0

所以它看起來像這樣:VALUES(21,10),(22, 10)而不是VALUES(21,10)(22,10) – kentrenholm

2

變化

substr($query,0,-1); 

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

rtrim removes characters from the end of a string回報

你還需要將它移動到循環的末尾,你可以刪除代碼重複 - >

$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, ","); 
} 
+0

我也嘗試過。不工作。我認爲這可能會以某種方式對待我的查詢。 – kentrenholm

+0

@kentrenholm現在嘗試 - 它應該是循環的 – ManseUK

2

您的代碼遭受了太多的重複。
它實際上可寫入短和consize方式
和它從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

而是瘋狂str_replaceif語句,你可以使用數組,然後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); 
2

什麼,我會做的是使用PHP破滅()函數對於這種的東西。 這是我該怎麼做:

$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); 
+0

那麼,我的答案有什麼區別呢? :) – j0k

+0

除了foreach,這只是一個口味問題。 你在我打字的時候發了條消息,是什麼讓你比我快。 我想這是唯一的區別...... ;-) –

+0

雖然這不是味道的問題,但更清晰的代碼。然而,字符串到數組和字符串轉換的想法並不清楚。 –

相關問題