【问题标题】:Delete PHP (mysqli) row - with HTML/Javascript button删除 PHP (mysqli) 行 - 使用 HTML/Javascript 按钮
【发布时间】:2015-03-24 22:37:00
【问题描述】:

使用谷歌地图,我使用 mysqli 将事件保存到数据库中。然后这些事件在地图上显示为标记,单击时相关数据会显示在信息框中(名称、日期等)。我希望通过单击删除(删除事件)按钮时从数据库中删除一行来删除事件事件的选项。该按钮包含在使用 javascript 显示的数据中:

var eventContent = $('<div class="event-info">' + '<h4 class="event-name">' +     point.name + '</h4><hr>' +
        '<span><h5>Date: </h5>' +
        '<p class="event-date">' + point.edate + '</p></span>' +
        '<p class="event-description">'+point.description+'</p>' +
        '</span><button id="remove-event" name="remove-event" class="remove-event btn btn-danger btn-sm" onclick="tidy_maps.delete()" title="Remove Event">Remove Event</button>'+
        '</div>');

    // Display Event details on marker click
    google.maps.event.addListener(event_markers[i], "click", function () {
        infowindow.setContent(eventContent[0]);
        infowindow.open(map, event_markers[i]);

将其发送到 php 的脚本(removedata.php):

tidy_maps.delete = function() {
    $.ajax({
        type:'POST',
        url:'removedata.php',
        success:function(data) {
            if(data) {
                alert("Are you sure?");
            }
            else {
                alert("ERROR!!!!");
            }
        }
    });
}

removedata.php 是:

$con = mysqli_connect("localhost", "root", "password", "gmaps1");
if (!$con) {
die("Can not connect: " .mysql_error());
}

$sql = "DELETE FROM events WHERE id = 'id' ";

$query = mysqli_query($con, $sql);

if(mysqli_affected_rows($con)) {
    echo "Record deleted successfully";
}

mysqli_close($con);

事实上,它不会删除数据库中的行,但是当我更改行时:

$sql = "DELETE FROM events WHERE id = 'id' ";

到特定的 ID 号。示例:

$sql = "DELETE FROM events WHERE id = '5' ";

我在浏览器中运行 removedata.php,它会从数据库中删除 ID=5 的行。单击删除按钮时控制台似乎没有错误,因此它必须发送到PHP脚本正常。

我想在单击“删除”按钮时询问您是否确定,然后从数据库中删除该特定行。

【问题讨论】:

  • 您忘记了 ID 中的 $ 符号。 "DELETE FROM events WHERE id = $id ";
  • 将行id赋给一个变量... $id = 5; $sql = "从事件中删除 id = '$id'";
  • @Brian 不需要引用 $id
  • 你在哪里传递id?如果请求成功,则调用success:function() - 您需要在发出请求之前显示一个确认框。
  • 我没有看到任何IDData 从客户端传递到服务器?那么如何删除呢?

标签: javascript php jquery mysql mysqli


【解决方案1】:

据我所知,不要传递要删除的行的 ID。 您可以通过两种方式发送数据,或者作为 url 参数,或者使用 data标签:

$.ajax({
    type:'POST',
    url:'removedata.php',
    data: {id : 5}
});

访问removedata.php中的ID:

$id = intval($_POST["id"]);
$sql = "DELETE FROM events WHERE id = " . $id;

【讨论】:

  • 我曾尝试访问 removedata.php 中的 ID,但它只是给出了一个错误:“注意:未定义的索引:第 12 行 /......./ 中的 ID”
  • 请显示您尝试过的代码。您必须提出请求,如果您手动去removedata.php,则不会发送ID。
【解决方案2】:

WHERE id = 'id' 如果您希望 id 成为变量,则需要删除 '' 并添加 $ 符号。

【讨论】:

  • 这并不能安静地解决它。它仍然保留在数据库中。我应该在“tidy_maps.delete = function()”中传递“id”吗??
  • 您可以在 data 标签的帮助下使用您的 ajax 请求传递它。 api.jquery.com/jquery.ajax
【解决方案3】:

好吧,我玩了一下,稍微修改了 JS:

tidy_maps.delete = function() {
var confirm_remove = confirm("Do You Want to Remove This Event?")
if(confirm_remove) {
    $.ajax({
        type:'POST',
        url:'removedata.php',
    });
    window.location = "http://www.google.com/";
}
else {
    alert("ERROR!!!!");
}
}

因此,当确认为“是”时,我将重定向到 Google 只是为了看看会发生什么。在确认框中单击“是”时,会将页面重定向到 Google,但不会从数据库中删除该行

【讨论】:

  • 不,只是现在再看一遍。它似乎要去 removedata.php 脚本,但它本身并没有删除预期的行。我只是在寻找另一种方式,通过发送地图标记的纬度和经度并使用它们而不是 id
  • 嗯,你把id传给removedata.php了吗?
  • type: 'POST', url: 'removedata.php', data: { id: &lt;the_id_you_want_to_remove&gt; }, success: function() { ... }
  • 问题是,发送的 ID 将是正在访问的任何标记的 ID。所以不是使用像'5'这样的数值,我需要它是一个变量,所以ID应该像这样发送:“data:{id:$id}”?
【解决方案4】:

试试这个

var id = 5;
var request = $.ajax({
  url:'removedata.php',
  type: "POST",
  data: "id="+id,
  success: function(data){
     console.log(data);
  }
});

在removedata.php中获取post值

 //get post value
 $id = intval($_POST["id"]);
 $sql = "DELETE FROM events WHERE id = " . $id;

【讨论】:

  • 否,因为这会将 ID 作为 5 发送并仅删除该标记行。我希望 ID 是一个变量,因此它会删除所选择的任何事件标记。
猜你喜欢
  • 2013-05-20
  • 1970-01-01
  • 2017-09-26
  • 1970-01-01
  • 1970-01-01
  • 2021-12-17
  • 1970-01-01
  • 1970-01-01
  • 2013-06-28
相关资源
最近更新 更多