Partage
  • Partager sur Facebook
  • Partager sur Twitter

Variable valeur et nom de option dans dropdown

for, foreach, array

5 octobre 2021 à 17:53:12

Bonjour j'aurais besoin d'un coup de main je ne suis pas un pro du développement et la je ne comprends pas comment arriver a ce que je souhaite.

Je veux afficher un dropdown html généré par mon code PHP (donc dynamiquement a chaque chargement de page)

Voici mon code PHP actuelle et ce que j'ai déjà réussi a obtenir :

<html>
<?php
//first initsession to get session token assuming that users profile allows ticket creation;
$api_url="https://glpi-test/apirest.php";
    $user_token="xxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
    $app_token="yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy";
    $ch = curl_init();
    $url=$api_url . "/initSession?Content-Type=%20application/json&app_token=".$app_token ."&user_token=".$user_token;
    curl_setopt($ch, CURLOPT_URL,$url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $json = curl_exec($ch);
    curl_close ($ch);
    $obj = json_decode($json,true);
    $sess_token = $obj['session_token'];
    $headers =array(
        'Content-Type: application/json',
        'App-Token: ' .$app_token,
        'Session-Token: '.$sess_token
        );
//once $header is set, create ticket

$ticket_id="51" ;
$user_id="3904" ;

$ch = curl_init();
    $url=$api_url . "/ITILCategory/?range=0-2000"; 

    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
    $request_result = curl_exec($ch);
    curl_close ($ch);


$category_id = array();
$name = array();

$obj = json_decode($request_result);
foreach( $obj as $each ){
    $category_id[]=$each->itilcategories_id;
    $name[]=$each->name;
}
?>
    <select name="name of categories_id">
    <option value=""></option>
<?php
foreach($name as $key=>$val)
{
?>
    <option value="<?php echo $key; ?>"><?php echo $val; ?></option>
<?php
}
?>
</select>
</html>


Vous pouvez voir que la variable $val me créer correctement m'a liste option sélectionnable mais le problème est que la variable $key elle ajoute simplement +1 a la valeur précédente alors que moi je veux que la valeur de chaque option de mon Select corresponde a la vrai valeur de itilcategories_id.

J'ai l'impression que de partir sur un foreach n'est pas la bonne idée ou alors je ne vois pas comment récupérer la bonne valeur au niveau de $key

donc si j'ai été assé claire dans mes explication (pas simple quand ont ne connais pas les bon termes) et que quelqu'un veux bien m'aider cela serait super.

Merci


-
Edité par Vincent1890 5 octobre 2021 à 21:04:58

  • Partager sur Facebook
  • Partager sur Twitter
5 octobre 2021 à 19:44:22

Tu ne te sers pas de $category_id et tu ne définis pas pour autant de clés à $name donc tu as X clés qui vont de 0 à X - 1 (ie ton tableau est numériquement indexé et non associatif).

Le premier foreach ne sert à rien, tu pourrais générer ton select et ses option dans le premier, non ? (avec des htmlspecialchars tant qu'à faire aussi)

Et pourquoi tu json_décodes 3 fois la même chose ?!?

?&gt;
&lt;select name="name of categories_id"&gt;
&lt;?php foreach ($obj as $each): ?&gt;
    &lt;option value="&lt;?= htmlspecialchars($each-&gt;itilcategories_id) ?&gt;"&gt;&lt;?= htmlspecialchars($each-&gt;name) ?&gt;&lt;/option&gt;
&lt;?php endforeach ?&gt;
&lt;/select&gt;

(les &lt; sont des < et les &gt; des >)

-
Edité par julp 5 octobre 2021 à 19:51:33

  • Partager sur Facebook
  • Partager sur Twitter
5 octobre 2021 à 21:46:46

julp a écrit:

Tu ne te sers pas de $category_id et tu ne définis pas pour autant de clés à $name donc tu as X clés qui vont de 0 à X - 1 (ie ton tableau est numériquement indexé et non associatif).

Le premier foreach ne sert à rien, tu pourrais générer ton select et ses option dans le premier, non ? (avec des htmlspecialchars tant qu'à faire aussi)

Et pourquoi tu json_décodes 3 fois la même chose ?!?

?&gt; &lt;select name="name of categories_id"&gt; &lt;?php foreach ($obj as $each): ?&gt; &lt;option value="&lt;?= htmlspecialchars($each-&gt;itilcategories_id) ?&gt;"&gt;&lt;?= htmlspecialchars($each-&gt;name) ?&gt;&lt;/option&gt; &lt;?php endforeach ?&gt; &lt;/select&gt; 

(les &lt; sont des < et les &gt; des >)

-
Edité par julp il y a environ 1 heure


Merci pour votre aide les 3 json decode est une erreur de nettoyage du script avant le post (merci d'avoir eu yeux sur cela j'ai rectifié mon premier post) j'ai déjà tellement testé de formulation de script différents que les deux ligne avaient été oubliée.

J'ai tester en remplaçant par votre bout de script mais malheureusement je me retrouve avec erreur 500

j'ai donc essayé en remplaçant par les caractère non encodé de cette façon et j'ai le résultat souhaité au final je cherchais a faire trop compliqué je m’aperçois voila le bout de code final qui fonctionne impeccablement bien.

<html>
<?php
//first initsession to get session token assuming that users profile allows ticket creation;
$api_url="https://glpi-test/apirest.php";
    $user_token="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
    $app_token="yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy";
    $ch = curl_init();
    $url=$api_url . "/initSession?Content-Type=%20application/json&app_token=".$app_token ."&user_token=".$user_token;
    curl_setopt($ch, CURLOPT_URL,$url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $json = curl_exec($ch);
    curl_close ($ch);
    $obj = json_decode($json,true);
    $sess_token = $obj['session_token'];
    $headers =array(
        'Content-Type: application/json',
        'App-Token: ' .$app_token,
        'Session-Token: '.$sess_token
        );
//once $header is set, create ticket

$ticket_id="51" ;
$user_id="3904" ;

$ch = curl_init();
    $url=$api_url . "/ITILCategory/?range=0-2000"; 

    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
    $request_result = curl_exec($ch);
    curl_close ($ch);


$category_id = array();
$name = array();

$obj = json_decode($request_result);
?>
<select name="name of categories_id">
<?php foreach ($obj as $each): ?>
    <option value="<?php echo htmlspecialchars($each->itilcategories_id) ?>"><?php echo htmlspecialchars($each->name) ?></option>
<?php endforeach; ?>
</select>

</html>



Merci pour toutes vos explications

J'ai quand même une interrogation quel est l’intérêt de tout convertir les < et > est ce quelques chose a faire absolument ?

-
Edité par Vincent1890 5 octobre 2021 à 21:47:35

  • Partager sur Facebook
  • Partager sur Twitter