2010-07-23 13 views
69

Mam formularz taki jak ten poniżej, który jest wysłany do contacts.php, a użytkownik może dynamicznie dodawać więcej za pomocą jquery.Jak uzyskać formularz tablicy wejściowej do tablicy 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[]" /> 

Jeśli echo ich w php z kodem poniżej

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

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

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

będę się mniej więcej tak:

name1name2name3email1email2email3

jak mogę dostać tych zawiera kod podobny do poniższego kodu:

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

więc moje wyjście jest tak:

Nazwa jest nazwa1 i e-mail jest Email1, dziękuję
Nazwa jest name2 i e-mail jest mail2, dziękuję ty
Imię i nazwisko to name3, a e-mail to email3, dziękuję

dziękuję za wszelką pomoc lub poradę

Odpowiedz

117

Są już w tablicach: $name jest array, podobnie jak $email

Wszystko, co musisz zrobić, to dodać trochę przetwarzania do ataku na obie tablice:

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

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

Aby obsłużyć więcej wejść, po prostu przedłużyć wzoru:

$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

dziękuję, co gdybym dodał kolejne wejście takiego miejsca [], w jaki sposób mogę dodać, że w tak dobrze? – thom

+1

Zasadniczo wystarczy rozciągnąć wzór. Zobacz moją edycję powyżej ... wszelkie dodatkowe dane wejściowe będą również tablicami, gdy je przypiszesz z $ _POST (zakładając, że w html jest wiele wejść o tej nazwie, tak jak w przypadku tych pól). –

+0

dziękuję bardzo, idealny – thom

37

Np nazywając pola jak

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

(co jest również możliwe, gdy dodawanie elementów za pośrednictwem JavaScript)

Odpowiedni skrypt php może wyglądać

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

Jednak rozwiązanie VolkerK jest najlepiej unikać tęsknić parę pomiędzy e-mail i nazwę użytkownika. Więc musisz wygenerować kod HTML z PHP w ten sposób:

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

Zmień $ total_data zgodnie z Twoimi potrzebami. Aby to pokazać, tak jak poniżej:

$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); 

Zakładając, że dane zostały wysłane za pomocą metody POST.

2

Co jeśli masz szereg zestawów pól?

<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> 

Dodałem ukryte pole do policzenia liczby zestawów pól. Użytkownik może dodawać lub usuwać pola, a następnie zapisywać je.

1

Natknąłem się również na ten problem. Biorąc pod uwagę 3 wejścia: pole [], pole2 [], pole3 []

Możesz uzyskać dostęp do każdego z tych pól dynamicznie. Ponieważ każde pole będzie tablicą, powiązane pola będą miały ten sam klucz tablicy. Na przykład, biorąc pod uwagę dane wejściowe:

Bob i jego e-mail i seks będą dzielić ten sam klawisz. Mając to na uwadze, możesz uzyskać dostęp do danych w pętli for:

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

Ta skala również. Wszystko, co musisz zrobić, to dodać odpowiednie tablice, gdy potrzebujesz nowych pól do dodania.

-2

Korzystając z tej metody powinno działać:

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

Wyjaśnij swoją odpowiedź krok po kroku – krisdestruction

+0

Więcej szczegółów – krisdestruction

1

Wiem, że trochę późno, ale można zrobić coś takiego jak ten:

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; 
} 

Test z:

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

To dla mnie wyprodukowało:

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

Niemniej jednak, można użyć kodu jak poniżej,

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