【问题标题】:How to remove a query from an HTML table and database?如何从 HTML 表和数据库中删除查询?
【发布时间】:2018-03-13 12:01:24
【问题描述】:

我有一个包含 2 个表的数据库:
第一个表“数据”与列(姓名、电话、人名)
第二个表“链接”与列(linkid、link、personid)
Personid 是以“一对多”关系连接两个表的外键,在 DELETE 或 UPDATE 时为“CASCADE”, 所以一个人可以拥有多个链接。

HTML 表如下所示:

name    phone    links
jim     432443   link1
                 link2
                 link3
                 .....
_______________________
john    54545    link1
_______________________
...     .....    .....

显示数据库包含在 html 表中的代码:

$state = $connect->prepare("SELECT data.personid, name, phone, link FROM data JOIN links ON data.personid = links.personid");
$state->execute();
$results = $state->fetchAll(PDO::FETCH_ASSOC);
$data = [];

foreach($results as $result) {

        $data[$result['personid']] = [
            'name' => $result['name'],
            'phone' => $result['phone'],
            'links' => [],
        ];


    $data[$result['personid']]['links'][] = $result['link'];
}

<table>

     <thead>
        <tr>
            <th>Name</th>
            <th>Phone</th>
            <th>Links</th>
            </tr>
     </thead>
     <tbody>    
        <?php
          foreach ($data as $row) {
                        echo "<tr>";
                        echo "<th>".$row['name']."</th>";
                        echo "<td>".$row['phone']."</td>";
                        echo "<td>".implode('<br/>', $row['links'])."</td>";
                        echo "<td>";
                        echo "</td>";
                        echo "</tr>";
             }
         ?>
</table>

我想添加一个删除功能来删除其中一些数据,例如每个查询旁边的复选框和一个名为“删除选定项”的按钮,例如,我知道如何添加复选框和按钮,但我不知道知道实现这个功能的代码。

【问题讨论】:

    标签: php html mysql sql pdo


    【解决方案1】:

    希望它适用于添加,请检查此处显示的代码。

    在 html 上包含以下内容:

    <form action="action.php" method="POST">
    <button type="submit">delete</button>
    <table>
    
     <thead>
        <tr>
            <th><input type="checkbox" name="check_select" readonly="readonly" onclick="toggleselect(this,'delete_data');"></th>
            <th>Name</th>
            <th>Phone</th>
            <th>Links</th>
            </tr>
     </thead>
     <tbody>
    <?php
          foreach ($data as $row) {
                        echo "<tr>";
                        echo '<input type="checkbox" class="check_box" name="checkbox_delete_data[]" value="'.$row['primary_id_of_your_table'].'">';
                        echo "<td>".$row['name']."</td>";
                        echo "<td>".$row['phone']."</td>";
                        echo "<td>".implode('<br/>', $row['links'])."</td>";
                        echo "<td>";
                        echo "</td>";
                        echo "</tr>";
             }
         ?>
    
    </table>
    </form>
    

    在 Javascript 中:

    function toggleselect(source,chkbox_name) 
    {
          checkboxes = document.getElementsByName('checkbox_'+chkbox_name+'[]');
    
          for(var i=0, n=checkboxes.length;i<n;i++) {
            checkboxes[i].checked = source.checked;
          }
    }
    

    现在您可以访问 action.php 文件中选中的复选框,并使用它通过查询删除。

    例如:

    <?php
    if (isset($_POST["submit"])) {
        $selected_check_boxes = implode(',', $_POST["checkbox_delete_data"]);
        $query= $connect->prepare("Delete from table where table.primary id IN ($selected_check_boxes)");
        $query->execute();
    }
    ?>
    

    【讨论】:

    • 谢谢,但它只适用于单个删除,当我选择多个复选框时 SQL 错误发生
    • 两个人的ID是 2,3 , '2,3' 附近的错误,我想是因为 $selected_check_boxes 作为字符串插入到数据库中
    • 我已经编辑了我的答案,请在 IN 之后在参数周围添加括号
    • 你为什么在这里使用准备?
    • @AbdalAsif 感谢它现在正在工作,如果我想知道已删除查询的数量怎么办?
    【解决方案2】:

    我建议在

    中制作整个表格,并在每个复选框中添加一些带有 personId 的“data-”属性。然后使用 javascript 处理(当表单提交时)这些属性并合并 SQL 查询,如
    delete from data where personid (1,2,3, ...)
    

    如果您需要更多帮助,我可以编写一些代码,但自己开发总是更好:)

    干杯

    【讨论】:

      猜你喜欢
      • 2016-04-17
      • 1970-01-01
      • 2020-08-01
      • 2014-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-29
      • 2015-02-20
      相关资源
      最近更新 更多