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

Langage PHP Discussion :

Mélange de Formulaire / cURL / API / Foreach


Sujet :

Langage PHP

  1. #1
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mai 2020
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Mai 2020
    Messages : 28
    Par défaut Mélange de Formulaire / cURL / API / Foreach
    Bonjour a vous, et merci pour votre aide a l'avance.
    Voici mon probleme en question. j'ai un formulaire avec des "Checkbox" comme voici :

    Formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     <form action="api_create.php" method="post">
                    <div class="Categories">
                        <div class="ItemsOrderedBodyInside CategoriesCol"><input type="checkbox" value="100" name="checkbox_categories[]">BMW</div>
                        <div class="ItemsOrderedBodyInside CategoriesCol"><input type="checkbox" value="101" name="checkbox_categories[]">AUDI</div>
                        <div class="ItemsOrderedBodyInside CategoriesCol"><input type="checkbox" value="102" name="checkbox_categories[]">MERCEDEZ</div>
                        <div class="ItemsOrderedBodyInside CategoriesCol"><input type="checkbox" value="103" name="checkbox_categories[]">VOLKS</div>
                    </div>
    </form>
    api_create.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    // Calculer le nombre de "Checked"
    $checked_arr_type = $_POST['checkbox_categories'];
    $count_type = count($checked_arr_type);
    Ensuite dans ma fonction curl_setop_array dans le champ CURLOPT_POSTFIELDS
    j'ai ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $arr_categories = array(
    100=>"VANAGON",
    101=>"AUDI",
    102=>"MERCEDEZ",
    103=>"VOLKS"
    );

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
        CURLOPT_POSTFIELDS =>'{
        "categories": [
            { 
                "id": "100", // changer par la valeur du "Checkbox"
                "name": "VANAGON", // changer par la valeur du array donc la valeur du array est celle du "checkbox"
                "slug": "VANAGON" // changer par la valeur du array donc la valeur du array est celle du "checkbox"
            }
        ]
    }
    mon but etant de faire un while dans le cas ou j'aurais les 4 checkbox activé pour avoir comme resultat :
    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
     
        CURLOPT_POSTFIELDS =>'{
        "categories": [
            { 
                "id": "100",
                "name": "AUDI",
                "slug": "AUDI"
            },
            { 
                "id": "101",
                "name": "VANAGON",
                "slug": "VANAGON"
            },
            { 
                "id": "102",
                "name": "MERCEDEZ",
                "slug": "MERCEDEZ"
            },
            { 
                "id": "103",
                "name": "VOLKS",
                "slug": "VOLKS"
            }
        ]
    }
    j'espere bien avoir expliqué mon probleme

    Merci encore

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 315
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 315
    Billets dans le blog
    17
    Par défaut
    Code PHP : 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
    $arr_categories = [
        100 => 'VANAGON',
        101 => 'AUDI',
        102 => 'MERCEDEZ',
        103 => 'VOLKS',
    ];
     
    $checked_arr_type = $_POST['checkbox_categories'] ?? [];
     
    $full_data = ['categories' => []];
    foreach ($checked_arr_type as $category_id) {
        if (!isset($arr_categories[$category_id])) { // Contrôle de cohérence
            // Si ID inconnu, on ignore
            continue;
        }
        $full_data['categories'][] = [
            'id' => $category_id,
            'name' => $arr_categories[$category_id],
            'slug' => $arr_categories[$category_id],
        ];
    }
     
    $curl_postfields = json_encode($full_data);

  3. #3
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mai 2020
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Mai 2020
    Messages : 28
    Par défaut
    Merci Seb pour ton aide,

    Bon mon probleme est pire a premiere vue ca apres je me rend compte que j'ai d'autre valeur dans le "POSTFIELDS"

    Voici ce qui est ajouté :
    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
    34
     
    CURLOPT_POSTFIELDS =>'{
        "categories": [
            { 
                "id": "100",
                "name": "VANAGON",
                "slug": "VANAGON"
            }
        ],
        "weight": "'.$weight.'",
        "dimensions": {
            "length": "'.$length.'",
            "width": "'.$width.'",
            "height": "'.$height.'"
        },
        "meta_data": [
            {
                "key": "model_space",
                "value": "'.$model_space.'"
            },
            {
                "key": "model_horizontal",
                "value": "'.$model_horizontal.'"
            },
            {
                "key": "model_dot",
                "value": "'.$model_dot.'"
            },
                    {
                "key": "model_oem",
                "value": "'.$model_oem.'"
            }
    ]
    }',
    et voila que plus rien fonctionne

    Merci encore grandement apprécié

  4. #4
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 660
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 660
    Par défaut
    je vous déconseille de créer le format json vous même. utilisez le même principe que l'exemple de code que Séb. vous as montré.
    et si ça ne fonctionne pas, montrez nous votre nouveau code et le résultat que vous avez.

  5. #5
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mai 2020
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Mai 2020
    Messages : 28
    Par défaut
    Super, Voici le code en question :
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    $arr_categories = [
        100 => 'VANAGON',
        101 => 'AUDI',
        102 => 'MERCEDEZ',
        103 => 'VOLKS',
    ];
     
    $checked_arr_type = $_POST['checkbox_categories'] ?? [];
     
    $full_data = ['categories' => []];
    foreach ($checked_arr_type as $category_id) {
        if (!isset($arr_categories[$category_id])) { // Contrôle de cohérence
            // Si ID inconnu, on ignore
            continue;
        }
        $full_data['categories'][] = [
            'id' => $category_id,
            'name' => $arr_categories[$category_id],
            'slug' => $arr_categories[$category_id],
        ];
    }
    $curl_postfields = json_encode($full_data);
     
    $curl = curl_init();
     
    curl_setopt_array($curl, array(
        CURLOPT_URL => "https://".$url."/wp-json/wc/v3/products?consumer_key=".$consumer_key."&consumer_secret=".$consumer_secret."&name=".$name."&type=simple&regular_price=".$regular_price."&description=".$description."&sku=".$sku."&manage_stock=true&backorders_allowed=true&backorders=notify&stock_quantity=0 ",
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_ENCODING => '',
        CURLOPT_MAXREDIRS => 10,
        CURLOPT_TIMEOUT => 0,
        CURLOPT_FOLLOWLOCATION => true,
        CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
        CURLOPT_CUSTOMREQUEST => 'POST',
        CURLOPT_POSTFIELDS =>'{
        "'.$curl_postfields.'",
        "weight": "'.$weight.'",
        "dimensions": {
            "length": "'.$length.'",
            "width": "'.$width.'",
            "height": "'.$height.'"
        },
        "meta_data": [
            {
                "key": "model_space",
                "value": "'.$model_space.'"
            },
            {
                "key": "model_horizontal",
                "value": "'.$model_horizontal.'"
            },
            {
                "key": "model_dot",
                "value": "'.$model_dot.'"
            },
                    {
                "key": "model_oem",
                "value": "'.$model_oem.'"
            }
    ]
    }',
        CURLOPT_HTTPHEADER => array(
            'Content-Type: application/json',
            'Cookie: weglot_allow_private=1'
        ),
    ));
     
    $response = curl_exec($curl);
    ce qui donne l'erreur :
    {"code":"rest_invalid_json","message":"Invalid JSON body passed.","data":{"status":400,"json_error_code":4,"json_error_message":"Syntax error"}}
    Si je laisse le code d'origine :
    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
    CURLOPT_POSTFIELDS =>'{
        "categories": [
            {
                "id": 100,
                "name": "VANAGON",
                "slug": "VANAGON"
            }
        ],
        "weight": "'.$weight.'",
        "dimensions": {
            "length": "'.$length.'",
            "width": "'.$width.'",
            "height": "'.$height.'"
        },
        "meta_data": [
            {
                "key": "model_space",
                "value": "'.$model_space.'"
            },
            {
                "key": "model_horizontal",
                "value": "'.$model_horizontal.'"
            },
            {
                "key": "model_dot",
                "value": "'.$model_dot.'"
            },
                    {
                "key": "model_oem",
                "value": "'.$model_oem.'"
            }
    ]
    le resultat donne ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    "categories":[
       {
         "id":100,
         "name":"Rear Axle",
         "slug":"rear-axle-1996"
       }
    ],

    parcontre avec le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $curl_postfields = json_encode($full_data);
    il donne comme resultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    {
         "categories":[
         {
           "id":"100",
           "name":"VANAGON",
           "slug":"VANAGON"}
    ]
    }
    il ajoute les accolade devant et a la fin, cest possible que l'erreur ce situe a cette endroit ?

    Merci beaucoup

Discussions similaires

  1. Formulaire et API
    Par Mathieu M. dans le forum IGN API Géoportail
    Réponses: 7
    Dernier message: 09/05/2012, 13h16
  2. FORMULAIRE avec 2 foreach imbriquer
    Par kate59 dans le forum PHP & Base de données
    Réponses: 24
    Dernier message: 03/08/2011, 14h50
  3. Formulaire et API
    Par Mathieu M. dans le forum IGN API Géoportail
    Réponses: 2
    Dernier message: 12/07/2011, 09h25
  4. [MySQL] récupérer et ajouter des valeurs après un formulaire issu de foreach
    Par Cosmopolitan51 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 25/01/2011, 19h48
  5. [PHP 5.0] Envois de données POST sans formulaire - Curl
    Par phoelis1 dans le forum Langage
    Réponses: 5
    Dernier message: 30/04/2009, 20h05

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