Eigenlijk zou niemand hier dit echt kunnen beantwoorden met alleen de code die je hier laat zien. Maar @ultranaut en @devJunk hebben het allebei zo goed gedaan. Toen ik de functie oorspronkelijk voor u schreef, stond uw formulier een gebruiker toe om records aan de database toe te voegen en had het een knop om "Alle werkgeschiedenis wissen" maar had geen methode om individuele records te verwijderen.
Ik heb de functie zo geschreven dat:
- het doorgeven van de tekenreekswaarde
'all'
als de$rowId
parameter zou alle records verwijderen (wat de applicatie nodig had) - een databaserij-ID doorgeven als de
$rowId
parameter zou alleen die specifieke rij verwijderen (op dat moment niet nodig, maar logisch om toe te voegen)
Omdat je op dat moment maar één knop had om alles te verwijderen, heb ik dat alleen geïmplementeerd met deze controle:
if(isset($_POST['clear_work'])){
// see explanation of params in function declaration above for `deleteFromWhere()`
deleteFromWhere($db,'work',$_SESSION['username'],'all');
}
Als u een specifiek record wilt verwijderen, moet u twee dingen doen:
Voeg een knop of iets dergelijks toe op uw eerste pagina waarmee een individuele record wordt verwijderd.
<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>
Voeg een vinkje toe op de tweede pagina om te zien of deze knop is ingedrukt en roep de functie op met het opgegeven ID.
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']);
}
Definitieve gewijzigde 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']);
}
HTML:
<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>