2010-07-23 4 views
69

J'ai un formulaire comme celui ci-dessous qui est posté à contacts.php, et l'utilisateur peut dynamiquement ajouter plus avec jquery.Comment obtenir le tableau d'entrée de formulaire dans le tableau PHP

<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 fais écho 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 ceci:

name1name2name3email1email2email3

comment puis-je obtenir les tableaux en 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 ceci:

Le nom est nom1 et email est email1, merci
Le nom est nom2 et email est mail2, merci vous
Le nom est nom3 et email est email3, merci

merci pour toute l'aide ou des conseils

Répondre

117

Ils sont déjà dans les tableaux: $name est un array, tel quel $email

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 plusieurs entrées, étendre simplement le modèle:

$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"; 
} 
+0

merci, si j'ai ajouté une autre entrée comme lieu [], comment pourrais-je ajouter que aussi bien? – thom

+1

Fondamentalement, vous venez d'étendre le motif. Voir ma modification ci-dessus ... toutes les entrées supplémentaires seront également des tableaux lorsque vous les affectez à partir de $ _POST (en supposant qu'il y ait plusieurs entrées avec ce nom dans le HTML, comme vous l'avez fait avec ces champs). –

+0

merci beaucoup, parfait – thom

37

Par ex 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]" /> 

(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); 
0

Cependant, la solution de VolkerK est le meilleur pour éviter couple entre manquer e-mail 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 en fonction de vos besoins. Pour l'afficher, juste comme ceci:

$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 en utilisant la méthode POST.

2

Et si vous avez un tableau de jeux 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 groupes de champs. L'utilisateur peut ajouter ou supprimer les champs, puis les enregistrer.

1

J'ai également rencontré ce problème. Compte tenu de 3 entrées: champ [], champ2 [], champ3 []

Vous pouvez accéder à chacun de ces champs dynamiquement. Comme chaque champ sera un tableau, les champs liés partageront tous la même clé de tableau. Par exemple, les données d'entrée donné:

Bob et son e-mail et le sexe partagent le même clé. Avec cela à l'esprit, vous pouvez accéder aux données dans une boucle comme ceci:

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

Cette échelles ainsi. Tout ce que vous devez faire est d'ajouter vos vars de tableau respectifs chaque fois que vous avez besoin de nouveaux champs à ajouter.

-2

En utilisant cette méthode devrait fonctionner:

$name = $_POST['name']; 
$email = $_POST['account']; 
while($explore=each($email)) { 
    echo $explore['key']; 
    echo "-"; 
    echo $explore['value']; 
    echo "<br/>"; 
} 
+0

Expliquez votre réponse étape par étape – krisdestruction

+0

Avec plus de détails – krisdestruction

1

Je sais que un peu tard, 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 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) 
0

Néanmoins, vous pouvez utiliser le code ci-dessous comme,

$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>'; 
} 
Questions connexes