我有一个小问题...我使用PDO和我的代码部分是从表中删除特定行我的数据库。 我的代码是低于...
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
我想以删除特定的行使用,但它不工作,我究竟做错了什么?
这是按钮...
<input type="submit" value="Clear Selected Work History" name="clear_selected_work" />
其实在这里,没有人会真正能够只与您在这里展示的代码来回答这个问题。 但@ultranaut和@devJunk都非常钉它。 当我最初写的功能为你,你的表格允许用户将记录添加到数据库中,有一个按钮,“全部清除工作经历”,但没有删除单个记录的方法。
我写的函数,因此:
- 传递字符串值
'all'
为$rowId
参数将删除所有记录(这是应用程序所需的WHA) - 通过数据库行ID为
$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>
添加一个检查在第二页,看是否被按下这个按钮,并呼吁通过在所提供的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']);
}
最终修正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>