web-dev-qa-db-fra.com

Faire un tableau à partir du formulaire de case à cocher

Mon ami et moi sommes en train de créer un site Web qui compile des nouvelles en fonction de vos intérêts. Existe-t-il un moyen simple de prendre les données des cases à cocher et de créer un tableau à partir des cases à cocher sélectionnées? Voici notre formulaire 

<form action="signup.php" method="POST">
    Name: <input type="text" name="name" /> <br />
    Username: <input type="text" name="username"> <br />
    Password: <input type="password" name="pwd" /> <br />
    Email: <input type="text" name="email" /> <br />

    <p>By filling out this we will be able to find news articles that will interest you</p>        <br />
    Politics<input type="checkbox" name="interest[]" value="Politics" /> <br />
    Entertainment<input type="checkbox" name="interest[]" value="Entertainment" /> <br />
    Tech <input type="checkbox" name="interest[]" value="Tech" /> <br />
    Health<input type="checkbox" name="interest[]" value="Health" /> <br />
    Living<input type="checkbox" name="interest[]" value="Living" /> <br />
    Travel <input type="checkbox" name="interest[]" value="Travel" /> <br />
    World<input type="checkbox" name="interest[]" value="World" /> <br />
    Leisure<input type="checkbox" name="interest[]" value="Leisure" /> <br />
    Finance<input type="checkbox" name="interest[]" value="Finance" /> <br />
    Celebrity Gossip<input type="checkbox" name="interest[]" value="Gossip" /> <br />
    Movies<input type="checkbox" name="interest[]" value="Movies" /> <br />
    Sports<input type="checkbox" name="interest[]" value="Sports" /> <br />

    <input type="submit" value="Submit">
</form>

comment pourrions-nous faire un tableau php en utilisant ces données?

10
austin

le balisage HTML:

<form method="get">
    <input type="checkbox" name="options[]" value="Politics"/> Politics<br/>
    <input type="checkbox" name="options[]" value="Movies"/> Movies<br/>
    <input type="checkbox" name="options[]" value="World "/> World<br/>
    <input type="submit" value="Go!" />
</form>

et dans le code php:

$checked = $_GET['options'];
for($i=0; $i < count($checked); $i++){
    echo "Selected " . $checked[$i] . "<br/>";
}
30
The Scrum Meister

utilisez ceci:

<input type="checkbox" name="mydata[checkbox1]"> Option 1 (politics etc)
<input type="checkbox" name="mydata[checkbox2]"> Option 2
<input type="checkbox" name="mydata[checkbox3]"> Option 3

puis accédez à $ _POST ["mydata"] en tant que tableau

5
Oli

Désolé, posté avant que j'aie fini d'écrire :(

Quelques améliorations aux suggestions déjà postées:

Utilisez des étiquettes pour le formulaire:

<label for="check_politics">Politics</label>
<input type="checkbox" name="intrests[]" id="check_politics" value="Politics"/>

À mon avis, utiliser des étiquettes pour améliorer un formulaire est génial :) Définissez leur affichage de sorte qu'il bloque si vous voulez qu'ils aient des sauts de ligne.

Et utilisez foreach pour le parcourir en boucle sur le côté serveur:

$intrests = $_POST['intrests'];
foreach($intrests as $intrest) {
    echo $intrest . " is my intrest";
}
1
Sondre

Le meilleur moyen que j'ai trouvé de faire cela (du moins pour moi) était de convertir les valeurs de case à cocher dans un tableau pour le manipuler comme je le voulais avec implode et exploser:

<form action="thispage.php" method="post">

    (the previous fields here)

    <input type="checkbox" name="interests[]" value="Politics
    <input type="checkbox" name="interests[]" value="Entertainment
    <input type="checkbox" name="interests[]" value="Tech
    <input type="checkbox" name="interests[]" value="Health
    <input type="checkbox" name="interests[]" value="Living
    <input type="checkbox" name="interests[]" value="Travel
    <input type="checkbox" name="interests[]" value="World
    etc...

    <input type="submit" value="Submit">
</form>

Et le php (doit aller AVANT la forme):

<?php
if (isset($_POST['interests'])) {
    $interests_str = implode(" ", $_POST['interests']);// converts $_POST interests into a string
    $interests_array = explode(" ", $interests_str);// converts the string to an array which you can easily manipulate
}

for ($i = 0; $i > count($interests_array); $i++) {
    echo $interests_array[$i];// display the result as a string
}
?>

