php 在表格单元格上使用“onclick”更改SQL值?

zqry0prt  于 2023-04-10  发布在  PHP
关注(0)|答案(3)|浏览(131)

如果我们有一个简单的表(列表)作为sql select的结果,有没有一个简单的方法如何改变二进制值与onclick在单个单元格?
表结构为:

ID  Name  Bin1  Bin2  Bin3
1   Mila  0     0     1
2   John  0     0     0
3   Pato  1     0     0

所以我搜索了一些简单的JQUERY或 AJAX ,可以改变点击单元格的值,这样页面就不需要刷新了。
我们的想法是创建一个包含名称和三个(或更多)列的表,当值为1时,单元格具有特定的颜色(如果值为0,则没有颜色),在这种情况下,列表示列出的人的IN-OUT-PAUSE状态。
我现在有一个来自数据库的简单列表:

有人能给我指出正确的方向吗?我正在使用MySQL-PHP-HTML组合。

xwmevbvl

xwmevbvl1#

这应该能帮你开始

您的 AJAX 代码

$(document).ready(function(){
    $(".my_element").click(function(){
        $.ajax({
            type: "POST",
            cache: false,
            url: "my_backend.php",
            data: {value: "new value"}, //send a new value to the "my_backend.php" script
            beforeSend: function (html) {
                //show a preloader here
            },
            success: function (html) {
                //do something if request is successfully completed
            }
        })
    })
})

您的后台Php脚本

<?php
$value = $_POST['value']; // you need to do additional sql injection protection yourself;

$query = mysqli_query($db,"my mysqli updating query")or trigger_error(mysqli_error());

?>
db2dz4w8

db2dz4w82#

你可以点击获取表格单元格中的文本,并使用jquery AJAX ,将其提供给php脚本。该脚本可以运行mysql查询,根据ajax/post请求传输的值将值更改为0/1。然后你可以启动另一个查询,在数据库中请求新值并输出这个新值(在php脚本中)。
例如:

$(document).ready(function(){
    $('table').on('click','td',function(){
        var currentValue = $(this).text();
        var dbEntryId = $(this).attr('data-dbEntryId');
        $.ajax({
            url: "script.php",
            method: "POST",
            data: { dbEntryId: dbEntryId, currentValue: currentValue },
            success: function(result){
                $(this).text(result);
            }
        });
    });
});

正如你所看到的,你可以使用php输出,把它作为新的文本放在表格单元格中。
这只是js部分的一个示例。在这种情况下,您必须使用data-dbEntryId属性补充table-cell,以便您知道必须在db中编辑哪个条目。

jjhzyzn0

jjhzyzn03#

一种可能的方法是在表上使用属性。

<table id="table-to-click">
    <thead>
        <tr>
            <th>ID</th>
            <th>Name</th>
            <th>Bin1</th>
            <th>Bin2</th>
            <th>Bin3</th>
        </tr>
    </thead>
    <tbody>
        <tr data-id="1" class="table-tr">
            <td data-prop="id" class="t-id">1</td>
            <td data-prop="name" class="t-id">Mila</td>
            <td data-prop="bin1" class="t-id">0</td>
            <td data-prop="bin2" class="t-id">0</td>
            <td data-prop="bin3" class="t-id">1</td>
        </tr>
    </tbody>
</table>
<script type="text/javascript">
    $(function() {
        //On click on a td in this table
        $("table.table-to-click > tbody > tr.table-tr td").on('click', function(e) {
            //Get field in database to update
            var fieldName = $(this).attr('data-prop');
            //Get id in database (easier that read first td's value)
            var id = $(this).parent().attr('data-id');
            //Call server with datas

            $.ajax({
                method: "POST",
                url: "update-field.php",
                data: {
                    field: fieldName,
                    id:    id
                }
            });
        };
    });
</script>

上面的代码显示了一个表格,点击表格单元格发送一个请求来更新给定的字段。参见jQueryAJAX。注意:data-prop是数据库中字段的名称。
下面的代码是你的页面update-field.php,它接收请求,并在数据库中进行更新

if (empty($_POST['field']) || empty($_POST['id'])) {
    exit();
}
$fields = ["name", "bin1", "bin2", "bin3"];

//It is only possible to update field in $fields array,
//This is for security reason (to not update id for example)
if (! in_array($_POST['field'], $fields)) {
    exit();
}
$db = new PDO('mysql:host=localhost;dbname=yourdbname;charset=utf8', 'yourusername', 'yourpassword');
$stmt = $db->prepare("UPDATE yourTable SET :fieldname = (:fieldname + 1) % 2 WHERE id = :id");
$stmt->execute(array(
    'fieldname' => mysql_real_escape_string($_POST['field']),
    'id' => intval($_POST['id']),
));

参见PDOprepared statements

相关问题