2012-04-25 17 views
0

私はこれを理解することができるはずですが、私は円を続けています。私はチェックボックス付きのフォームを持っています。チェックボックスが選択されると、タグ付きで削除されます。phpの文字列を連結foreach

私はforeachのと、それらの選択のチェックボックスを処理:

foreach (array_keys($_POST['checkboxselect']) as $k) { 
    $str .= $k.','; 
} 

これは、一緒にビデオのリストを置くために私のラメの試みです。私が使用しているSQLの削除:

DELETE FROM `videos` WHERE `video_name` IN ($str) 

私はここにたくさんのものがありません。 $strは持っている必要があります:

  1. つだけのチェックボックスがそのよう
  2. 複数のチェックボックスがとても重引用符とカンマ(すなわち「myvideoで文字列を構築し、選択されている(すなわち「myvideo.mp4」)引用符付き文字列を返す返されます。 mp4 "、" myvideo2.mp4 "、" myvideo3.mp4 ")

ありがとうございました。このような

+2

ヒント:配列は、心の中でセキュリティのため –

答えて

2

PHPのimplodeを使用してみてください:

// Init links 
$mysqliLink = mysqli_connect('host', 'user', 'password') or die('Could not connect: ' . mysqli_error()); 

$mysqlLink = mysql_connect('host', 'user', 'password') or die('Could not connect: ' . mysql_error()); 

//----- 
// Prep values for query 
//----- 

// Only pick one of the following depending upon the mysql library you are using 

// If using mysql, passing the 2nd argument is not necessary, but for 
// clarity, adding it 
$deleteNames = array_map('mysql_real_escape_string', array_keys($_POST['checkboxselect']), array_fill(0, count($_POST['checkboxselect']), $mysqlLink)); 

// If using mysqli 
// This will ensure that $mysqliLink will be passed in as first arg for 
// every iteration satisfying the function signature 
$deleteNames = array_map('mysqli_real_escape_string', array_fill(0, count($_POST['checkboxselect']), $mysqliLink), array_keys($_POST['checkboxselect'])); 
//----- 


// Because you are passing strings, we need to ensure each is wrapped in quotes 
$deleteNames = "'" . implode("','", $deleteNames) . "'"; 

// Construct query using implode 
$sql = sprintf('DELETE FROM `videos` WHERE `video_name` IN (%s)', $deleteNames); 

- 更新 - JoomlaのAPIを使用し

$db = &JFactory::getDBO(); 

// Localize and sanitize each individual value 
foreach (array_keys($_POST['checkboxselect']) as $element) { 
    $deleteNames[] = $db->quote($element); 
} 

// Because you are passing strings, we need to ensure each is wrapped in quotes 
// No longer true because $db->quote taking care of quoting out each name for us 
$deleteNames = implode(',', $deleteNames); 

// Construct query using implode 
$sql = sprintf('DELETE FROM `videos` WHERE `video_name` IN (%s)', $deleteNames); 
+0

おかげで1を内破。しかし、これはうまくいかなかった。しかし、理由を知りたいと思ったら... – Tom

+0

私も興味があります。特に動作しなかったのは何ですか?もしあなたが 'var_dump($ sql)'であれば、それはあなたが望むものを与えるはずです。 –

+1

'$ myArray'と' $ deleteIds'に関するTypo。 –

2

使用implode()

$str = '"' . implode('","', array_keys($_POST['checkboxselect'])) . '"'; 

implode()は、配列を取り、「接着剤」の文字列と配列の各値に参加します。この場合、「グルー」は","であり、アレイは$_POST['checkboxselect']のキーで構成されています。最後に、結果の文字列は"にラップされます。

これにより、希望する文字列の例が"myvideo.mp4","myvideo2.mp4","myvideo3.mp4"になります。