Cher forum,

Dans le code suivant, j'ai besoin de récupérer $fis_id et $fis_ref sur la page index.php.

Index.php
contient le formulaire suivant :

<form action="functions.php" method="post">
    <select name="dropdown" onchange="this.form.submit();">
    <?php
    foreach ($form_array as $form_ar)
    {
    ?>
        <option value="<?php echo $form_ar["id"] . "_" . $form_ar["ref"]; ?>"><?php echo utf8_encode($form_ar["name"]);?></option>
    <?php
    }
    ?>
    </select>
    <noscript>
        <input type="submit" value="submit">
    </noscript>
</form>


Functions.php
traite le formulaire :

// Actions si un item de la liste déroulante est sélectionné
if(isset($_POST['dropdown']))
{
    $fi_selected = explode("_",$_POST['dropdown']);
    $fis_id = $fi_selected[0];
    $fis_ref = $fi_selected[1];
} else 
{
    $fis_id = "0";
    $fis_ref = "-";
    $fis_name = "-";
}


Comment faire pour que $fis_id et $fis_ref soient accessible sur la page index.php ?
Faut-il créer une fonction sur functions.php et l'appeler sur l'index.php ?
Ou bien ... ?

Merci pour votre aide !

Umable
Modifié par Umable (26 Sep 2022 - 15:53)
Bonjour,
vous pouvez ajouter le code de functions.php dans index.php et remplacer
<form action="functions.php" method="post">
par
<form action="index.php" method="post">
CrazyYann a écrit :
Bonjour,
vous pouvez ajouter le code de functions.php dans index.php et remplacer
&lt;form action="functions.php" method="post"&gt;
par
&lt;form action="index.php" method="post"&gt;


Merci CrazyYann, je viens de faire la modification mais c'est pas encore ça.
Je viens de simplifier le formulaire en ne postant que l'identifiant et non le couple id+ref, car je peux facilement récupérer la ref avec une requête puisque j'ai l'id.
Cependant, une fois que j'ai sélectionné l'item de la liste déroulante, le script s'exécute, je perds l'id après la redirection, alors que j'en ai besoin à plusieurs étapes du processus (importation de données puis export).

    header("Location: index.php#" . $fis_ref ."");


$_POST étant une superglobale, n'est-il pas possible de la conserver à travers plusieurs pages tant qu'un autre item de la liste déroulante n'est pas sélectionnée ?
J'ai lu sur différents sites ce qu'était une variable globale, mais ne suis pas encore capable de l'utiliser.
Mais peut-être est-ce la construction de la page qui laisse à désirer et m'empêche de conserver l'id ?

index.php

<?php
  // Initialiser la session
  session_start();
  // Vérifiez si l'utilisateur est connecté, sinon redirigez-le vers la page de connexion
  if(!isset($_SESSION["username"])){
    header("Location: login.php");
    exit(); 
  }

// Connexion BDD
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = mysqli_connect("localhost", "root", "", "test");
$query = "SELECT * FROM 0_form_import ORDER BY id ASC";
$result = mysqli_query($mysqli, $query);

// Requête tableau pour liste déroulante
$form_array = array(array('id' => '-', 'params' => '<a class="dropdown-item">', 'name' => "Sélectionner", 'ref' => '', 'params' => '</a>'));    
while ($row = mysqli_fetch_array($result, MYSQLI_BOTH))
{
    $form_array[] = array('id' => $row["id"],
                          'params' => '<a class="dropdown-item">',
                          'name' => $row["name"],
                          'ref' => $row["ref"],
                          'params' => '</a>'
                           );
}

// Actions si un item de la liste déroulante est sélectionné
if(isset($_POST['dropdown']))
{
    $fis_id = $_POST['dropdown'];
} else 
{
    $fis_id = "0";
}

// Requête sur formulaire sélectionné
if(isset($fis_id) && $fis_id>0)
{
    $query = "SELECT name FROM 0_form_import WHERE id = " . $fis_id . "";
    $fis = mysqli_query($mysqli, $query);  
    $fi = mysqli_fetch_array($fis, MYSQLI_BOTH);

    $fis_name = $fi["name"];
    $fis_ref = $fi["ref"];
    
    header("Location: index.php#" . $fis_ref ."");
} else
{
    $fis_ref = "-";
    $fis_name = "-";
}

?>

<form action="index.php" method="post">
    <select name="dropdown" onchange="this.form.submit();">
    <?php
    foreach ($form_array as $form_ar)
    {
    ?>
        <option value="<?php echo $form_ar["id"]; ?>"><?php echo utf8_encode($form_ar["name"]);?></option>
    <?php
    }
    ?>
    </select>
    <noscript>
        <input type="submit" value="submit">
    </noscript>
</form>
Rodolphe a écrit :
Si l'idée est de faire persister une variable entre plusieurs pages, sans devoir se compliquer la vie à la passer en paramètre POST/GET, la piste des sessions https://www.pierre-giraud.com/php-mysql-apprendre-coder-cours/session-definition-utilisation/ , voire des cookies, est certainement plus pratique.

C'est exactement ce qu'il me fallait. J'ai dû reprendre pas mal de point et le code semble plus claire maintenant !
Merci Rodolphe !!