Warum funktioniert meine PHP-API nicht mehr und gibt kein JSON mehr zurück?
P粉447785031
P粉447785031 2023-12-16 09:46:32
0
1
603

Vor ein paar Jahren habe ich für einige meiner mobilen Apps ein Backend (PHP, um einige JSON-Daten zu erhalten) erstellt. Ich habe diesen Code seitdem nicht mehr angerührt. Jetzt hat es schon vor Wochen aufgehört zu funktionieren. Ich bin kein Backend-Entwickler, daher habe ich hier nicht viel Erfahrung, aber vor ein paar Jahren dachte ich, es wäre besser, mein eigenes Backend zu erstellen, anstatt Firebase/Serverless zu verwenden ... was nicht meine beste Idee war: )

Was ich versucht habe:

  • Überprüfen Sie die URL mit Chrome --> alles funktioniert einwandfrei (ich kann meine JSON-Daten sehen)
  • Überprüfen Sie in der App oder in Postman: (Header: Content-Type text/html)
<!doctype html>
    <html>
    <head>
    <meta charset="utf-8">
    <meta name="robots" content="noindex, nofollow">
    <title>One moment, please...</title>
    <style>
    body {
        background: #F6F7F8;
        color: #303131;
        font-family: sans-serif;
        margin-top: 45vh;
        text-align: center;
    }
    </style>
    </head>
    <body>
    <h1>Please wait while your request is being verified...</h1>
    <form id="wsidchk-form" style="display:none;" action="/z0f76a1d14fd21a8fb5fd0d03e0fdc3d3cedae52f" method="get">
    <input type="hidden" id="wsidchk" name="wsidchk"/>
    </form>
    <script>
    (function(){
        var west=+((+!+[])+(+!+[]+!![]+!![]+!![]+[])+(+!+[]+!![]+!![]+!![])+(+!+[]+!![]+!![]+!![]+[])+(+!+[])+(+!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+[])+(+!+[]+!![]+!![]+!![]+!![])+(+!+[]+[])),
            east=+((+!+[])+(+!+[]+!![]+[])+(+!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![])+(+!+[]+[])+(+![])+(+!+[]+!![]+[])+(+!+[]+!![])+(+!+[]+!![]+!![]+[])),
            x=function(){try{return !!window.addEventLis tener;}catch(e){return !!0;} },
            y=function(y,z){x() ? document.addEventLis tener("DOMContentLoaded",y,z) : document.attachEvent("onreadystatechange",y);};
        y(function(){
            document.getElementById('wsidchk').value = west + east;
            document.getElementById('wsidchk-form').submit();
        }, false);
    })();
    </script>
    </body>
    </html>

Das ist meine PHP-Datei:

$response = array();

function saveResultOfQueryToArray($result){
  global $response;
  $response['workouts'] = array();

  while($row = mysqli_fetch_array($result)){

      $temp = array();

      //  $temp['aufruf'] = $aufruf;
      $temp['error'] = false;
      $temp['workoutname'] = $row['workoutname'];          
      $temp['duration'] = $row['duration'];          
      ...    

      array_push($response['workouts'],$temp);

  }
}

if($_SERVER['REQUEST_METHOD']=='GET') {
  $db = new DbOperation();
  $users = $db->getHighestRatingWith31Results();
  saveResultOfQueryToArray($users, $chooseMethod);
}
else {
    $response['error'] = true;
    $response['message'] = "Invalid Request";
}

echo json_encode($response);

Kann mir jemand erklären, was ich falsch mache/was geändert werden kann?

P粉447785031
P粉447785031

Antworte allen(1)
P粉821231319

看起来 if($_SERVER['REQUEST_METHOD'] == 'GET') 没有 $response。除非代码中有更多内容,否则 $response 未定义。

if($_SERVER['REQUEST_METHOD']=='GET') {
  $db = new DbOperation();
  $users = $db->getHighestRatingWith31Results();
  saveResultOfQueryToArray($users, $chooseMethod);
  $response['error'] = false;
  $response['message'] = 'Whatever you want returned here.';
else {
    $response['error'] = true;
    $response['message'] = "Invalid Request";
}

echo json_encode($response);

类似的东西应该可以解决问题!我还建议查看 HTTP 响应,例如 HTTP 405。 https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/405

编辑:我看到了您的更新,很抱歉,但这引发了更多问题。也就是说,$db->getHighestRatingWith31Results(); 是做什么的?函数 saveResultOfQueryToArray() 接受一个参数,但用法是给函数提供两个参数? saveResultOfQueryToArray 正在调用 mysqli_fetch_array(),它需要一个 mysqli_result 实例。

这是我的建议:

  • 使用 PDO 而不是 mysqli。我知道您说过这是旧代码,但 PDO 非常棒。 https://www.php.net/manual/en/class.pdohttps://phpdelusions.net/pdo
  • 我可能不会将 $response 设置为全局变量。我要么从 saveResultOfQueryToArray() 返回 $response,要么考虑通过引用传递。 https://www.php.net/manual/en/language。 references.pass.php
  • 我再次建议您研究一下 HTTP 响应代码。
  • 最后,我知道这很难,但是将您的变量命名为更容易理解的名称,并用注释记录您的代码。计算机科学中有一个老笑话:“计算机科学中最困难的两个部分是缓存失效、命名事物和相差一错误。” “文档是一封写给未来的自己的情书。” - 达米安·康威
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage