web-dev-qa-db-fra.com

Comment obtenir un tableau de saisie de formulaire dans le tableau PHP

J'ai un formulaire comme celui ci-dessous qui est posté à contacts.php, et l'utilisateur peut ajouter dynamiquement plus avec jQuery.

<input type="text" name="name[]" />
<input type="text" name="email[]" />

<input type="text" name="name[]" />
<input type="text" name="email[]" />

<input type="text" name="name[]" />
<input type="text" name="email[]" />

Si je les renvoie en php avec le code ci-dessous

$name = $_POST['name'];
$email = $_POST['account'];

foreach( $name as $v ) {
print $v;
}

foreach( $email as $v ) {
print $v;
}

Je vais obtenir quelque chose comme ça:

nom1nom2nom3email1email2email3

comment puis-je obtenir ces tableaux dans quelque chose comme le code ci-dessous

function show_Names($n, $m)
{
return("The name is $n and email is $m, thank you");
}

$a = array("name1", "name2", "name3");
$b = array("email1", "email2", "email3");

$c = array_map("show_Names", $a, $b);
print_r($c);

donc ma sortie est comme ça:

Le nom est nom1 et le courrier électronique est email1, Je vous remercie
Le nom est nom2 et le courrier électronique est email2, Je vous remercie
Le nom est nom3 et le courrier électronique est email3, Je vous remercie

merci pour toute aide ou conseil

87
thom

Ils sont déjà dans des tableaux: $name est un tableau, de même que $email

Donc, tout ce que vous avez à faire est d’ajouter un peu de traitement pour attaquer les deux tableaux:

$name = $_POST['name'];
$email = $_POST['account'];

foreach( $name as $key => $n ) {
  print "The name is ".$n." and email is ".$email[$key].", thank you\n";
}

Pour gérer plus d'entrées, il suffit d'étendre le motif:

$name = $_POST['name'];
$email = $_POST['account'];
$location = $_POST['location'];

foreach( $name as $key => $n ) {
  print "The name is ".$n.", email is ".$email[$key].
        ", and location is ".$location[$key].". Thank you\n";
}
137
Jeffrey Blake

Par exemple. en nommant les champs comme

<input type="text" name="item[0][name]" />
<input type="text" name="item[0][email]" />

<input type="text" name="item[1][name]" />
<input type="text" name="item[1][email]" />

<input type="text" name="item[2][name]" />
<input type="text" name="item[2][email]" />

(ce qui est également possible lors de l'ajout d'éléments via javascript)

Le script php correspondant pourrait ressembler à

function show_Names($e)
{
  return "The name is $e[name] and email is $e[email], thank you";
}

$c = array_map("show_Names", $_POST['item']);
print_r($c);
46
VolkerK

Je sais que c'est un peu tard maintenant, mais vous pouvez faire quelque chose comme ceci:

function AddToArray ($post_information) {
    //Create the return array
    $return = array();
    //Iterate through the array passed
    foreach ($post_information as $key => $value) {
        //Append the key and value to the array, e.g.
            //$_POST['keys'] = "values" would be in the array as "keys"=>"values"
        $return[$key] = $value;
    }
    //Return the created array
    return $return;
}

Le test avec:

if (isset($_POST['submit'])) {
    var_dump(AddToArray($_POST));
}

Ceci pour moi a produit:

array (size=1)
  0 => 
    array (size=5)
      'stake' => string '0' (length=1)
      'odds' => string '' (length=0)
      'ew' => string 'false' (length=5)
      'ew_deduction' => string '' (length=0)
      'submit' => string 'Open' (length=4)
4
Sam Swift 웃

Et si vous avez un tableau d'ensembles de champs?

<fieldset>
<input type="text" name="item[1]" />
<input type="text" name="item[2]" />
<input type="hidden" name="fset[]"/>
</fieldset>

<fieldset>
<input type="text" name="item[3]" />
<input type="text" name="item[4]" />
<input type="hidden" name="fset[]"/>
</fieldset>

J'ai ajouté un champ caché pour compter le nombre de champs. L'utilisateur peut ajouter ou supprimer les champs puis les sauvegarder.

2
Sophia Gavish

J'ai aussi rencontré ce problème. Étant donné 3 entrées: champ [], champ2 [], champ3 []

Vous pouvez accéder à chacun de ces champs de manière dynamique. Étant donné que chaque champ sera un tableau, les champs associés partageront tous la même clé de tableau. Par exemple, données d'entrée:

Bob, son email et son sexe partageront la même clé. Dans cet esprit, vous pouvez accéder aux données dans une boucle for comme ceci:

    for($x = 0; $x < count($first_name); $x++ )
    {
        echo $first_name[$x];
        echo $email[$x];
        echo $sex[$x];
        echo "<br/>";
    }

Cette balance aussi. Tout ce que vous avez à faire est d’ajouter vos tableaux respectifs lorsque vous avez besoin de nouveaux champs.

2
thatonefreeman

Cependant, la solution de VolkerK est la meilleure solution pour éviter tout couple manquant entre email et nom d'utilisateur. Vous devez donc générer du code HTML avec PHP comme ceci:

<? foreach ($i = 0; $i < $total_data; $i++) : ?>
    <input type="text" name="name[<?= $i ?>]" />
    <input type="text" name="email[<?= $i ?>]" />
<? endforeach; ?>

Modifiez $ total_data selon vos besoins. Pour le montrer, juste comme ça:

$output = array_map(create_function('$name, $email', 'return "The name is $name and email is $email, thank you.";'), $_POST['name'], $_POST['email']);
echo implode('<br>', $output);

En supposant que les données ont été envoyées à l'aide de la méthode POST.

0
iroel

Néanmoins, vous pouvez utiliser le code ci-dessous en tant que,

$a = array('name1','name2','name3');
$b = array('email1','email2','email3');

function f($a,$b){
    return "The name is $a and email is $b, thank you";
}

$c = array_map('f', $a, $b);

//echoing the result

foreach ($c as $val) {
    echo $val.'<br>';
}
0
Abhishek Gurjar

C'est facile:

foreach( $_POST['field'] as $num => $val ) {
      print ' '.$num.' -> '.$val.' ';
    }
0
Ian