首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从表中删除指定的行

问从表中删除指定的行
EN

Stack Overflow用户
提问于 2015-04-30 15:44:04
回答 1查看 1.8K关注 0票数 1

我有点小问题..。我正在使用PDO,我的部分代码是从数据库中的表中删除一个特定的行。我的代码如下..。

代码语言:javascript
复制
function deleteFromWorkWhere($db,$table,$user,$rowId){
        switch($table){
            case 'work':
                $tbl = 'work';
                break;
        }
        if($rowId=='all'){ // delete all records
            $sql = 'DELETE FROM '.$tbl.' WHERE username=?';  // "?"s here will get replaced with the array elements below
            $stmt = $db->prepare($sql);
            $stmt->execute(array($user)); // these array elements will replace the above "?"s in this same order
            // check for errors 
            if($stmt->errorCode() == 0) {
                // no errors, show alert and refresh page
                return '<script type="text/javascript">alert("All work history was successfully cleared!"); window.location="CV.php"; </script>';
            } else {
                // had errors
                $errors = $stmt->errorInfo();
                return '<script type="text/javascript">alert("Error deleting work history!: '.$errors[2].'"); window.location="CV.php"; </script>'; 
            }
        }
        elseif($rowId){ // delete specified row 
            $sql = 'DELETE FROM '.$tbl.' WHERE username = ? AND id = ?';  // "?"s here will get replaced with the array elements below
            $stmt = $db->prepare($sql);
            $stmt->execute(array($user,$rowId)); // these array elements will replace the above "?"s in this same order
            $affected_rows = $stmt->rowCount(); // get the number of rows affected by this change
            return $affected_rows.' row deleted.';
            // check for errors 
            if($stmt->errorCode() == 0) {
                // no errors, show alert and refresh page
                return '<script type="text/javascript">alert("Selected work history was successfully cleared!"); window.location="CV.php"; </script>';
            } else {
                // had errors
                $errors = $stmt->errorInfo();
                return '<script type="text/javascript">alert("Error deleting work history: '.$errors[2].'"); window.location="CV.php"; </script>';  
            }
        }
        else{ /// return error
        }
    }   
    if(isset($_POST['clear_work'])){
            deleteFromWorkWhere($db,'work',$_SESSION['username'],'all');    
    }
    if(isset($_POST['clear_selected_work'])){
            deleteFromWorkWhere($db,'work',$_SESSION['username']);  
    }

第一个if语句用于删除表中的所有数据和我想要使用的else,以便删除特定的行,但是它不起作用,我做错了什么?

这是按钮..。

代码语言:javascript
复制
<input type="submit" value="Clear Selected Work History" name="clear_selected_work" />
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-01 07:56:52

实际上,这里没有人能够用这里显示的代码来回答这个问题。但是,“超级特劳”和“吞咽快篮”几乎都做到了这一点。当我最初为您编写函数时,您的表单允许用户向数据库添加记录,并有一个按钮“清除所有工作历史记录”,但没有删除单个记录的方法。

我写这个函数是为了:

  • 将字符串值'all'作为$rowId参数传递将删除所有记录(这是应用程序所需的)。
  • 将数据库行id作为$rowId参数传递将只删除该特定行(当时不需要,但添加它是有意义的)

因为当时只有一个按钮可以删除所有内容,所以我只使用以下检查来实现:

代码语言:javascript
复制
if(isset($_POST['clear_work'])){
        // see explanation of params in function declaration above for `deleteFromWhere()`
        deleteFromWhere($db,'work',$_SESSION['username'],'all');    
}

如果要删除特定的记录,则需要做两件事:

在第一页上添加一个按钮或类似的按钮,以删除单个记录。

代码语言:javascript
复制
<form action="addCV.php" method="post"> 
    <input type="hidden" value="12345" name="clear_this_work" /><!--you'll need to set the value here to the database row id of the currently displayed record -->                  
    <input type="submit" value="Clear This Work Record" style="border: 1px solid #006; color:#F87F25; font: bold 16px Tahoma; border-radius:7px; padding:4px; background:#ffffff;"/>
