我正在显示我的数据库中的一些数据,我希望能够在显示的每条记录旁边放置复选框。 此外,我希望用户打包提交他们的选择,然后删除所选的记录。 我搜索了很多东西,但无法做任何事情。我正在寻找简单的东西。 这是我的代码:
<?php
//include('conn.php');
$con=mysqli_connect();
session_start();
if (!isset($_SESSION['ID'])){
header('location:login.php');
}
//
?>
<?php
if (!$link = mysql_connect()) {
echo 'Could not connect to mysql';
exit;
}
if (!mysql_select_db()) {
echo 'Could not select database';
exit;
}
$villageId = $_GET['village'];
$ID = $_SESSION['ID'];
$sql ="SELECT *
FROM favourites
INNER JOIN attractions ON favourites.AttractionID = attractions.AttractionID
INNER JOIN customer ON favourites.ID = customer.ID
WHERE favourites.ID = '$ID' ";
$result = mysql_query($sql, $link);
if (!$result) {
echo "DB Error, could not query the database\n";
echo 'MySQL Error: ' . mysql_error();
exit;
}
while ($row = mysql_fetch_assoc($result)) {
echo $row['Name'] ;
}
if (!mysqli_query($con,$sql))
{
die('Error: ' . mysqli_error($con));
}
mysqli_close($con);
?>
有人能给我一些建议吗? 谢谢。
答案 0 :(得分:2)
数据输出附近的简单添加复选框:
while ($row = mysql_fetch_assoc($result)) {
echo " <input type='checkbox' value='".$row['id']."' /> ".$row['Name'];
}
据我所知你需要这个:
data - checkbox
如何实现这一目标?
你需要下面的html代码才能得到你想要的东西(+你需要一些javascript,我稍后会告诉你):
<form id='myForm'>
<div id='1'>
<input type='checkbox' name='data[]' value='1' />Row 1</div>
<div id='2'>
<input type='checkbox' name='data[]' value='2' />Row 1</div>
<div id='3'>
<input type='checkbox' name='data[]' value='3' />Row 1</div>
</form>
在链接onclick
处理程序here上查看该代码+序列化表单的示例。
在PHP中生成相同的输出:
// execute query
echo "<form id='myForm'>";
while ($row = mysql_fetch_assoc($result)) {
echo "<div id='".$row['id']."'><input type='checkbox' value='".$row['id']."' /> ".$row['Name']." </div>";
}
echo "<a href='#' id='delete'>Delete</a>";
echo "</form>";
所以,现在我们列出了第一项,第二项是第二项(序列化形式)。
如何实现第二项的另一半。我们必须创建php脚本,我们将从数据库中删除行。
deleteScript.php
脚本:
// connect to the base
foreach($id in $_POST['data']) {
$query = "delete from `favourites` where `id` = ".$id;
// execute your query
}
脚本准备好了。现在您必须从我们的页面发送请求到此脚本。使用ajax请求:
$("#delete").on('click', function () {
var data = $("#myForm").serialize();
if(data != '') {
$.ajax({
url: "deleteScript.php",
data: data
});
}
else
{
alert("select some checkboxes");
}
});
此javascript代码适用于之前的HTML代码
现在,我们的清单的第1和第2项已经完成。
让我们从我们的页面中删除已删除的项目(第三项待办事项清单):
$("input:checkbox:checked").each(function()
{
var id = $(this).val();
$("div#"+id).remove();
});
您可以测试此代码here
创建该示例是为了向您展示我的方法是有效的。但!仅当请求已成功发送时,您才必须删除div。因此,您必须编辑$.ajax
success
处理程序。请检查this fiddle。
所以,现在我们列出了所有项目。
最后的例子:http://jsfiddle.net/575VS/18/
您必须将其复制到您的文件中:)
希望,这会有所帮助。
注意,您可以获得ajax-request响应。
$.ajax({
//some properties
success: function(data) {
//response will be in data variable
}
});
如果要在删除数据库中的选定行后立即重定向页面,请使用以下代码:
if(data != '') {
$.ajax({
url: "deleteScript.php",
data: data,
success: function() {
window.location.replace("new link here");
}
});
}
答案 1 :(得分:1)
只是为了扩展Sharikov的答案:你需要按照他的描述将复选框放在循环中,但是如果你希望能够将该信息传递给另一个脚本,这对用户输入起作用,则需要更多的东西:
echo "<form action='receiver.php' method='post'>";
while ($row = mysql_fetch_assoc($result)) {
echo " <input type='checkbox' value='".$row['id']."' name='checkedBoxes[]'/> ".$row['Name'];
}
echo "<input type='submit' value='process'>";
echo "</form>";
然后在receiver.php上:
foreach($_POST['checkedBoxes'] as $box){
$id = $box;
//THEN DO SOMETHING TO EACH ID
}
如果您还想查看未选中哪些框,则事情会变得复杂一些,因为POST和GET只传递已选中复选框的值。我有几种方法可以做到这一点。一种方法是将通过$ _SESSION变量显示的所有id的数组传递给下一个脚本:
session_start();
$ids = new Array();
echo "<form action='receiver.php' method='post'>";
while ($row = mysql_fetch_assoc($result)) {
echo " <input type='checkbox' value='".$row['id']."' name='checkedBoxes[]'/> ".$row['Name'];
array_push($ids, $row['id'];
}
$_SESSION['ids'] = $ids;
echo "<input type='submit' value='process'>";
echo "</form>";
然后在receiver.php上,您可以使用$ _SESSION ['ids']引用该数组,并将其与已检查的值进行比较。只要确保你放置session_start();在你的代码中能够看到变量!
祝你好运!