【问题标题】:How can I call this php function based on button click?如何根据按钮单击调用此 php 函数?
【发布时间】: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 完成(为了所有安全)

标签: php html mysql sql


【解决方案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)”
猜你喜欢
  • 2014-11-01
  • 2014-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-23
  • 1970-01-01
  • 2022-11-14
相关资源
最近更新 更多