</form> 

在第二页中添加检查,查看是否按下此按钮,并调用传递提供的id的函数。

代码语言:javascript
复制
if(isset($_POST['clear_this_work'])){
        // see explanination of params in function declaration above for `deleteFromWhere()`
        deleteFromWhere($db,'work',$_SESSION['username'],$_POST['clear_this_work']);    
}   

最后修正的php:

代码语言:javascript
复制
// a function that deletes records 
// $table is the table to delete from
// $user is the current username
// $rowId is the row id of the record to be deleted
// if $rowId is passed as the string "all", 
// all matching records will be deleted 
function deleteFromWhere($db,$table,$user,$rowId){
    // PDO will sanitize most vars automatically
    // however Table and Column names cannot be replaced by parameters in PDO. 
    // In this case we will simply want to filter and sanitize the data manually.
    // By leaving no default case or using a default case that returns an error message you ensure that only values that you want used get used.
    // http://stackoverflow.com/questions/182287/can-php-pdo-statements-accept-the-table-name-as-parameter
    switch($table){
        case 'work':
            $tbl = 'work'; // add more here when you want to start deleting from other tables
            break;
    }
    if($rowId=='all'){ // delete all records
        $sql = 'DELETE FROM '.$tbl.' WHERE username=?';  // "?"s here will get replaced with the array elements below
        $stmt = $db->prepare($sql);
        $stmt->execute(array($user)); // these array elements will replace the above "?"s in this same order
        // check for errors 
        if($stmt->errorCode() == 0) {
            // no errors, show alert and refresh page
            return '<script type="text/javascript">alert("All work history was successfully cleared!"); window.location="addCV.php"; </script>';
        } else {
            // had errors
            $errors = $stmt->errorInfo();
            return '<script type="text/javascript">alert("Error deleting work history!: '.$errors[2].'"); window.location="addCV.php"; </script>';  
        }
    }
    elseif($rowId){ // delete specified row 
        $sql = 'DELETE FROM '.$tbl.' WHERE username = ? AND id = ?';  // "?"s here will get replaced with the array elements below
        $stmt = $db->prepare($sql);
        $stmt->execute(array($user,$rowId)); // these array elements will replace the above "?"s in this same order
        $affected_rows = $stmt->rowCount(); // get the number of rows affected by this change
        return $affected_rows.' row deleted.';
        // check for errors 
        if($stmt->errorCode() == 0) {
            // no errors, show alert and refresh page
            return '<script type="text/javascript">alert("Selected work history was successfully cleared!"); window.location="addCV.php"; </script>';
        } else {
            // had errors
            $errors = $stmt->errorInfo();
            return '<script type="text/javascript">alert("Error deleting work history: '.$errors[2].'"); window.location="addCV.php"; </script>';   
        }
    }
    else{ /// return error
    }
}   


if(isset($_POST['clear_work'])){
        // see explanation of params in function declaration above for `deleteFromWhere()`
        deleteFromWhere($db,'work',$_SESSION['username'],'all');    
}

// add the below check 
if(isset($_POST['clear_this_work'])){
        // see explanination of params in function declaration above for `deleteFromWhere()`
        deleteFromWhere($db,'work',$_SESSION['username'],$_POST['clear_this_work']);    
}   

HTML:

代码语言:javascript
复制
<form action="addCV.php" method="post">                         
    <input type="submit" value="Clear All Work History" name="clear_work" style="border: 1px solid #006; color:#F87F25; font: bold 16px Tahoma; border-radius:7px; padding:4px; background:#ffffff;"/>
</form> 
<!--  add the below -->
<form action="addCV.php" method="post"> 
    <input type="hidden" value="12345" name="clear_this_work" /><!--you'll need to set the value here to the database row id of the currently displayed record -->                  
    <input type="submit" value="Clear This Work Record" style="border: 1px solid #006; color:#F87F25; font: bold 16px Tahoma; border-radius:7px; padding:4px; background:#ffffff;"/>
</form> 
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29972156

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档