如何根据按钮单击调用此 php 函数?

Posted

技术标签:

【中文标题】如何根据按钮单击调用此 php 函数?【英文标题】:How can I call this php function based on button click? 【发布时间】:2022-01-01 08:44:18 【问题描述】:

我有一个重置按钮,它实质上将此处的 JSON 数据替换为另一个名为 defaultStats.json 的数据集(我已存储以供使用)。这是当前数据库的样子:

而我的按钮代码是这样的:

<form method="post">
     <input type="submit" name="resetButton" class="btn btn-outline-danger" value="Reset" />
</form>

而我的 PHP 函数是这样的:

<?php
function resetButton()
  $file = file_get_contents('defaultStats.json');
  $email = isset($_SESSION['email'])? $_SESSION['email'] : '';
  $sql = "INSERT INTO `users` (`data`) VALUES ('$file') WHERE `email`='$email'; ";


if(array_key_exists('resetButton',$_POST))
  resetButton();

?>

我不确定为什么或什么不能正常工作,或者是否有更简单的方法。我没有用我的按钮正确调用函数吗?还是实际功能无法正常工作?数据位于名为“users”的表中,我想替换已登录用户电子邮件的 json 文件。

编辑: 我已经更改了我的 PHP 代码,但它仍然无法正常工作,echo 也没有对我的网页做任何事情。它只是刷新。

          <?php
            if(isset($_POST['resetButton']))
              echo 'hello world';
            
          ?>

【问题讨论】:

你做了什么调试?您可以轻松地在函数内放置一个 echo 以查看该函数是否已执行。我能看到的主要问题是你声明了你的 sql 查询,但你从来没有真正将它发送到数据库 您尚未发布您的架构,但如果您将 JSON 数据存储在 VARCHAR 或类似列中,这是一个非常糟糕的主意。考虑使用 JSON 数据类型,或者更好地正确规范您的架构。 @ADyson 我已经编辑了帖子以包含我一直在尝试的一些新代码。我接受了你的建议。见帖子底部。 为了使 SQL 语句对您的数据库产生影响,应该运行它。在您的函数resetButton 中,您只需声明SQL 语句。如果该函数是 class 的一部分(即: method ),那么它可能有权访问数据库连接对象 - 否则您将需要创建数据库连接的新实例或传递数据库conn 变量可以作为函数内的global 或作为参数。其本质是你必须实际执行sql命令! 另外 - insert 子句不使用 where 子句,您希望插入/更新等的任何数据都应使用 prepared statements 完成(为了所有安全) 【参考方案1】:

我并不是说你必须这样做,而是你可以这样做(尽管它仍然完全未经测试/调试)!

if( $_SERVER['REQUEST_METHOD']=='POST' && isset( $_POST['resetButton'] ) && $_POST['resetButton']=='Reset' )

    $dbhost =   'xxx';
    $dbuser =   'xxx';
    $dbpwd  =   'xxx';
    $dbname =   'xxx';
    
    $db=new mysqli( $dbhost, $dbuser, $dbpwd, $dbname );


    function resetButton( $db=false )
        if( $db )
        
            $file = file_get_contents( 'defaultStats.json' );
            $email = $_SESSION['email'] ?: 'none@none.com';
            
            $sql='insert into `users` ( `data`, `email` ) values ( ?, ? )';
            $stmt=$db->prepare( 'ss', $file, $email );
            
            $stmt->execute();
            $stmt->close();
            
            return true;
        
        return false;
    

    
    
    $status=resetButton( $db );
    exit( $status );

【讨论】:

谢谢教授。我在这里发现的唯一错误是 $stmt=$db->prepare,其中 $db 专门抛出了这个错误:“Expected type 'object'. Found 'true'.intelephense(1006)”

以上是关于如何根据按钮单击调用此 php 函数?的主要内容,如果未能解决你的问题,请参考以下文章

从代码中调用按钮单击的函数

您如何根据选择的单选按钮调用不同的 javascript 函数? [复制]

单击提交按钮时如何将php验证文件调用到html文件

在按钮上单击清除显示的文本并在 VueJs 中调用另一个函数

通过单击按钮从 HTML 调用 Angular2 组件函数

单击pyfltk中的按钮时如何调用函数