L'avantage de ce script est que vous pouvez accéder à $ interest_array à tout moment dans votre document sous forme de tableau commun.

1
amypellegrini

hé, j'ai rendu facile la création de cases à cocher ainsi que de boutons radio sous toutes les formes php. La seule chose est que j'utilise le framework Codeigniter MVC.  

Voici la définition de fonction que vous pouvez insérer dans votre modèle commun ou dans n'importe quel fichier d'aide.

function createOptions($fieldName, $labelsArray=array(), $selectedOption, $fieldType,$valuesArray = array()) {
        $returnString = '';
        if(count($valuesArray)!=count($labelsArray))
            $valuesArray=$lebelsArray;
        if ($fieldType === 'checkbox') {
            for ($i=0;$i<count($labelsArray);$i++) {
                $returnString.='&nbsp&nbsp&nbsp<input type="checkbox" name=' . $fieldName.' value='.$valuesArray[$i].' id='.$valuesArray[$i];
                if(in_array($valuesArray[$i], $selectedOption)){
                        $returnString.=' checked="checked" ';
                }
                $returnString.=' />&nbsp&nbsp<label>'.$labelsArray[$i].'</label>';
            }
        }
        if ($fieldType === 'radio') {
            for ($i=0;$i<count($labelsArray);$i++) {
                $returnString.='&nbsp&nbsp<input type="radio" name=' . $fieldName.' value='.$valuesArray[$i].' id='.$valuesArray[$i];
                if($valuesArray[$i]== $selectedOption)
                        $returnString.=' checked="checked" ';
                $returnString.=' /><label>'.$labelsArray[$i].'</label>';
            }
        }
        return $returnString;
    }

Et, vous devez appeler cette fonction dans le fichier view en tant que,

<?php
echo $this->common_model->createOptions('userHobbies[]', $hobbyOptions, $userHobbies, 'checkbox'); ?> 

Le premier paramètre est le nom du champ de case à cocher ou du champ radio, qui sera toujours identique pour toutes les options dans les deux cas. Le deuxième est le tableau d'étiquettes, le troisième est une option sélectionnée qui affichera ces options cochées lors du chargement du formulaire. Quatrième est le type de champ qui sera une chaîne comme "case à cocher" ou "radio". Cinquième sera le tableau de valeurs qui, le cas échéant, contiendra des valeurs pour les étiquettes dans le même ordre que celui des étiquettes. S'il est absent, le tableau des étiquettes sera traité comme un tableau de valeurs.

1
Sujit Singh
//options[] makes it an array
<form method="get">
    <input type="checkbox" name="options[]" value="Politics"/> Politics<br/>
    <input type="checkbox" name="options[]" value="Movies"/> Movies<br/>
    <input type="checkbox" name="options[]" value="World "/> World<br/>
    <input type="submit" value="Go!" />
</form>

Vous pouvez accéder à ce tableau par $_GET['options']

Essayez Print_r( $_GET['options']); pour voir les valeurs qu'il contient.

0
rajmohan

Voici une routine générale permettant de gérer les variables de tableau envoyées à une page, situées parmi les variables nom/valeur habituelles.

Exemple php:

<?php
/*
Summary: Output variables pushed to the page. Handle arrays that have been sent.
Remarks:  $_REQUEST handles posts or gets.
*/
echo '<pre>';
foreach($_REQUEST as $name => $value){
  if (is_array($value)) {
    echo "$name:<br />";

    // Assign array to something more mnemonic
    $items = $value; 
    foreach ($items as $item) {
      echo "  $item<br />";
    }
  } else {
    echo "$name: $value<br />";
  }
}
echo '</pre>';
?>

Exemple de balisage:

<form method="post"
      enctype="application/x-www-form-urlencoded"
      action="forms-process.php">
  <label>Customer name: <input name="customerName" /></label>
  <fieldset>
    <legend> Pizza Toppings </legend>
    <label> <input type="checkbox" name="toppings[]" value="bacon" /> Bacon </label>
    <label> <input type="checkbox" name="toppings[]" value="cheese" /> Extra Cheese </label>
    <label> <input type="checkbox" name="toppings[]" value="onion" /> Onion </label>
  </fieldset>
  <label><button>Submit order</button></label>
</form>  

Exemple de sortie:

customerName: John
toppings:
  bacon
  cheese
0
John Bentley