我所拥有的是Wordpress中的自定义管理页面,用户可以在其中添加所有输入到数据库中的名称/标题/ mp3。在同一页面上,我还让它从数据库中选择所有条目,并在它们旁边用复选框列出它们,我试图让它使用数组从数据库中删除已检查的条目。这就是我到目前为止:
$songs = $_POST['song'];
$num = count($songs);
for($i=0; $i < $num; $i++){
$sql = "DELETE FROM song_list WHERE title = '".$songs[]."'";
echo $sql;
var_dump($songs);
}
当我转储$songs
时,它拥有所有正确的数据,但是当我尝试将其拉出并将其添加到查询中时,我一无所获。它不是一个关联数组,所以我尝试了$songs[0]
和$songs[1]
,但我什么都没得到。
任何见解都将不胜感激,谢谢。
修改
的var_dump
array(3) { ["Forget You"]=> string(2) "on" ["DJ Got Us Falling in Love"]=> string(2) "on" ["Blurred Lines"]=> string(2) "on" }
另外,我尝试添加$i
($ songs [$ i])。它只是title = ''
答案 0 :(得分:3)
您错过了数组索引:
$songs[$i]
变成:
$songs = $_POST['song'];
$num = count($songs);
for($i=0; $i < $num; $i++){
$sql = "DELETE FROM song_list WHERE title = '".$songs[$i]."'";
echo $sql;
}
更优雅的方法是使用foreach
循环:
$songs = $_POST['song'];
foreach($songs as $song) {
$sql = "DELETE FROM song_list WHERE title = '".$song."'";
echo $sql;
}
更优雅的方法是使用预准备语句(使用PDO):
// Prepare statement
$stmt = $dbh->prepare('DELETE FROM song_list WHERE title = :song');
$songs = $_POST['song'];
foreach($songs as $song) {
// Bind and execute
$stmt->bindParam(':song', $song);
$stmt->execute();
}
答案 1 :(得分:1)
只是为了让它更简单,更短 - 单行:)
$sql = "DELETE FROM song_list " .
"WHERE title IN ('" . implode("','", $_POST['song']) . "')";
需要注意的事项:
'
,那么您的SQL将会中断。这就是SQL id
字段发明的原因:)答案 2 :(得分:0)
将$ i添加到数组中,您将获得给定位置的值。 但你可以像这样编写你的代码:
if(isset($_POST['song']) {
foreach($_POST['song'] as $key => $title) {
$sql = "DELETE FROM song_list WHERE title = '".$title."'";
echo $sql;
}
}