Maison  >  Questions et réponses  >  le corps du texte

Pourquoi mon API PHP a-t-elle cessé de fonctionner et ne renvoie plus json ?

Il y a quelques années, j'ai créé un backend (PHP pour obtenir des données json) pour certaines de mes applications mobiles. Depuis, je n'ai pas touché à ce code. Maintenant, il a cessé de fonctionner il y a des semaines. Je ne suis pas un développeur backend donc je n'ai pas beaucoup d'expérience ici, mais il y a quelques années, j'ai pensé qu'il serait préférable de créer mon propre backend au lieu d'utiliser Firebase/Serverless... ce qui n'était pas ma meilleure idée : )

Ce que j'ai essayé :

<!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>

Voici mon fichier php :

$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);

Quelqu'un peut-il m'expliquer ce que je fais de mal/ce qui peut être changé ?

P粉447785031P粉447785031331 Il y a quelques jours583

répondre à tous(1)je répondrai

  • P粉821231319

    P粉8212313192023-12-17 09:11:42

    On dirait if($_SERVER['REQUEST_METHOD'] == 'GET') 没有 $response。除非代码中有更多内容,否则 $response indéfini.

    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);

    Quelque chose comme ça devrait faire l'affaire ! Je recommande également de consulter la réponse HTTP, telle que HTTP 405. https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/405

    Edit : J'ai vu votre mise à jour et je suis désolé, mais cela soulève d'autres questions. Autrement dit, $db->getHighestRatingWith31Results(); 是做什么的?函数 saveResultOfQueryToArray() accepte un paramètre, mais l'utilisation est de fournir deux paramètres à la fonction ? saveResultOfQueryToArray appelle mysqli_fetch_array(), ce qui nécessite une instance mysqli_result.

    Voici ma suggestion :

    • Utilisez PDO au lieu de mysqli. Je sais que vous avez dit que c'était un vieux code, mais PDO est génial. https://www.php.net/manual/en/class.pdo et https://phpdelusions.net/pdo
    • Je ne définirais probablement pas $response comme variable globale. Soit je renverrais $response de saveResultOfQueryToArray(), soit j'envisagerais de passer par référence. https://www.php.net/manual/en/langue. références.pass.php
    • Encore une fois, je vous recommande de consulter les codes de réponse HTTP.
    • Enfin, je sais que c'est difficile, mais nommez vos variables de manière plus compréhensible et documentez votre code avec des commentaires. Il existe une vieille blague en informatique : "Les deux parties les plus difficiles de l'informatique sont l'invalidation du cache, la dénomination des éléments et les erreurs une par une." "Un document est une lettre d'amour à votre futur moi." - Damian Conway

    répondre
    0
  • Annulerrépondre