2012-12-27 17 views
7

Mam następujący formularz:Jak zamieścić asocjacyjnej w PHP

<form action="options.php" method="post"> 
    <input type="text" name="deptid" id="deptid" /> 
    <input type="text" name="deptname" id="deptname" /> 
    <input type="submit" name="submit" id="submit" value="save" /> 
</form> 

EDIT

Czy to możliwe, aby przejść dwie wartości w jednej tablicy asocjacyjnej PRZED składania? chciałbym przekazać go w tej formie:

array('deptid'=>'deptname') 

muszę to dlatego unikam zmodyfikować skrypt php pliku docelowego (options.php)

Dzięki.

+1

cURL jest twoim przyjacielem –

+1

@HankyPanky - Co CURL ma z tym wspólnego? –

+0

Ponieważ powiedział "używając tylko skryptu php". Więc jeśli musi publikować dane na tej stronie, używając tylko skryptu php, więc dla początkującego myślałem, że cURL będzie dobry. –

Odpowiedz

5

$_POST jest już asocjacyjna i polecam Ci nie komplikować poza tym ponieważ $_POST posiada już dane pochodziły z formularza.

$myassoc = $_POST; 
print_r($myassoc); 

i asocjacyjna który otrzymasz jest zorganizowany i nazwany tak samo w atrybucie nazwa elementów wejściowych w formularzu (w tym textarea)

Inne Insights

Jak widzę twój kod, który chcesz umieścić dane deptname do deptid, gdy osiągnie kod po stronie serwera PHP. dobrze, co można zrobić z IS jest po prostu przypisać go do kluczy deptid

$_POST['deptid'] = $_POST['deptname']; 
$myassoc = $_POST; 
print_r($myassoc); 
+1

Miałem coś zupełnie innego, myślę, że PO był po; POST jest asocjacyjny, ale myślę, że OP chce, aby * klucze i wartości * były powiązane * wewnątrz * tablicy POST. –

+0

, więc coś w rodzaju "scalenia" go z tablicą POST? –

-1

dlaczego chcesz to zrobić? Ale można wysłać „tablice” poprzez formy tak:

<form method="post"> 
    <input type="text" name="textboxes[]" /> 
    <input type="text" name="textboxes[]" /> 
    <input type="submit" /> 
</form> 

<?php 
    if(isset($_POST['textboxes'])) 
     var_dump($_POST['textboxes']); 
?> 
20

Oto metoda przy użyciu czystego HTML, który get ty prawie dokładnie tam, gdzie chcesz być, a jedynie wykorzystuje HTML:

<form action="options.php" method="post"> 
    <input type="text" name="options[deptid]" id="deptid" /> 
    <input type="text" name="options[deptname]" id="deptname" /> 
    <input type="submit" name="submit" id="submit" value="save" /> 
</form> 

co dałoby Ci w PHP:

$post_options = array(
    'options' => array(
     'deptid '=> '[that input element value]', 
     'deptname' => '[that input element value]' 
    ) 
); 

którego można potem (tym odkażania) dostępu, takie jak ten:

$post_options = array('options'); 

if (is_numeric($post_options['deptid'] && $post_options['deptid'] > 0) { 
    // Do whatever 
} 

if (is_string($post_options['deptname'] && strlen($post_options['deptname'] > 2)) { 
    // Do whatever 
} 

EDIT

Lub ... Chcesz odwołać deptid w atrybucie input name i używać go zmodyfikować wiersz o podanie nazwy wydziału?Co wydaje się wskazywać na coś takiego:

<?php 

$deptid = 1; 
$deptname = 'Department of Silly Walks'; 

?><input type="hidden" name="options[<?=$deptid?>]" value="<?=$deptname?>"> 

który Wyjścia:

<input type="hidden" name="options[1]" value="Department of Silly Walks"> 

http://codepad.org/DtgoZGe7

Problem polega na tym, że wartość $deptid staje się wartość, która nie jest faktycznie bezpośrednio nazwie lub odwołanie. Myślę, że jest to potencjalnie problematyczne w implementacji z powodu tego abstrakcyjnego wpływu wartości z serwera na klienta iz powrotem, dlatego polecam to, co mam na górze. W praktyce nie ma to znaczenia, ale jest to mniej więcej samo-dokumentowanie.

Uwaga, jeśli chcesz serializować listę działów, jest to nieco trudniejsze. Można, na przykład, spróbuj tego:

<input type="text" name="options[][deptid]" id="deptid" /> 
<input type="text" name="options[][deptname]" id="deptname" /> 

Które dodać wartość indeksowane dla każdego input. Jednak ... Nie byliby bezpośrednio powiązani. Otrzymalibyśmy więc dwie zindeksowane tablice dla każdego klucza.

Co Proponuję w tym przypadku jest użycie Javascript aby dodać każdy nowy dział na input elementów, więc można dać każdy numer jak:

<input type="text" name="options[0][deptid]" id="deptid" /> 
<input type="text" name="options[0][deptname]" id="deptname" /> 
<br/> 
<input type="text" name="options[1][deptid]" id="deptid" /> 
<input type="text" name="options[1][deptname]" id="deptname" /> 
<br/> 
<input type="text" name="options[2][deptid]" id="deptid" /> 
<input type="text" name="options[2][deptname]" id="deptname" /> 
<br/> 
<input type="text" name="options[3][deptid]" id="deptid" /> 
<input type="text" name="options[3][deptname]" id="deptname" /> 

Czy metody odświeżenie starej szkoły i korzystać z PHP liczyć $POST['options'] i "ręcznie" dodać nowy "wiersz" wejść o tym samym indeksie. To zwykła pułapka, więc musisz po prostu o tym pomyśleć, jeśli w pewnym momencie to właśnie nadążasz.

+0

cóż, w tym przypadku nadal jest taki sam ...tablica w innej tablicy –

+0

@Mahan - Dokładnie. To jest bardzo użyteczne; zobacz moją edycję dla przykładu syndykacji, gdy masz wiele nowych wpisów i chcesz zarządzać listą działów bezpośrednio przez tablicę POST 'options'. –

+0

cóż, po prostu postępuję zgodnie z kodem OP, zobaczmy, czy on go później zmieni na –

-1
$deptid = $_POST['deptid']; 
$array = array($$deptid => $_POST['deptname']); 
print_r($array); 
3
<form method="post"> 
    <input type="text" name="formdata['deptid']" /> 
    <input type="text" name="formdata['deptname']" /> 
    <input type="submit" /> 
</form> 

<?php 
    if(isset($_POST['formdata'])) 
    { 
     $deptid = $_POST['formdata']['deptid']; 
     $deptname = $_POST['formdata']['deptname']; 
    } 
?> 
0

$_POST już asocjacyjna.

Można odbudować tablicę postaci trzeba z tym po prostu przypisanie $_POST do zmiennej

$myarray = $_POST; 

Teraz $ myarray jest to, czego potrzebują. Wykonaj var_dump($myvar);.

+0

Dzięki, ale nie chcę modyfikować skryptu php na serwerze (options.php) – user1134475

0

Zbuduj obiekt JS o odpowiedniej strukturze, przekonwertuj go na JSON z JSON.stringify(), POST it, a następnie wykonaj json_decode($_POST['data'],true).

Będziesz mieć dokładną kopię z obiektu JS, do skojarzonej tablicy PHP. Upuść drugi parametr true, aby uzyskać obiekt PHP.

Powiązane problemy