PHP: Valeur Récupération des cases à cocher lorsque le nom n'a pas un tableau

voix
4

Un formulaire Je n'ai aucun contrôle sur les données est afficherons à mon script PHP. Le formulaire contient des cases le long de ces lignes:

<input type=checkbox value=val1 name=option/>
<input type=checkbox value=val2 name=option/>

Si je devais écrire le code pour la forme, j'écrire au name=option[]lieu de name=option. Mais ce n'est pas un changement que je peux faire. Maintenant, si les deux cases sont cochées, $_POST[option]retourne simplement l' une des valeurs. Comment puis - je, en PHP récupérer toutes les valeurs sélectionnées?

Créé 03/07/2009 à 02:53
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
14

Vous pouvez lire les données POST brutes. Par exemple:

<fieldset>
    <legend>Data</legend>
    <?php
    $data = file_get_contents("php://input");
    echo $data."<br />";
    ?>
</fieldset>

<fieldset>
    <legend>Form</legend>
    <form method="post" action="formtest.php">
        <input type="checkbox" value="val1" name="option"/><br />
        <input type="checkbox" value="val2" name="option"/><br />
        <input type="submit" />
    </form>
</fieldset>

Cochez les deux cases et la sortie sera:

option=val1&option=val2

Voici une démonstration en direct . Tout ce que vous avez à faire est alors d'analyser la chaîne vous - même, dans un format approprié. Voici un exemple d'une fonction qui fait quelque chose comme ça:

function parse($data)
{
    $pairs = explode("&", $data);

    // process all key/value pairs and count which keys
    // appear multiple times
    $keys = array();
    foreach ($pairs as $pair) {
        list($k,$v) = explode("=", $pair);
        if (array_key_exists($k, $keys)) {
            $keys[$k]++;
        } else {
            $keys[$k] = 1;
        }
    }

    $output = array();
    foreach ($pairs as $pair) {
        list($k,$v) = explode("=", $pair);
        // if there are more than a single value for this
        // key we initialize a subarray and add all the values
        if ($keys[$k] > 1) {
            if (!array_key_exists($k, $output)) {
                $output[$k] = array($v);
            } else {
                $output[$k][] = $v;
            }
        } 
        // otherwise we just add them directly to the array
        else {
            $output[$k] = $v;
        }
    }

    return $output;
}

$data = "foo=bar&option=val1&option=val2";

print_r(parse($data));

Les sorties:

Array
(
    [foo] => bar
    [option] => Array
        (
            [0] => val1
            [1] => val2
        )

)

Il pourrait y avoir quelques cas où cette fonction ne fonctionne pas comme prévu, donc soyez prudent.

Créé 03/07/2009 à 03:02
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more