8721 sujets

Développement web côté serveur, CMS

Bonjour,

Dans un formulaire j'ai les inputs suivants :

<input type="text" name="livre1" size="2" value="<?php echo isset($_POST['livre1'])?htmlentities($_POST['livre1'],ENT_QUOTES,"UTF-8"):''; ?>">
          <input type="text" name="livre2" size="2" value="<?php echo isset($_POST['livre2'])?htmlentities($_POST['livre2'],ENT_QUOTES,"UTF-8"):''; ?>">
          <input type="text" name="livre3" size="2" value="<?php echo isset($_POST['livre3'])?htmlentities($_POST['livre3'],ENT_QUOTES,"UTF-8"):''; ?>"> ..... etc


Je cherche à intégrer tout ceci dans une boucle avec les "livre1", "livre2", "livre3" .... etc dans une variable "$livre" et à faire un seul input tel que :

<input type="text" name="<?php echo $livre ?>" size="2" value="<?php echo isset($_POST['$livre'])?htmlentities($_POST['$livre'],ENT_QUOTES,"UTF-8"):''; ?>">


Ce code ne fonctionne pas, je crois que le problème vient de :
$_POST['$livre']


Finalement ma question est comment faire un $_POST sur une variable tel que $livre, est-ce possible ?

Merci pour votre aide
Cordialement
Patrick Mara
Modérateur
Salut,

c'est pas plutôt :
$_POST[$livre]

? Je sais plus si on a le droit de faire ça Smiley lol Mais si tu mets des quotes il va le prendre pour une string.
Modifié par _laurent (20 Nov 2020 - 17:11)
Modérateur
Bonjour,

Dans "$livre", $livre est remplacé par son contenu (et c'est donc souvent équivalent d'écrire "$livre" ou $livre).

Par contre, dans '$livre', $livre n'est pas remplacé par son contenu.

Amicalement,
Modérateur
Et l'eau,

@_laurent : bien sûr que tu as le droit de faire ça et ta réponse est juste.

@pmara : comment est ton formulaire ? Est il pré-rempli ? Est ce que tu as des données qui viennent du serveur (fichier plat / base de données / api / etc.) ?

Sinon, un bout de réponse ?


<?php
    $data = [
        'livre_1' => "",
        'livre_2' => "",
        'livre_3' => "",
    ];
    if(!empty($_POST['send'])){
        $_POST = array_map(function($field){
            return htmlentities($field,ENT_QUOTES,"UTF-8");
        }, $_POST);
        $data = array_merge($data, array_filter($_POST, function($v, $k){
            return strstr($k, 'livre');
        }, ARRAY_FILTER_USE_BOTH));
    }
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <form action="" method="post">
        <?php foreach($data as $key => $value): ?>
        <div class="input text">
            <label for="<?= $key ?>"><?= $key ?></label>
            <input type="text" name="<?= $key ?>" value="<?= $value ?>" id="<?= $key ?>">
        </div>
        <?php endforeach; ?>
        <div class="input submit">
            <input type="submit" name="send" value="envoyer">
        </div>
    </form>
</body>
</html>

Modifié par niuxe (20 Nov 2020 - 20:21)
Modérateur
niuxe a écrit :
@_laurent : bien sûr que tu as le droit de faire ça et ta réponse est juste.

Il le semblait bien mais ca fait longtemps que j'ai pas joué avec $_POST haha