IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Echec de la requête CORS


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 71
    Par défaut Echec de la requête CORS
    Bonjour,

    Je ne suis pas un expert Php et me sers beaucoup du forum pour avance. Je suis confronté à un souci et ne trouve aucune solution.
    A partir d'Agular 9, je tente de me connecter à mon serveur Php. J'utilise EasyPhp.

    mes codes de connection sont dans database.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    <?php
     
    header("Access-Control-Allow-Origin: http://localhost:4200");
    header("Access-Control-Allow-Methods: PUT, GET, POST, DELETE");
    header("Access-Control-Allow-Headers: Authorization, Content-Type, Accept");
     
    // db credentials
    define('DB_HOST', 'localhost');
    define('DB_USER', 'root');
    define('DB_PASS', '');
    define('DB_NAME', 'projectbase');
     
    // Connect with the database.
    function connect()
    {
      $connect = mysqli_connect(DB_HOST ,DB_USER ,DB_PASS ,DB_NAME);
     
      if (mysqli_connect_errno($connect)) {
        die("Failed to connect:" . mysqli_connect_error());
      }
     
      mysqli_set_charset($connect, "utf8");
     
      return $connect;
    }
     
    $con = connect();
    ?>
    A partir d'un formulaire, je fais appel à create.php qui me permet d’insérer des données dans ma table Mysql:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    <?php
      require 'database.php';
      $db ='';
      $numero = 0;
      $marque = ''; 
     
      $postdata = file_get_contents("php://input");
     
      if(isset($postdata) && !empty($postdata))
      {
        $request = json_decode($postdata,true);
     
        $numero = mysqli_real_escape_string($con, $request->numero);
        $marque = mysqli_real_escape_string($con, $request->marque);
     
        $sql = "INSERT into 'carinputdata' (null, 'numero', 'marque')
                VALUES ('id', '{$numero}', '{$marque}')";
     
        if(mysqli_query($con, $sql))
        {
          http_response_code(201);
          $carinputdata = [
          'id' => mysqli_insert_id($con),
          'numero' => $numero,
          'marque' => $marque];
          echo json_encode($carinputdata);
        }
        else
        {
          http_response_code(422);
        }
      }
    ?>
    L'appel de create.php entraîne une erreur:

    Dans firefox, l'erreur est:
    Blocage d’une requête multiorigines (Cross-Origin Request) : la politique « Same Origin » ne permet pas de consulter la ressource distante située sur http://localhost:8080/api/create.php. Raison : échec de la requête CORS.

    ERROR Object { headers: {…}, status: 0, statusText: "Unknown Error", url: "//localhost:8080/api/create.php", ok: false, name: "HttpErrorResponse", message: "Http failure response for //localhost:8080/api/create.php: 0 Unknown Error", error: error }
    Et dans chrome, l'erreur est:

    POST http://localhost:8080/api/create.php net::ERR_CONNECTION_REFUSED

    ERROR HttpErrorResponse*{headers: HttpHeaders, status: 0, statusText: "Unknown Error", url: "//localhost:8080/api/create.php", ok: false,*…}
    J'ai cherché la solution partout mais je ne trouve rien. Pourriez vous me donner un coup de main s'il vous plait?

    Cordialement

  2. #2
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2012
    Messages : 631
    Par défaut
    salut,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    header("Access-Control-Allow-Origin: http://localhost:4200");
    tu autorises l'application PHP à reçevoir des requêtes http en provenance uniquement de http://localhost:4200, or ton client (angular ) envoie des requêtes http depuis http://localhost:8080 d'où l'erreur.

    Pour corriger cela tu dois pouvoir autoriser l'appli PHP d'accepter les requêtes depuis http://localhost:8080 ou depuis n'importe quel client *
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    header("Access-Control-Allow-Origin: http://localhost:8080");
    //ou depuis n'importe quel client, en mettant *
    //header("Access-Control-Allow-Origin: *");
    header("Access-Control-Allow-Methods: PUT, GET, POST, DELETE");
    header("Access-Control-Allow-Headers: Authorization, Content-Type, Accept");
    pour recuper un objet desiarisé il faut faire $request = json_decode($postdata,false); et non $request = json_decode($postdata,true);https://www.php.net/manual/fr/function.json-decode.php

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 71
    Par défaut
    Bonjour Armel18,

    L'utilisation de header("Access-Control-Allow-Origin: http://localhost:4200") fonctionne pour le GET mais pas pour le POST. En mettant 8080, rien ne marche.

    Merci

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2005
    Messages : 71
    Par défaut
    Bonjour

    Pas trouvé mais je cloture le ticket... J'abandonne...Je retourne à mon full PHP qui marche bien...

  5. #5
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2012
    Messages : 631
    Par défaut
    ERROR HttpErrorResponse*{headers: HttpHeaders, status: 0, statusText: "Unknown Error", url: "//localhost:8080/api/create.php", ok: false,*…}
    t'as probablement une erreur liée à l'Url au niveau de Angular.t'as une URL sans préfixe http.
    côté angular, dans un component:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    this.http.post<any>('http://localhost:8080/api/create.php', { numero: 1, marque:"La marque" }).subscribe(response => {
        console.log(response);
     })
    côté serveur essaie de réduire au strict minimum ton code question de voir si tu reçois les données envoyées en POST
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    header("Access-Control-Allow-Origin: *");
    header("Access-Control-Allow-Methods: PUT, GET, POST, DELETE");
    header("Access-Control-Allow-Headers: Authorization, Content-Type, Accept");
    $postdata = file_get_contents("php://input");
     
     if(!empty($postdata))
      {
        $request = json_decode($postdata,false);
     
        $numero = $request->numero;
        $marque = $request->marque;
     
        $response = [ "numero" => $numero, "marque" => $marque ];
        http_response_code(201);
     
        echo json_encode($response);
     
     
     }
    Une erreur CORS peut aussi avoir pour origine une erreur au niveau du script PHP. Donc il est important de tester ton script PHP hors d'un navigateur Web en utilisant un outil comme postman ou insomnia.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Supporter les requêtes CORS sur un service Datasnap REST
    Par mistercactus dans le forum Web & réseau
    Réponses: 3
    Dernier message: 09/08/2019, 09h38
  2. Requête CORS avec basic authentification
    Par youness1307 dans le forum jQuery
    Réponses: 1
    Dernier message: 13/03/2015, 00h26
  3. Echec exécution d'une requête (access 2002)
    Par atoffoli75 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 05/08/2008, 20h24
  4. [MySQL] Echec de la requête
    Par tchoulina dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 04/03/2008, 14h15
  5. Echec d'une requête d'insertion
    Par mambo dans le forum Langage SQL
    Réponses: 27
    Dernier message: 21/09/2007, 12h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo