Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

पीडीओ तालिका से निर्दिष्ट पंक्ति हटाएं

वास्तव में यहां कोई भी वास्तव में आपके द्वारा यहां दिखाए गए कोड के साथ इसका उत्तर नहीं दे पाएगा। लेकिन @ultranaut और @devJunk दोनों ने इसे काफी पसंद किया। जब मैंने मूल रूप से आपके लिए फ़ंक्शन लिखा था, तो आपके फॉर्म ने उपयोगकर्ता को डेटाबेस में रिकॉर्ड जोड़ने की अनुमति दी थी और "सभी कार्य इतिहास साफ़ करें" के लिए एक बटन था, लेकिन व्यक्तिगत रिकॉर्ड को हटाने का कोई तरीका नहीं था।

मैंने फंक्शन लिखा ताकि:

  • स्ट्रिंग मान पास करना 'all' $rowId . के रूप में पैरामीटर सभी रिकॉर्ड हटा देगा (जो कि आवेदन की जरूरत है)
  • डेटाबेस पंक्ति आईडी को $rowId . के रूप में पास करना पैरामीटर केवल उस विशिष्ट पंक्ति को हटा देगा (उस समय इसकी आवश्यकता नहीं थी लेकिन इसे जोड़ने के लिए समझ में आया)

चूँकि उस समय सब कुछ हटाने के लिए आपके पास केवल एक बटन था, मैंने केवल इस चेक के साथ इसे लागू किया:

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

यदि आप किसी विशिष्ट रिकॉर्ड को हटाना चाहते हैं, तो आपको दो काम करने होंगे:

अपने पहले पृष्ठ पर एक बटन या समान जोड़ें जो एक व्यक्तिगत रिकॉर्ड को हटा देगा।

<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> 

यह देखने के लिए कि क्या यह बटन दबाया गया था, दूसरे पृष्ठ में एक चेक जोड़ें और आपूर्ति की गई आईडी में फ़ंक्शन को कॉल करें।

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:

// 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']);    
}   

एचटीएमएल:

<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> 



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL डेटाबेस में सिंगल कॉलम में संग्रहीत एकाधिक मान?

  2. MySQL में उपयोगकर्ता लॉगिन के आधार पर कनेक्शन टाइमआउट कैसे सेट करें?

  3. SQL कथन में गैर-समूहीकृत कॉलम कैसे प्राप्त करें (MySQL के समान)

  4. MySQL में डेटाटाइम से घंटे कैसे घटाएं?

  5. असफल प्रविष्टियों पर MySQL ऑटोइनक्रिकमेंट क्यों बढ़ता है?