0

私はこれを理解できるはずですが、私は輪になって行き続けます。チェックボックス付きのフォームがあります。チェックボックスを選択すると、削除するタグが付けられます。

選択したチェックボックスをforeachで処理します。

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

これは、ビデオのリストをまとめるという私の怠惰な試みです。私が使用しているsqldeleteは次のとおりです。

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

だから私はここでたくさんのものを逃しています。$str必要なもの:

  1. チェックボックスが1つだけ返されるため、引用符付きの文字列を返します(つまり、「myvideo.mp4」)。
  2. 複数のチェックボックスが選択されているため、引用符とカンマを使用して文字列を作成します(つまり、 "myvideo.mp4"、 "myvideo2.mp4"、 "myvideo3.mp4")

助けてくれてありがとう。

4

2 に答える 2

2

このように使用implode()します:

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

implode()配列を取得し、配列内の各値を「glue」文字列で結合します。この場合、「接着剤」は","であり、配列はのキーで構成されます$_POST['checkboxselect']。最後に、結果の文字列はでラップされ"ます。

これにより、目的の文字列の例が作成されます"myvideo.mp4","myvideo2.mp4","myvideo3.mp4"

于 2012-04-25T03:31:37.377 に答える
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);
于 2012-04-25T03:35:57.267 に答える