0

さて、あなたがタイトルを読んだら、それは良い兆候です。ここではあまり馴染みのない部分で足が濡れてきます。

みんなが読む時間を節約するために、私は一連のチェックボックス(適切な名前)を持っています:

<input type="checkbox" name="skills[]" value="5"> C<br />
<input type="checkbox" name="skills[]" value="6"> C+<br />

元のクエリに値を追加することで、1つのチェックボックス値をMySQLiDBに保存できます。いつ$max == 1

2番目の値を追加するときは、追加する値の間にコンマを追加する必要があります。だから、私はそれをし$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または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);
于 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

コードの繰り返しが多すぎます。
それは実際には短くてサイズの大きい方法で書くことができ
、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 に答える
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 に答える
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 に答える